Repository navigation
v0.23.0
carlos v0.23.0 (platform 3ca43d33, 2026-10-05)
- A deploy reaches a running instance in seconds. When a box adopts a new release, an instance that is awake restarts onto it within a few seconds. Before, it kept serving the old build for about two minutes, longer than
carlos deploywaits, so a deploy could report a timeout and a restart seemed to be needed. Instances on one box restart one at a time, two seconds apart. - Static sites show a deploy on the next page load. Browsers now check with the edge before reusing a page or file from a static site, and get a quick "not modified" answer while nothing has changed. Before, a browser could keep showing the old page for hours or days after a deploy.
- Read a copy of an instance's database.
carlos db pull --app <a> --out <file>saves a copy of a sleeping instance's database on your machine, andcarlos db query --app <a> --sql "…"runs one query against a fresh copy. Both say how recent the copy is. The copy is read-only and never touches the live database. Name an instance with--instancewhen the app has more than one. - Region flags.
carlos apps create,carlos deployandcarlos canarytake--region. A console that is not assigning app regions yet says so and starts the app in its home region.carlos deploy --regionon an existing app stops before shipping if the region differs from the app's own. The linecarlos instances createprints now names the place the instance runs. - Invite links ask before you join. Opening an invite link shows who invited you and a Join button. Nothing happens until you press it.
- Sending domains you did not set up. If a domain already has a sending identity that your account did not create,
carlos email domains addasks you to prove you control it: publish a TXT record at_carlos-mail.<domain>with the valuecarlos-mail-account=<account>, then add the domain again. A domain another account holds now reads "sending domain unavailable". A claim that is not verified within 7 days can be taken by another account. - Stores no longer share a bucket by accident. App and environment names are joined with "-", so app
shopwith environmenteuand appshop-euused to map to the same bucket. The second one is now refused with a 409, and nothing is created. - Platform domains. An operator can attach one of the deployment's own domains to an app with
carlos domains attach --platform. Members cannot attach, change or detach those names.
For operators
- Roll the boxes, then the console. With the new switches left off, either order is safe. The two switches below need every box on v0.23.0 first.
- Leave
CONSOLE_SECRETS_ENVELOPE_V2off until every box runs v0.23.0. When it is on, the console seals new secrets so they open only for their own account and app. A box on an older release cannot open them, and the app's whole config stops updating on that box. Rolling a box back below v0.23.0 after turning it on does the same. A value that is not true or false stops the console from starting. - v0.23.0 is the first release that understands app regions. That makes it the rollback floor the README describes: once any app holds a region other than the home, do not roll the console below v0.23.0.
CONSOLE_APP_REGIONSis off by default. Turn it on only by the README's steps. Boxes now publishserves_shared_pool,accepts_inboundand, where they hold the secrets key,secrets_key_fpin their edges file. - Boxes restart awake instances when they adopt a release. The agent checks every two seconds and restarts at most one instance per check. Workers still converge on the old 90-second timer. A restart drains the old process as before: new requests wait for the new one.
- Static responses change their headers. They now carry
Cache-Control: no-cacheand a weakETagworked out from each file's bytes and type, and noLast-Modified. The first request for a file after a deploy reads it once to work out the tag. The edge's own cache still does not store static responses. - Pin infrastructure modules to v0.23.0. The box role gains permission to list, read and delete object versions in its own data bucket. Nothing uses it yet, so applying it can wait. Check also that nothing in your policies denies
s3:DeleteObjecton the deployment bucket: purges, store teardown and mail claim release delete objects, and fail without it. - Run
carlos accounts migratewith a v0.23.0 CLI. Pointers are now signed for their account, and migrating re-signs them, which needs the rootCARLOS_RELEASE_KEY. An older CLI copies them unchanged, and the moved app stops adopting releases. - Existing data is left in place. Purging an app now also deletes its tokens, door keys and ledgers, but apps purged before this release keep theirs. Removing a sending domain that was added before this release leaves its SES identity in SES. Moving an app revokes its door keys, so moved apps need new ones.
Verify a download against SHA256SUMS.txt; SHA256SUMS.txt.sig is the ed25519 signature (base64) over that file, checked by carlos update against its embedded key.