Quickstart. From install to a running branch.
karts up runs your branch in its own Firecracker micro-VM, with its own database and a public URL. You need an early-access account and a web app on Postgres, MySQL or SQLite, in Node, Python, Go, Ruby or PHP. Karts applies numbered .sql migrations itself, or runs your migration tool. Limits: The VM and Compatibility.
Short version: install the CLI, run karts login, then tell your agent to read the onboarding prompt. It does steps 3 and 4 for you.
No account yet? karts up --local runs the branch on your own Mac, with no sign-in and no upload. It needs Docker Desktop. See Local mode.
Early access. By invitation. Request early access first. These steps work once your team is set up. Before your first karts up, read What to expect: where Karts runs, which data to use, and how to delete everything.
1. Install the CLI
curl -fsSL https://drivekarts.si/install.sh | sh
The installer picks the build for your OS and CPU (macOS or Linux, amd64 or arm64), checks its sha256, and puts karts in ~/.local/bin. It does not need sudo. Read the script before you run it.
2. Sign in
karts login
The CLI prints a short code and a link like https://app.karts.kartikey.fyi/device?code=XXXX-XXXX. Open it in a browser where you are signed in to Karts, check the code matches, and approve. This works over SSH and on machines with no browser. Once you are in, the CLI links What to expect.
For CI and agents that can't use the keychain, set KARTS_TOKEN instead.
3. Link the repository
karts init
Run it once, at the top of the repository. It creates a project in your team and writes project: <id> into karts.yml. If there is no karts.yml yet, it writes a starter file for you to check. Commit it, so every clone uses the same project, and merge it into your default branch: the template database is built from the default branch's karts.yml, and until it is there every karts up builds its database from scratch.
This is the karts.yml of Tiny Shop, the sample app we measure with:
runtime: node22 database: postgres migrations: db/migrations # numbered SQL files; Karts checks and applies them itself install: npm ci seed: npm run seed # demo data; runs once when the template database is built start: npm start # listens on $PORT, reads $DATABASE_URL health: /health
Every key is described in the karts.yml reference.
4. Run the branch
karts up
From the branch you want to run. Karts checks the branch's new migrations and claims their numbers, uploads the working tree, clones main's template database, applies the new migrations, starts your app in a micro-VM, and prints the URL once your health check answers.
With --timings it prints each server step. These are the steps of the measured run of Tiny Shop's feature/refunds branch:
$ karts up --timings disks 1 ms restore 16 ms clone_init 112 ms files 8 ms install 0 ms migrations 230 ms ready 881 ms feature-refunds-fc00 https://feature-refunds-fc00.karts.kartikey.fyi (public; seed data only)
A repeat karts up builds a new revision beside the running one and switches when it is ready. No rows carry over: the new revision's database starts from the template again.
5. Work with it
karts status # state, URL, revisions and warnings karts url # just the URL karts logs --follow # app, install, migration and seed output karts exec -- npm test # runs inside the VM, DATABASE_URL set karts exec -i -- psql < q.sql # -i sends your stdin karts list # every environment of this project karts fork # a copy of the running app, memory and data included karts down # destroys the VM and its database
Keys your app needs go in karts secret set, not in karts.yml. To test with real data, make a masked copy first.
6. Give it to your agent
Your coding agent can write karts.yml for you. Tell your agent:
read https://drivekarts.si/onboard.md and set this repo up for Karts.
The onboarding prompt has it explore the repository, write karts.yml, check it with karts check-config, run karts up and fix what fails, then report what Karts runs every time and what it could not support. It works with Claude Code, Codex, Cursor and any agent that can run a shell. karts onboard prints the same prompt, matched to your CLI's version.
Agents can run the same commands in a shell. To offer them as MCP tools instead, add karts mcp to Claude Code, Codex or Cursor: see MCP setup.