Forks

A fork is a separate copy of your app as it was at a moment, now or in the past, with its own copies of the data. Use one to reproduce a bug against real data, to try a risky migration, or to give an agent a copy of production it can't hurt.

Make a fork

On the app's Rewind tab, pick a moment and the parts, then press Make a separate copy. Or from the CLI:

velixir fork                       # as it is now
velixir fork --at "1d ago"         # as it was yesterday
velixir fork list
velixir fork discard <fork-id>

It appears under Previews and copies with its own velixir.run address once it's ready. It's a normal app in the same project, with the same plan, settings and env vars.

What's copied

Exactly what a rewind would bring back: the release and config from that moment, a copy of each database to the second, and caches and files from their newest snapshot before it. Leave parts out with the switches (or --no-databases, --exclude <id> and so on). A part you leave out isn't copied, and the fork is never connected to your original's databases or caches.

Sealed by default

A fork has your env vars, live API keys included, so by default it can't reach the internet: it reaches its own data and nothing else. That keeps a background job in it from charging a card or emailing a customer. If you need a fork to call outside services, untick Copy can't reach the internet or use velixir fork --unsealed, knowing it acts with your real keys.

Cost

A fork is billed by the hour like any app and database while it runs. Discard deletes the fork's app and the database and cache copies it made. A fork is an app on your plan, so a Free app needs a paid plan first (the Free plan includes one app).

From the API or an agent

POST /api/v1/apps/{id}/forks with { "at": "...", "sealOutbound": true }, then GET /api/v1/forks/{id} for progress and its URL, and DELETE /api/v1/forks/{id} to discard. In the MCP server: fork, fork_status and fork_discard.