cendarum import
cendarum import [--project <name|id>] --env <name|id> [--email <email>] \ [--file <path>|-]cendarum import --env dev --file .envcat .env.production | cendarum import --env productioncendarum import --env dev # reads stdinOn success:
cendarum: imported 12 keys into dev (version 2)The version number is the environment’s payload version. It increments on every write, which is what lets concurrent editors detect that they were working from stale state.
| Flag | Meaning |
|---|---|
--env <name|id> |
Required. Destination environment |
--project <name|id> |
Disambiguates the environment name |
--email <email> |
Account email; falls back to CENDARUM_EMAIL, then a prompt |
--file <path> |
Read from a file. - or omitted means stdin |
Accepted dialect
Section titled “Accepted dialect”# comments are ignoredexport API_URL=https://api.example.test # `export ` prefix toleratedDB_PASSWORD="s3cr3t-smoke-value" # double quotesFEATURE_FLAG='on' # single quotesMULTILINE="first\nsecond" # escapes inside double quotesBlank lines skipped, surrounding whitespace trimmed.
Duplicate keys stop the import
Section titled “Duplicate keys stop the import”$ printf 'DUP=1\nDUP=2\n' | cendarum import --env devcendarum: error: duplicate key DUP (lines 1 and 2)Nothing is written. A file that sets the same key twice has a meaning that depends on your loader’s precedence rules, and quietly choosing one is how the wrong value reaches production. You get both line numbers and you decide.
Upsert semantics
Section titled “Upsert semantics”For a key that already exists in the environment, the value is replaced and
the type and note are preserved. Re-importing a refreshed .env therefore
does not discard the classification and notes you added in the app.
New keys arrive with type secret, which is the safe default: masked until you
say otherwise.
Concurrent edits
Section titled “Concurrent edits”An import is a normal write, so it participates in the same optimistic concurrency as every other change. If the environment moved underneath you, the import stops:
cendarum: error: import conflicts with concurrent changes — resolve in the desktop app:cendarum: conflicting key: API_URLOnly key names appear — never values, on either side. The CLI ships no conflict resolution interface, deliberately: choosing between two versions of a secret is a decision that needs both values visible and a human looking at them, which is what the desktop app’s conflict view is for. See sync and conflicts.
What it will never do is pick one silently. A wrong value in production is an outage, and last-writer-wins is how you get one.
Limits
Section titled “Limits”| Entries per environment | 10,000 |
| Key length | 1,024 bytes |
| Value length | 1 MiB |
| Note length | 4,096 bytes |
Values must be valid UTF-8.