| Option | Description |
|---|---|
-t, --token \
|
Use a token for non-interactive login. Pass a JWT directly instead of going through the OTP email flow — ideal for CI pipelines and cloud containers. The token's expiry is parsed from the JWT payload and stored alongside the session. |
| Option | Description |
|---|---|
|
`-p, --project-id |
Set project ID (if logged in, you can pick from a list instead). |
| `-y, --yes` | Skip prompts and use defaults. |
| Option | Description |
|---|---|
|
`-i, --id |
Embeddable ID to pull (skips interactive selection). |
| `--version [number]` | Version to pull. Omit a value (`--version`) to open an interactive version selector. Pass a number (`--version 47`) to pull a specific version. Without this flag, `pull` defaults to the latest version. |
|
`-o, --out |
Output path for compiled JSON (default:
`embeddables/ |
|
`-b, --branch |
Pull a specific branch. |
| `-f, --fix` | Remove components with missing required props instead of erroring. |
| `-p, --preserve` | Preserve component order in config (see note below). |
--project-id \
|
Project ID for embeddable selection (skips project selection prompt). |
--bypass-auth
|
Skip the login check. Intended for CI environments and automated tooling where no auth token is stored. |
| Option | Description |
|---|---|
|
`-i, --id |
Embeddable ID (prompt if not provided). |
|
`-p, --pages |
Custom pages glob (default:
`embeddables/ |
|
`-o, --out |
Output path for compiled JSON. |
| `-L, --local` | Use local engine (`http://localhost:8787`) instead of production. |
|
`-e, --engine |
Engine origin (default: `https://engine.embeddables.com`; overridden by `--local`). |
|
`--port |
Dev proxy port (default: `3000`). If in use, CLI tries the next available port. |
|
`--overrideRoute |
Route to override in proxy (default: `/init`). |
|
`--pageKeyFrom |
How to derive page keys: `filename` or `export` (default: `filename`). |
| `--fix` | Apply lint fixes (e.g. duplicate IDs, keys starting with a number). |
--bypass-auth
|
Skip the login check. Intended for CI environments and automated tooling where no auth token is stored. |
| Option | Description |
|---|---|
|
`-i, --id |
Embeddable ID (required). |
|
`-p, --pages |
Pages glob. |
|
`-o, --out |
Output path for JSON. |
|
`--pageKeyFrom |
`filename` or `export` (default: `filename`). |
| `--fix` | Apply lint fixes. |
--bypass-auth
|
Skip the login check. Intended for CI environments and automated tooling where no auth token is stored. |
| Option | Description |
|---|---|
|
`-i, --id |
Embeddable ID (prompt if not provided). |
| `-l, --label | Human-readable version label. |
|
`-b, --branch |
Branch ID to save to. |
| `-s, --skip-build` | Use existing `.generated/embeddable.json` (no build step). |
|
`--from-version |
Base version (auto-detected from local config if not set). |
-p, --project-id \
|
Project ID (skips project selection prompt). |
--force
|
Skip confirmation prompts (version conflicts and other users' drafts). |
| Option | Description |
|---|---|
|
`-i, --id |
Embeddable ID (prompt from local Embeddables if not provided). |
-b, --branch \
|
Branch ID or name to switch to (skips the interactive branch selection prompt). |
| Option | Description |
|---|---|
-i, --id \
|
Embeddable ID. Inferred from the current working directory or automatically when run inside embeddables/\; otherwise prompts to choose from local Embeddables if not provided.
|
-n, --name \
|
Branch name (required). The origin version and branch are read automatically from config.json. The success output includes the new branch ID returned by the server. |
| Option | Description |
|---|---|
-i, --id \
|
Embeddable ID (inferred from cwd or interactive prompt if not provided). |
-n, --name \
|
Experiment name (required). |
-k, --experiment-key \
|
Experiment key (required). Used to reference the experiment in code. |
-p, --project-id \
|
Project ID (skips project selection prompt). |
--variants \
|
Comma-separated key:weight pairs (e.g. control:50,treatment:50). Defaults to control:50,treatment:50. Weights must sum to 100; if they don't, the CLI will prompt to auto-adjust (or pass --auto-adjust to skip the prompt).
|
--status \
|
Initial experiment status. Valid values: draft, active, paused, completed. Defaults to draft.
|
--auto-adjust
|
Automatically scale variant weights to 100% without an interactive confirmation prompt. Useful for non-TTY/CI environments. |
| Option | Description |
|---|---|
|
`-i, --id |
Embeddable ID. |
|
`--experiment-id |
Experiment ID (prompt to choose if not provided). |
|
`--experiment-key |
Experiment key (required if `--experiment-id` is set). |
-p, --project-id \
|
Project ID (skips project selection prompt). |
| Option | Description |
|---|---|
|
`-i, --id |
Embeddable ID (prompt from local Embeddables if not provided; inferred automatically if run from inside `embeddables/ |
-p, --project-id \
|
Project ID (skips project selection prompt). |
| Option | Description |
|---|---|
|
`-i, --id |
Embeddable ID to inspect (required). |
|
`--version |
Version to inspect — a version number or `"latest"` (default: `latest`). |
|
`-b, --branch |
Embeddable branch ID. |
| `-f, --fix` | Fix by removing components missing required props (default: on). |
| `-p, --preserve` | Preserve component order during forward compilation (default: off). Use when you want to keep existing component order for comparison purposes. |
|
`-e, --engine |
Engine origin (default: `https://engine.embeddables.com`). |
| Option | Description |
|---|---|
|
`-i, --id |
Embeddable ID (prompt from local Embeddables if not provided; inferred automatically if run from inside `embeddables/ |
|
`--from |
Version to compare from (default: `latest`). Accepts a version number, `latest`, `staging`, `prod`, `local`, or `branch@version`. |
|
`--to |
Version to compare to (default: `local`). Same format as `--from`. |
|
`--depth |
Detail level: `pages`, `components` (default), or `props`. |
|
`--page |
Filter output to specific page keys or IDs (comma-separated, no spaces). |
|
`--component |
Filter output to specific component keys or IDs (comma-separated, no spaces). |
|
`-b, --branch |
Branch to use when fetching cloud versions (auto-detected from `config.json` if not set). |
|
`-e, --engine |
Engine origin (default: `https://engine.embeddables.com`). |
| `--no-color` | Disable colored output. |
| Option | Description |
|---|---|
|
`-i, --id |
Embeddable ID (inferred from cwd or interactive prompt if not provided). |
|
`--dir |
Local directory to upload from (default: `assets/`). |
|
`--group-id |
Target asset group ID. Resolved from project config if not provided. |
| `--recursive` | Traverse subdirectories (default: top-level only). |
|
`--include |
Glob pattern to include only matching files. |
|
`--exclude |
Glob pattern to exclude matching files. |
| `--dry-run` | Preview what would be uploaded without actually uploading. |
|
`--workers |
Number of concurrent upload workers (default: `5`). |
| Option | Description |
|---|---|
|
`-i, --id |
Embeddable ID (inferred from cwd or interactive prompt if not provided). |
|
`--group-id |
Asset group ID to sync. Resolved from project config if not provided. |
|
`-o, --out |
Output path for the asset manifest (default: `assets.json`). |
| Option | Description |
|---|---|
| `[message]` | Optional feedback message as a positional argument. If omitted, you will be prompted interactively. |
| `--positive` | Mark the feedback as positive (👍). |
| `--negative` | Mark the feedback as negative (👎). Default when a message is passed non-interactively. |
|
`--category |
Feedback area: `cli`, `ai`, `compiler`, or `other`. |
| Option | Description |
|---|---|
-p, --project-id \
|
Project ID to list tasks for. Defaults to the project configured in embeddables.json; prompts interactively if not set.
|
| Option | Description |
|---|---|
-i, --id \
|
Task ID (required). Displays status, priority, type, assignee, dates, body, and effort. |
| Option | Description |
|---|---|
-i, --id \
|
Task ID (required). |
-s, --status \
|
New status (required). Valid values: to\_do, scoping, in\_progress, feedback\_cycle, qa, blocked, completed, cancelled. Hyphens are accepted in place of underscores.
|
| Option | Description |
|---|---|
-i, --id \
|
Task ID (required). |
--assignee-id \
|
User ID to assign the task to. Mutually exclusive with --assign-to-owner. |
--assign-to-owner
|
Assign the task to its current owner. Mutually exclusive with --assignee-id. |
| Option | Description |
|---|---|
-i, --id \
|
Task ID (required). |
-m, --message \
|
Comment content (required). |
| Option | Description |
|---|---|
-i, --id \
|
Task ID (required). |
-b, --branch-id \
|
Branch ID to link to the task (required). |
| Option | Description |
|---|---|
-i, --id \
|
Embeddable ID (prompt if not provided). |
--staging
|
Publish to the staging environment. Mutually exclusive with --prod. |
--prod
|
Publish to production only (the version must already be on staging server-side). Mutually exclusive with --staging. |
--via-staging
|
With --prod: push to staging first, then to production. Use when the version is not yet on staging. |
--save
|
Build and upload a new saved version before publishing it. |
--publish-version \
|
Promote this specific version number instead of reading the version from config.json. |
-l, --label \
|
Human-readable label for the new version (only applies with --save). |
--skip-build
|
Skip the build step (only applies with --save). |
-p, --project-id \
|
Project ID (skips project selection prompt). |
--force
|
Skip confirmation prompts (version conflicts when using --save, other users' drafts). |
embeddables -v), the **Embeddable** you're on (ID and version), and the **commands or prompts** you used. Check the [latest version on npm](https://www.npmjs.com/package/@embeddables/cli)—if you're not on the latest, run embeddables upgrade and try again; many issues are fixed in newer releases.
cd embeddables/\) and run the command from there—the CLI will automatically use that Embeddable.
embeddables pull --preserve. It keeps the same order of components in the config. Most of the "changes" you see on a first pull are from React reordering components within containers—that doesn't affect how the Embeddable renders. With --preserve, you may still see smaller changes (e.g. parent\_key fixes), but it's easier to verify what actually changed.
savvy\_test=false to the URL to ensure CMS data loads as expected.
?savvy\_test=true to your URL.
es, en\_us, fr). The key should follow Embeddable's key name conventions, see [Naming keys](/guides/naming_keys).
* **Name** – The display name (e.g. Español, English (US), Français). This is only used inside the builder.
Click to add. The new language appears in the list below the default language.
embeddable\_language in [User Data](/features/user-data) (when present) to decide which language to show. You can:
* Set a default or detect locale and call setUserData (or equivalent) with embeddable\_language: 'es' (or another key you configured).
* Pass the language via a [URL param](/features/url-params) if you expose that key in your allowed URL keys.
### Letting users choose the language in the Embeddable
A common approach is to add an **Option Selector** (dropdown) somewhere on the page—for example in one of the corners—so end users can switch language themselves:
1. Add an **Option Selector** component and position it where you want (e.g. top-right or bottom-left).
2. Set the Option Selector's **key** to embeddable\_language. The selected value is then written to User Data and the runtime will show that language.
3. Add one **option** per language you configured: set each option's **key** to the corresponding language key (e.g. en, es, fr). Use the option labels for the display names (e.g. English, Español, Français).
Users can then pick their preferred language from the dropdown and the Embeddable content updates to that language.
If no value is present for embeddable\_language, or the provided value does not match any configured languages, the default language will be loaded.
## Related features
savvy\_test=false to the URL to ensure CMS data loads correctly.