Skip to main content
@traffical/cli manages your Traffical configuration as code. You define parameters, events, and metrics in a .traffical/ directory, version-control them alongside your application, and sync with the platform with push, pull, and status.

Why config-as-code

  • Single source of truth — parameter and event definitions live in your repo, reviewed in pull requests like any other code.
  • No drift — definitions you push become synced: read-only in the dashboard, so the repo and the platform can’t disagree.
  • Typed events — generate TypeScript types from your event schemas so invalid track() calls fail at compile time.
  • CI-enforceabletraffical status exits non-zero on drift, so you can gate merges on the repo and platform being in sync.
Policies, allocations, and experiment lifecycle decisions still live in the dashboard — the CLI owns the definitions, not the rollout state.

Installation

Requires Node.js 18+.

Quickstart

1

Initialize

From your project root, scaffold the .traffical/ directory and link a project:
init logs you in, lets you pick an org and project, writes config.yaml and project.yaml, creates a public SDK key, and drops example code for your framework.
2

Edit your config

Add or change parameters and events in .traffical/config.yaml. See the configuration file reference for every field.
3

Push to Traffical

4

Check for drift

Authentication

For interactive use, log in once with the browser-based device flow:
This opens your browser, asks you to confirm a code, and stores a session at ~/.config/traffical/auth.json (mode 0600). The session holds a refresh token and renews access tokens automatically, so you rarely log in again.
whoami without --verify reports the cached session. A cached session can still be reported as authenticated after it has ended server-side — use --verify when you need a definitive answer.

Credential precedence

The CLI resolves a bearer token in this order:
  1. --api-key <key> on the command line
  2. TRAFFICAL_API_KEY environment variable (org-scoped key — the CI path)
  3. TRAFFICAL_API_TOKEN environment variable (pre-minted JWT, for agents)
  4. The device-flow session from traffical login
  5. A legacy ~/.trafficalrc profile (--profile <name>) — deprecated
For CI, set TRAFFICAL_API_KEY and skip login entirely.

Selecting a project

A repo is linked to exactly one Traffical project, recorded in .traffical/project.yaml.
When a flag is omitted, the CLI prompts: a select list for ≤10 options, a search box beyond that. Pass --force to re-link a repo that’s already linked. Manage orgs and projects directly:

Syncing configuration

1

status — see the difference

Shows what’s synced, what has local changes to push, and what exists only in the dashboard. Exits with code 10 when there’s drift, so it doubles as a CI check.
2

push — repo → Traffical

Creates new definitions and updates existing synced ones. Pushed definitions become read-only in the dashboard.
  • --dry-run — validate and print the diff without applying.
  • --prune — archive synced definitions that have been removed from the file. Without it, removals stay on the platform.
3

pull — Traffical → repo

Downloads synced parameters, events, and property groups into config.yaml. Dashboard-only definitions stay in the dashboard until you import them. --include-types runs generate-types afterwards.
4

sync — both directions

Pushes local changes and pulls new remote definitions in one pass. On conflict, local wins. --all syncs every config file in the repo.

Importing dashboard definitions

Definitions created in the dashboard are dashboard-only until you adopt them into code:

Type-safe events

Generate TypeScript types from your event definitions so invalid event names and properties become compile errors:
This emits a TrafficalEventProperties map — event name → typed property shape. Wrap your client’s track:
Run it after every pull (or in CI) to keep types in sync. See Type-safe events for the full flow.

CI/CD integration

Command reference

Global options

Environment variables: TRAFFICAL_API_KEY, TRAFFICAL_API_TOKEN, TRAFFICAL_API_BASE.

Exit codes

Next steps

Configuration file

Every field in config.yaml, project.yaml, and metrics.yaml.

Parameters

Typed values with defaults.

Type-safe events

Codegen, SDK typing, and dev-mode validation.

Quickstart

Resolve a parameter and track an event.