npm install -g @embeddables/cli
Check your version: embeddables -v
v0.11.0 — 27 February 2026
Features
embeddables assets upload— New command that uploads a local asset folder to the Embeddables asset store. Point it at a directory (--dir <path>, default:assets/) and it validates, then uploads all supported files (images, fonts, documents, etc.) with a concurrent worker pool. Key options:--dry-run(preview what would upload without uploading),--recursive(traverse subdirectories),--include/--exclude(glob filters),--group-id(target a specific asset group), and--workers <n>(concurrency, default 5). Prints a summary of discovered/uploaded/skipped/failed files and exits non-zero on any failure.embeddables assets sync— New companion command that syncs project asset metadata from the cloud into a localassets.jsonfile.assets.jsonbecomes the source of truth for referencing uploaded asset URLs in your Embeddable (e.g. images, downloadable files). Run after uploading to keep your local manifest up to date.default-styles.csscreated byinit—embeddables initnow writes adefault-styles.cssfile to the project root when it doesn’t already exist. This file provides baseline styles for standard HTML tags (buttons, inputs, links, etc.) so that Embeddables using unscoped tag selectors render consistently out of the box.
Bug Fixes
experiments connectfalsely marking experiments as already connected — Fixed a bug where experiments targeting the same Embeddable were incorrectly filtered out and shown as already connected, even though they hadn’t been added to the localconfig.json. The command now checksconnected_experimentsinconfig.jsonas the source of truth for local connections, rather than the server-sideflow_id.- TypeScript/React typing errors in pulled Embeddables —
embeddables pullnow automatically generatesembeddables/tsconfig.json(with correctbaseUrland path mappings to.types/) when it doesn’t already exist. This eliminatesReact refers to a UMD globalandCannot find module '@embeddables/cli/components'errors that appeared in editors after pulling without first runningembeddables init.
Improvements
- Workbench: language switcher in User Data panel — For multi-language Embeddables, the Workbench now shows a language selector dropdown next to the User Data heading. Switching languages updates all field labels and OptionSelector button texts in the Field Editor to show the localised values, and calls
window.Savvy.setContentLanguage()to update the live Embeddable rendering.
Chores
- Workbench build script moved to
src/workbench/build.ts— The internalbuild-workbenchscript is no longer insrc/commands/; it has moved tosrc/workbench/build.tsto better reflect that it is not a public CLI command. Invoked vianpm run build-workbenchas before.
v0.10.0 — 26 February 2026
Features
embeddables diff— New command that compares two versions of an Embeddable and reports what changed. By default it compareslatest(the last saved cloud version) againstlocal(your current working files), showing which pages and components were added, removed, or modified. Use--depth propsto drill into individual prop-level changes. Filter results with--page <key>and--component <key>(comma-separated). Accepts any combination of version numbers,latest,staging,prod, orlocalfor--fromand--to.embeddables feedback [message]— Send feedback directly from the CLI without leaving your terminal. Run with a message (embeddables feedback "Great workflow!") or without arguments for an interactive prompt that asks for your message, sentiment (👍 positive / 👎 negative), and area (CLI, AI prompts, compiler, or other). No login required.branch@versionversion specifiers —embeddables diff--fromand--tooptions now acceptbranch@versionsyntax (e.g.main@latest,feature-branch@47) to fetch a specific version from a specific branch, independently of the current working branch.
Bug Fixes
- Diff: current branch auto-detected —
embeddables diffnow reads the active branch fromconfig.jsonautomatically, so you no longer need to pass--branchexplicitly when working on a non-default branch. - Diff: key-order-independent comparison — Property insertion order in JSON objects no longer causes false positives; objects are compared semantically so only real content differences are reported.
Chores
- CompileErrors reported as Sentry warnings — Internal compile errors are now captured as Sentry warnings (with code frame context and file/line metadata) rather than being silently dropped or escalated as exceptions. Lint errors remain excluded from exception reporting.
v0.9.6 — 24 February 2026
Bug Fixes
- Custom validation functions support
userDataparameter — Input Boxcustom_validation_functionnow accepts an optional second parameteruserData(Record<string, any>), giving your validation logic access to the full current user data. Example:function validate(value, userData) { return userData.country === 'US' ? /^\d{5}$/.test(value) : true; }.
v0.9.3 — 24 February 2026
Improvements
- Richer error output with code frames — Compile errors in
build,dev,inspect, andsavenow display a highlighted code frame showing the surrounding source lines, a caret pointing to the exact column, and the file path and line number. Errors are written tostderrfor consistent terminal integration.
v0.9.0 — 24 February 2026
Features
embeddables inspect --preserve— Theinspectcommand now accepts a--preserveflag to maintain component order during forward compilation. Previouslyinspectalways preserved order; it now defaults tofalse(standard compilation order), and you can opt in with--preservewhen you want to keep existing order for comparison purposes.
Improvements
- Embeddable context info box across all commands —
build,dev,pull, andsavenow display a consistent info box showing the Embeddable title, ID, branch, and version at the start of each command, replacing the previous plainID: …line indevand varying formats in other commands. - CLI help output overhauled —
embeddables --helpnow uses Shopify CLI-style formatting with color, icons, and grouped sections for a cleaner, more readable experience. embeddables initoutput polished — The initialization header, success messages, and next-steps box have been updated: the success box now shows project title and ID; the next-steps sequence is now Pull → Run locally → Save (the Login step was removed since login is required beforeinit); a prominent yellow beta warning box is shown at the end; and the docs link is included in the next-steps box.- Trailing gap after all commands — All commands (
login,logout,build,pull,save,inspect,builder open,experiments connect) now consistently print a trailing blank line for cleaner terminal output. - Sentry exception enrichment — Error reports now include descriptive labels,
CompileErrorfile/line/column metadata, and additional tags (versionNumber,cliVersion, entity name tags alongside IDs) for faster debugging of production issues.
v0.8.3 — 23 February 2026
Bug Fixes
- Automatic Embeddable detection no longer triggers falsely in directories named
embeddables/—inferEmbeddableFromCwd()previously matched any directory whose parent was namedembeddables, causing false positives when users kept projects in a folder calledembeddables/(e.g.~/embeddables/cursor-telehealth/). The function now checks for anembeddables.jsonconfig file before treating a directory as an Embeddable project root.
v0.8.2 — 23 February 2026
Bug Fixes
— Fixed an infinite loop in the HTML→JSX conversion function triggered when component HTML content begins with a declaration tag such as<!DOCTYPE html> or a processing instruction like <?xml version="1.0"?>. These non-element tags are now skipped cleanly. A secondary guard was also added so the parser always advances past any < character it cannot match, preventing the loop from stalling regardless of the malformed input.v0.8.1 — 23 February 2026
Features
- Delightful CLI output overhaul — All commands now use animated spinners (via ora), compact tabular output, and concise formatting. Success moments display green boxed messages; grey info boxes show context (Embeddable ID, branch, version). Verbose file listings are consolidated into summary counts. Warnings and errors now use symbols (⚠ / ✖) instead of text badges.
Bug Fixes
- ESC key now consistently quits all CLI prompts — Previously, pressing ESC during interactive prompts (e.g. the email input in
embeddables login, the OTP code entry, or the lint-fix confirmation inembeddables build) would silently skip the prompt and continue execution. ESC now reliably exits the process across all prompt types, including auto-complete prompts that previously resolved with the highlighted value instead of aborting.
Chores
prepublishOnlybuild script —npm publishnow automatically runs the TypeScript build step before publishing, preventing accidental releases with staledist/output.
v0.7.19 — 23 February 2026
Bug Fixes
embeddables devno longer loops when fixing duplicate option IDs — Fixed an infinite rebuild loop in dev mode triggered when anOptionSelectorhad duplicate button IDs. The fix routine now uses targeted text replacements instead of full Babel code generation, so files are only written when content actually changes. Duplicate ID detection also now covers const-referenced button arrays (e.g.buttons={someButtons}), not just inline arrays.- TypeScript:
propsproperty now included in generated component types — TheProps<T>type emitted into.types/components.d.tsbyembeddables initwas missing apropsfield, causing errors likeProperty 'props' does not exist on type 'Props<FileUpload>'. Aprops?: Record<string, any>property is now included. embeddables initno longer duplicates.gitignoreentries — Runningembeddables initmore than once used to append a new# Embeddablesblock each time. It now replaces the existing block in-place. The generated block also addsnode_modules/and no longer unnecessarily includes**/.types/.
v0.7.18 — 22 February 2026
Features
- Multi-language support — The CLI now correctly handles Embeddables with multi-language content, converting between
data-<language>-<property>in the JSON and thelanguagesproperty in React.
v0.7.17 — 22 February 2026
Improvements
embeddables pulldefaults to latest version — Runningembeddables pullwithout--versionnow pulls the latest version automatically, skipping the version-selection prompt. To choose a version interactively, useembeddables pull --version; to pull a specific version, pass a number:embeddables pull --version 47.
v0.7.16 — 22 February 2026
Bug Fixes
- Reverse compiler: global component cross-location
parent_id— Fixed a round-trip bug where a global component with_locationpointing to one group (e.g.before_components) butparent_idpointing to a component in a different location group (e.g.before_page) was orphaned during reverse compilation. Components are now grouped by following their parent chain rather than their own_location, keeping the component tree intact in a single TSX file.
v0.7.15 — 22 February 2026
Features
embeddables builder open— Opens the Embeddables Builder in your default browser for the selected Embeddable. Resolves the project fromembeddables.json(or prompts to select one if not configured), then navigates directly to the edit URL. Pass-i <id>to skip the interactive prompt, or run from insideembeddables/<id>/to infer the Embeddable automatically.embeddables inspect— New debugging command that fetches an Embeddable by ID from the engine, reverse-compiles it to React/CSS/JS files, rebuilds it back to JSON, and reports which top-level keys differ between the original and rebuilt output. Designed for diagnosing round-trip compiler bugs.
Chores
- CI workflow improvements — Internal documentation update workflow enhanced with version input, updated permission modes, and improved branch/trigger configuration.
v0.7.14 — 22 February 2026
Features
- Codex (AGENTS.md) support —
embeddables initnow generates anAGENTS.mdfile at the project root, following the OpenAI Codex convention. This gives Codex the same Embeddables CLI context that Cursor and Claude already receive.
Bug Fixes
- Condition
idnow required — Theidfield on conditions is now required (previously optional). Use thecond_prefix + 10 digits format (e.g.cond_1234567890), consistent with other ID conventions. Existing conditions without IDs will need one added. - Case-insensitive sorting in CLI lists — Lists of embeddables, projects, and experiments shown in interactive prompts now sort case-insensitively using
localeCompare. Previously, uppercase names (e.g. “CLI”) could sort before lowercase ones (e.g. “count”).
v0.7.13 — 22 February 2026
Bug Fixes
- Compiler: dataOutputs no longer dropped — Fixed a bug where
dataOutputs(including webhook actions) were removed from the compiled output when theactions/directory didn’t exist or contained no JS files. The compiler now preserves webhook actions from the config even when there are no local JS action files. - Compiler: improved JSX string escaping — Strings containing backslashes, newlines, and double quotes are now escaped correctly when generating JSX attributes, preventing double-escaping and malformed output during round-trips.
v0.7.12 — 20 February 2026
Improvements
- Archived Embeddables excluded from lists — Archived Embeddables no longer appear in the interactive selection prompt when running
embeddables pullorembeddables dev, keeping your lists clean and focused.
v0.7.10 — 20 February 2026
Features
- Local Embeddables prioritized in selection — When choosing an Embeddable to work with, locally-pulled Embeddables are now shown at the top of the list.
embeddables initcleans up.claudefiles— If an old.claudefilesdirectory exists from a previous version of the CLI,initwill now remove it and replace it with the correctly named.claude/directory.
v0.7.9 — 20 February 2026
Features
pull --version <number>— You can now pull a specific saved version of an Embeddable:embeddables pull --version 47. Useful for checking out an older version or recovering from a bad save.
v0.7.7 — 19 February 2026
Features
- Login required for all commands — The CLI now enforces authentication before running commands that require it (pull, dev, save, etc.). You’ll see a clear prompt to log in (
embeddables login) rather than a cryptic API error.
v0.7.6 — 19 February 2026
Bug Fixes
- CMS dev mode:
content_sourcesomitted — Fixed a proxy issue wherecontent_sourceswas incorrectly included in dev mode for CMS-based Embeddables, causing unexpected behaviour. It is now correctly omitted during local development.
v0.7.5 — 19 February 2026
Bug Fixes
- Workbench: page selector fixed — The page selector in the Workbench panel was not working; it is now functional again.
v0.7.4 — 19 February 2026
Improvements
- Workbench keyboard shortcut updated — The Workbench toggle shortcut is now
⌥K(Option+K on Mac).
v0.7.3 — 19 February 2026
Bug Fixes
- Reverse compiler:
CustomHTMLusesclassnotclassName— When reverse-compiling an Embeddable to TSX,CustomHTMLcomponents now correctly generateclass(HTML attribute) instead ofclassName(React attribute) in their raw HTML content.
v0.7.0 — 19 February 2026
Features
- Structured error logging via Sentry — The CLI now reports errors to Sentry for improved diagnostics. Logs include context about which command was run, making it easier to debug failures.
.claude/directory — The Claude project context directory is now named.claude/(previously.claudefiles/). Runningembeddables initwill create the correct directory. If you have an old.claudefiles/directory, runembeddables initto migrate.
Bug Fixes
- Build errors handled gracefully — The CLI now exits cleanly with a helpful message on certain build errors instead of crashing with an unhandled exception.
v0.6.11 — 18 February 2026
Improvements
- Branch state persisted from config —
embeddables pullnow reads and restores the active branch fromconfig.json, so the CLI stays on the correct branch across sessions without needing-beach time.
v0.6.9 — 18 February 2026
Features
- Workbench shown/hidden via query parameter — The Workbench debugging panel can now be toggled with
?workbench=true/?workbench=falsein the preview URL, without restarting the dev server. - Custom validation functions in compiled output — Components with a
custom_validation_functionnow compile that logic correctly into the output, based onvalidation_formulapresence. - Edit history tracking in save —
embeddables savenow includes edit history metadata when uploading, improving version tracking in the Builder.
Bug Fixes
classvsclassNamein CustomHTML — Fixed a reverse-compiler bug whereclassattributes insideCustomHTMLwere converted toclassName. Raw HTML attributes in custom HTML blocks are now left as-is.
v0.6.8 — 18 February 2026
Features
pull --preserve— New flag to keep the existing component order inconfig.jsonwhen pulling. Most first-pull “changes” are React reordering components within containers—--preserveprevents that noise so you can focus on real differences. See the CLI reference for details.- Metadata-only actions preserved — Actions that carry only metadata (no JS logic) are now correctly included in the compiled output.
v0.6.5 – v0.6.7 — 17–18 February 2026
Features
embeddables upgradecommand — New command to update the CLI to the latest stable version:embeddables upgrade. No need to remember the fullnpm install -g @embeddables/clicommand.embeddables -vshows package version — The version flag now reads directly frompackage.json, so it always reflects the installed package version.- Custom validation functions compiled to TypeScript — Components with custom validation logic are now reverse-compiled into typed TypeScript functions, improving editor support and type safety.
Bug Fixes
- Template literal escaping in button text — Strings containing
${{ ... }}(Embeddables template syntax) in button text are no longer accidentally treated as JavaScript template literal interpolations during reverse compilation.
v0.6.1 — 16 February 2026
Features
--fixflag for lint auto-correction — Pass--fixtoembeddables build,embeddables dev, orembeddables pullto automatically fix common issues: duplicate IDs, duplicate keys, and keys that start with a digit.
Bug Fixes
- Proxy error handling improved — The dev proxy server now handles connection errors more gracefully, with clearer error messages when the Engine is unreachable.
v0.6.0 — 15 February 2026
Features
- Branch management in pull and save —
embeddables pullandembeddables savenow handle branch metadata automatically, reading and writing the active branch toconfig.json. parent_keydeprecation handled — The reverse compiler now detects and strips deprecatedparent_keyusage, replacing it with the correctparent_id-based approach.

