[{"data":1,"prerenderedAt":18},["ShallowReactive",2],{"release:0.2.6":3},{"version":4,"title":5,"description":6,"date":7,"url":8,"markdownPath":9,"prerelease":10,"html":11,"newer":12,"older":15},"0.2.6","L4 0.2.6","Server installation and identity are rebuilt around one UUID. A Server now installs and updates with only a Cloudflare account, serves several addresses, keeps its settings in D1, and PR verification uses native Worker…","2026-10-22","\u002Fchangelog\u002Fv0.2.6","\u002Fchangelog\u002Fv0.2.6.md",false,"\u003Cp>Server installation and identity are rebuilt around one UUID. A Server now installs and updates with only a Cloudflare account, serves several addresses, keeps its settings in D1, and PR verification uses native Worker Previews.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Install a Cloudflare Server with only a Cloudflare account: no Git, GitHub, repository integration, Workers Builds permission or deployment token. The official \u003Ccode>\u002Fcreate\u003C\u002Fcode> installer uploads a published, checksum-verified release through the customer&#39;s browser-bound OAuth grant, and the Server keeps no account-wide credential after installation or update.\u003C\u002Fli>\n\u003Cli>Update through the official installer: Settings → Deployment → Updates saves one local request with a one-job backup capability and returns a launch URL that carries no credential. Before any upload the installer verifies the persisted backup archive (SHA-256, tar headers, entry sizes, inventory and R2 metadata\u002Fpayload pairing) and compares live D1 table\u002Frow counts and files-bucket object\u002Fbyte counts; a changed Server stops for a retry instead of deploying against a stale backup, and retries resume, including from another browser after a stale lease.\u003C\u002Fli>\n\u003Cli>Serve a Server on several addresses: the configured address list is authoritative for Cloudflare Servers, with \u003Ccode>PUBLIC_ORIGIN\u003C\u002Fcode> as the backward-compatible primary. Discovery, login, sessions, MCP, uploads, backups and realtime answer on the primary and every alias, and unknown hosts are rejected. Settings → Server address adds, removes and promotes Cloudflare custom domains; the \u003Ccode>\u002Fdomain\u003C\u002Fcode> one-time OAuth flow attaches them while the account-wide grant stays in the site&#39;s encrypted session.\u003C\u002Fli>\n\u003Cli>The Shell accepts alias probes and deduplicates Servers by UUID, and the update flow verifies the updated Server through any working address. VPS installs gain \u003Ccode>llll domain list|add|remove|primary\u003C\u002Fcode>, including Caddy addresses, \u003Ccode>.env\u003C\u002Fcode> updates, rollback and health checks on every address.\u003C\u002Fli>\n\u003Cli>One UUID names every Server resource — Worker (\u003Ccode>llll-&lt;uuid&gt;\u003C\u002Fcode>), D1, files, backups and tickets KV — and seeds \u003Ccode>server_identity\u003C\u002Fcode> before first boot; VPS installs save the same UUID as \u003Ccode>SERVER_ID\u003C\u002Fcode>, and discovery and backup prefixes use it.\u003C\u002Fli>\n\u003Cli>Fresh Workers bind a minimal unprefixed env: \u003Ccode>PUBLIC_ORIGIN\u003C\u002Fcode>, \u003Ccode>AUTH_SECRET\u003C\u002Fcode>, \u003Ccode>AUTH_MODE\u003C\u002Fcode> (plus Access bindings when used), \u003Ccode>ACCOUNT_ID\u003C\u002Fcode> and resource bindings.\u003C\u002Fli>\n\u003Cli>Server settings move to D1: the pending owner claim stores only a SHA-256 token digest and its row is deleted on claim; worker name, backup bucket, mail domains\u002Fhostname\u002Flocal part and registration mode live in the database, and the setup form asks for the Server name. Existing Servers migrate in place: the first update upload copies legacy env into D1 and a second metadata upload removes the legacy bindings, preserving the UUID, accounts and files. The optional Build deploy-hook path is gone; queued updates continue on the official installer.\u003C\u002Fli>\n\u003Cli>PR verification deploys a native Worker Preview of the one staging Server Worker instead of per-PR \u003Ccode>llll-server-pr-*\u003C\u002Fcode> Workers: Durable Object state is isolated per Preview and deleted with it, D1\u002FR2\u002FKV bind long-lived shared staging resources, migrations apply in the Build, and Previews inherit no vars or secrets from production. A read-only inventory script prints a concrete cleanup proposal for leftover per-PR resources.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Validation includes 725 unit tests, lint, type checks, builds, independent Server integration, self-host and local-stack checks, shellcheck, model checks and migration checks for 0000–0010. Each feature PR was verified on its deployed Cloudflare Preview, and the VPS installer and update flows ran in isolated Linux containers with the Server UUID preserved across upgrade and rollback.\u003C\u002Fp>\n\u003Cp>This release appends the schema migrations \u003Ccode>0009_server_origins\u003C\u002Fcode> and \u003Ccode>0010_server_settings\u003C\u002Fcode> within the \u003Ccode>server-v1\u003C\u002Fcode> lineage; fresh installs and in-place updates both apply them. The official site, Shell, standalone Server, portable amd64 runtime, VPS installer and version-pinned Docs share version 0.2.6. Customer Servers stay pinned until their operators select the update and complete the verified backup\u002Fupdate flow. Native iOS\u002FmacOS packaging remains frozen.\u003C\u002Fp>\n",{"title":13,"url":14},"L4 0.2.7","\u002Fchangelog\u002Fv0.2.7",{"title":16,"url":17},"L4 0.2.5","\u002Fchangelog\u002Fv0.2.5",1793335827291]