Documentation
CLI Reference
The reframe CLI covers authentication, local iteration, publishing, and consumer-side migration. Most teams start with reframe login and reframe dev. Studio handles automatic publishing on merge, but the full command set is here when you need it.
npm install -g @reframeui/reframereframe login
Authenticate with your ReframeUI account. Opens a browser OAuth flow and stores the token in ~/.reframe/credentials.
# Interactive (opens browser)
reframe loginIn CI, skip the browser flow by setting REFRAMEUI_API_KEY. The CLI reads it automatically and does not open a browser.
# CI usage (no browser required)
REFRAMEUI_API_KEY=your_key reframe whoamireframe logout
Sign out and revoke stored credentials.
reframe logoutreframe whoami
Prints the currently authenticated account. Useful in CI to confirm the correct token is active before running a publish step.
Flags:
--json Print result as JSON instead of plain text$ reframe whoami
Authenticated as: jane@acme.com (acme / design-system)$ reframe whoami --json
{
"email": "jane@acme.com",
"workspace": "acme",
"project": "design-system"
}reframe dev
Starts a local hot-reload proxy on http://localhost:4242. Token and component changes reflect in Studio preview as you work.
Flags:
--branch <name> Branch to watch [default: main]
--port <port> Local port [default: 4242]
--out <dir> Write token files to a directory and keep them syncedreframe dev --branch feature/dark-mode --port 3001Example output:
$ reframe dev --branch feature/dark-mode --port 3001
Connected to @acme/design-system (feature/dark-mode)
Token files: http://localhost:3001/tokens.css
Components: http://localhost:3001/design-system.js
Watching for changes...reframe publish
Publish a new version of your design system. Reads the bump strategy from reframe.config.json unless overridden. In CI, set REFRAMEUI_API_KEY to authenticate without a browser (same as reframe login). Use --message to attach a release note. Every consumer sees it in their change summary before the update lands.
Usage:
reframe publish [bump]
Arguments:
[bump] Version bump: patch, minor, or major
Flags:
--bump <bump> Version bump strategy (overrides reframe.config.json)
--message <msg> Release note for this version# Interactive (prompts for bump type)
reframe publish# Patch release, no prompt
reframe publish --bump patch# Patch release with release note
reframe publish --bump patch --message "Tightened spacing scale, updated brand tokens"Example GitHub Actions workflow:
name: Publish design system
on:
push:
branches: [main]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- name: Install reframe
run: npm install -g @reframeui/reframe
- name: Publish design system
run: reframe publish --bump patch
env:
REFRAMEUI_API_KEY: ${{ secrets.REFRAMEUI_API_KEY }}reframe pull
Download the generated source files for a branch to disk.
Flags:
--branch <name> Branch to pull [default: main]
--out <dir> Output directory [default: ./design-system]$ reframe pull --branch main
Pulling @acme/design-system (main)...
design-system/
tokens.css
tokens.js
tokens.d.ts
components.js
components.d.ts
Done.reframe status
Show the connection status for the current project and branch.
Flags:
--json Print result as JSON instead of plain text$ reframe status
Project: acme/design-system
Branch: main
Published: 2026-03-28
Connection: Connected$ reframe status --json
{
"project": "acme/design-system",
"branch": "main",
"lastPublished": "2026-03-28",
"connected": true
}reframe branches
List all branches for the current project.
Flags:
--json Print result as JSON instead of plain text$ reframe branches
* main (published 2026-03-28)
feature/dark-mode
fix/spacing-tokens$ reframe branches --json
[
{ "name": "main", "lastPublished": "2026-03-28", "current": true },
{ "name": "feature/dark-mode", "lastPublished": null, "current": false },
{ "name": "fix/spacing-tokens", "lastPublished": null, "current": false }
]reframe init
Scaffold a consumer project. Without --ci, the command prompts interactively. With --ci, it generates a GitHub Actions workflow without any prompts. Use --ci in automated environments to skip all prompts.
Flags:
--ci Generate a GitHub Actions workflow without interactive prompts$ reframe init
? Workspace slug: acme
? Design system slug: design-system
Created reframe.config.json
Created .github/workflows/reframe-sync.ymlreframe open
Open the current project in Studio in your browser.
$ reframe open
Opening acme/design-system in Studio...reframe diff
Show token changes between two published versions. Defaults to comparing the previous and latest published versions.
Flags:
--from <version> Starting version [default: previous published]
--to <version> Ending version [default: latest published]$ reframe diff --from 1.4.0 --to 1.5.0
color.brand.primary #0047FF -> #0052FF
color.surface.raised #1A1A2E -> #16213E
spacing.md 16px -> 18px
3 tokens changedreframe lint
Scan source files for hardcoded design values that have a matching token. Reports file and line number for each violation.
Flags:
--dir <path> Directory to scan [default: ./src]
--ext <list> File extensions [default: ts,tsx,js,jsx,css,scss]
--json Print results as JSON instead of plain text$ reframe lint
src/components/Button.tsx:24 color: #0047FF (use color.brand.primary)
src/styles/globals.css:8 font-size: 16px (use typography.body.size)
2 violations foundreframe tokens export
Export your design system tokens to a file.
Flags:
--format <format> Output format [default: dtcg]
Values: dtcg, css, js, ts, scss, style_dictionary
--output <file> Output file [default: tokens.json]
--mode <mode> Token mode [default: all]
Values: all, light-only, dark-only# Export as DTCG JSON (default)
reframe tokens export# Export as CSS custom properties, light mode only
reframe tokens export --format css --output tokens.css --mode light-onlyreframe upgrade
Migrate your source files to a target version. Finds renamed or removed tokens and updates references in place. Use --auto-apply --yes in CI to apply all renames without prompts.
Flags:
--to <version> Target version (required)
--dir <path> Directory to scan [default: ./src]
--ext <list> File extensions [default: ts,tsx,js,jsx,css,scss]
--auto-apply Apply all renames without prompts
--yes Skip the breaking-change confirmation gate# Interactive migration
reframe upgrade --to 2.0.0# CI migration, no prompts
reframe upgrade --to 2.0.0 --auto-apply --yesExample output:
$ reframe upgrade --to 2.0.0 --auto-apply --yes
Scanning ./src...
Renamed: color.brand -> color.brand.primary (14 files)
Removed: spacing.xl (no replacement) (3 files)
Done. Review changes before committing.reframe completion
Generate a shell completion script for bash or zsh. If --shell is omitted, the shell is auto-detected from $SHELL.
Flags:
--shell <shell> Shell to generate for: bash or zsh [default: auto-detected from $SHELL]# Add completions to zsh
reframe completion --shell zsh >> ~/.zshrcNext steps
Learn how to sync your tokens with Figma.
Figma Plugin →