CLI

Install & Setup

Install the AirStrings CLI, initialize a workspace, and manage environments.

The airstrings CLI manages strings, locales, sections, and publishing from the terminal. It is the recommended tool for scripted and AI-assisted workflows.

Install

npm install -g @airstrings/cli

Or run any command without installing:

npx -p @airstrings/cli airstrings <command>

Requires Node.js 18+. Only the package name is scoped — the installed commands are airstrings and airstrings-mcp. The package downloads the prebuilt binary for your platform and verifies it against the SHA256 checksum published with each release.

Both paths ship the CLI and the airstrings-mcp binary used by the MCP server.

Set up a workspace

Initialize

Run init in your project directory:

cd my-project
airstrings init

With no key, init opens the browser to log in (an owner of the organization approves), stores an org key in ~/.config/airstrings/credentials.json (0600), creates a project named after the folder and writes .airstrings/config.json. --name <name> names the project; --project <id> binds an existing one. init never reuses a project by name: a collision exits 2 and names the existing project. Without a terminal it waits up to 90 seconds for the approval; with --no-browser or CI, or on timeout, it exits 9 with the URL. Re-run the same command after approving. When the browser opens on the same machine (not over SSH), the approval returns straight to the CLI on 127.0.0.1, with no code to check; a re-run listens on the same port. If an approval can't reach the CLI, the CLI starts a new login and reopens the page. Pass --url <base-url> if your team uses a non-default base URL.

If you belong to several organizations, pass --org <org_id> (the setup prompt in the dashboard includes it). init then uses the stored login for that organization, or logs in. If the approval comes from another organization it exits 3: approve from that organization's dashboard. A folder linked to another organization is re-linked: init creates a project in <org_id>, moves the old local .airstrings/ to .airstrings.<old_org_id>/ and prints This folder was linked to <old>; re-linked to <new>. The old organization's project is not touched.

Already have a project key (as_proj_…, from the project's API Keys page)? airstrings init <project-key> binds the folder to that project. In an existing workspace it switches to the new key in place and keeps your local strings.

Keys

KeyPrefixCoversGet it
Org keyas_org_Every project of the organizationairstrings login
Project keyas_proj_Every environment of one projectDashboard API Keys page
Legacy environment key64 hex charactersOne environmentCreated before CLI 0.18; still works

The CLI picks the first key it finds: AIRSTRINGS_ORG_API_KEY, AIRSTRINGS_API_KEY, the workspace key, then the stored login. With an org key, airstrings project ls lists the organization's projects and --project <id|name> runs any command against one of them. One login is stored per organization. A workspace always uses its own organization's login; outside a workspace the CLI uses the active organization (the last one you logged in to, or the one set with airstrings org use). Logging in again to the same organization revokes its previous key. airstrings logout revokes and forgets the active organization's key; airstrings logout --org <org_id> forgets that one.

Gitignore the credentials

Never commit .airstrings/config.json. It can hold your API keys. init writes .airstrings/.gitignore with config.json and doctor.json; keep both lines. The CLI writes config.json with 0600 permissions. If a key leaked, run airstrings apikey revoke in the folder, then airstrings login.

Verify

airstrings status
airstrings doctor

status shows the current project, active environment, key type (org/project/environment), where the key came from, its permission (read/write), whether production is protected or open, the keys stored in the workspace (Stored:, masked), and the one next step for that state. doctor runs platform checks against your installation and workspace, including seed-integration checks that confirm your app picks up the bundled fallback seed (see Publishing & Bundles).

How the workspace works

Each project gets its own .airstrings/ directory. The only user-level file is the login's ~/.config/airstrings/credentials.json. The workspace is discovered by walking up the directory tree, like .git, so every command works from any subdirectory of your project.

Environments

CommandWhat it does
airstrings envList every environment: protected/open, key in workspace or no key (✓ marks the active one)
airstrings env use stagingSwitch the active environment
airstrings env add <api-key>Add a legacy environment key (deprecated)
airstrings env rm stagingRemove an environment's credentials
airstrings env create stagingCreate a new environment
airstrings statusShow project, environment, key scope, stored keys, protection and next step
airstrings projectShow project info
airstrings project lsList the organization's projects (org key)
airstrings orgList stored logins (✓ marks the active organization)
airstrings org use <name|id>Set the active organization (outside workspaces)

airstrings -e -u staging is shorthand for env use staging.

Protected production

Production is protected by default: it rejects direct writes and publishing, and changes reach it only by promotion: a human in the dashboard, or airstrings promote --to production with a full-power org key. Publish to staging and promote. If you turn protection off, production is open and the same project or org key publishes to it directly.

SDK configuration

airstrings sdk-config                       # production (default environment)
airstrings sdk-config --env staging
airstrings sdk-config --env production --json

Prints the organization, project and environment IDs, the environment's Ed25519 public key(s), and a ready-to-paste initializer for the Web, React Native, iOS, Android and Go SDKs (Go from CLI 0.17.0). Public keys are not secret, so any key of the project works, including a legacy staging key. The MCP tool airstrings_sdk_config returns the same data.

On this page