Overview
Flags (toggles) live inshipd.config.ts. You review the file in a PR, then shipd push applies it. There is no lockfile — the server is the remote, CAS versions prevent clobbering.
This guide follows Maya adding Fieldkit’s checkout and search flags.
The file
shipd.config.ts
What we run on useshipd.com
What we run on useshipd.com
packages/flags/shipd.config.ts
Types of flags
Variant
default must be a member of variants — TypeScript rejects "search-variant": { default: "v3" }.
Optional on every flag: description, tags, deprecated: true (lifecycle deprecated).
Sync
--yes or --ci (CI=1 / SHIPD_CI=1).
Then typegen writes src/generated/flags.ts (override with .shipd/config.json → typesOut, or shipd types gen -o).
Pull vs push
What is global vs per environment
Definition creates/updates/archives require
flag.production.toggle. Default-only edits on non-production use flag.state.update.
managedBy (code or dashboard) is last-touch attribution, not a lock. --adopt is a deprecated no-op.
Remotes you did not list
shipd push leaves remote-only flags alone. --prune archives them (never hard-deletes).
3). shipd pull then push, or --force (audited).
Next
- Evaluate flags
- How-to: boolean · variant · number and JSON
- Config reference · CLI reference