BURROW(1)

v2.4.0 · open source · MIT

Every git branch gets its own preview URL.

Burrow is a command-line tool. Run burrow up on any branch and it builds the app, snapshots it, and prints a live URL you can send to anyone. Merge the branch and the preview cleans itself up.

~/code/storefront — zshdemo · runs in your browser
install the CLI
curl -fsSL https://burrow.layerwise.site/install.sh | sh

Burrow is a sample product: the script prints a note and exits without changing anything.

1 how it works

From a push to a URL, and back to nothing.

Five stages, all of them automatic after the first burrow up. Nothing waits in a CI queue.

  1. git push · 0sYou push a branch. Burrow sees the new commit; there is no pipeline to write.
  2. build · ~25sIt detects the framework and builds with layers cached from the last push.
  3. snapshot · ~3sThe image and seed data are frozen, so every preview starts from the same state.
  4. preview URL · ~1sThe branch gets https://<branch>.<team>.burrow.run, with TLS, ready to share.
  5. cleanup on merge · laterWhen the branch merges or is deleted, the preview and its data go with it.
2 configuration

One file, and most of it is optional.

A project with a lockfile needs no config at all. When it does, burrow.toml sits next to your code. Hover or focus a line for a note.

burrow.tomltoml
# burrow.toml lives next to package.json
version = 2

Config format version. Burrow 2.x reads 1 and 2, and says so if it cannot.

[app]
name = "storefront"
framework = "auto" # found: next.js

Detects Next.js, Remix, Rails, Django, Laravel, Go, and anything with a Dockerfile.

port = 3000

The port your app listens on. Burrow puts TLS in front of it.

[build]
command = "pnpm build"
cache = ["node_modules", ".next/cache"]

Kept between builds of the same branch. This is most of the speed.

[services.db]

Sidecar containers. Each branch gets its own database, never a shared one.

image = "postgres:17"
seed = "db/seed.sql"

Runs once, when the snapshot is taken, so every preview starts with the same data.

[env]
DATABASE_URL = "${services.db.url}"

Values can point at services, so nothing hard-codes a host.

STRIPE_KEY = { secret = "stripe-test" }

Secrets come from burrow secrets set, never from this file.

[preview]
sleep_after = "30m"

Idle previews sleep and wake on the next request in about two seconds.

delete_on_merge = true

On by default. Set it to false if you like collecting things.

3 speed9–21× faster

Push to a working preview in under a minute.

Time from git push until the preview answers its health check, against the same app deployed by a typical CI preview pipeline.

seconds from push to a working preview · lower is better
next.js storefrontcold cache, first push of the branch8.8× faster
burrow52.4s
typical CI7m 41s
next.js storefrontwarm cache, second push20.8× faster
burrow11.8s
typical CI4m 05s
rails + postgreswarm cache, seeded database19.0× faster
burrow19.6s
typical CI6m 12s

Sample data for this template. Median of 15 runs per scenario on a 4 vCPU runner, October 2026. "Typical CI" builds an image in GitHub Actions, pushes it to a registry, and deploys it to a preview namespace. burrow up --timings prints your own numbers.

4 works with

Fits the tools you already run.

No new dashboard to live in. Burrow shows up where you already look.

tool
what burrow does
GitHub
Builds a preview for every pull request, posts the URL as a check, and deletes it when the PR merges or closes.
GitLab
The same for merge requests: one environment per MR, its URL in the MR widget, gone on merge.
Docker
Uses your Dockerfile when there is one. Otherwise builds an image from the detected framework.
Compose
Starts the services in compose.yaml beside the app, one isolated stack per branch.
any shell
It is all commands: put burrow up in a Makefile, a git hook, or a CI step you already have.
5 voices

From people who stopped waiting on CI.

Fictional engineers, real feelings.

~/voices4 files
  • We used to ask in Slack which staging was free. Now the answer is the branch name.

    Mira Okafor
    Platform, Halyard Freight
  • burrow down is the most satisfying command I run all week. The preview, the database, the bill: gone.

    Joris van Dijk
    Frontend, Kettle & Co.
  • Design review happens on the real thing now, not on screenshots pasted into a doc.

    Priya Raman
    Design systems, Quayside Bank
  • Our CI previews took eight minutes. I ran burrow up twice because I did not believe the first one.

    Tomás Ferreira
    Developer experience, Lumen Grid
6 pricing

The CLI is free. The cloud is cheap.

Run Burrow on your own machines for nothing, forever. Burrow Cloud runs the previews for you and is in early access.

burrow CLI
Burrow Cloud Team
Enterprise

free open source, MIT

$12 per seat per month

talk to us for 51+ seats

  • unlimited previews on your machines
  • every command on this page
  • GitHub, GitLab, Docker, Compose
  • community support
  • everything in the CLI
  • hosted previews, nothing to run
  • PR checks and share links
  • 30 days of logs
  • previews sleep when idle
  • everything in Team
  • SSO and SCIM
  • runs in your cloud account
  • audit log export
  • 99.9% uptime SLA

Early access is free. Team pricing starts when Burrow Cloud opens, and nobody is billed without saying yes first.

early access

Burrow Cloud is in early access.

Hosted previews, PR checks, and share links, without running anything yourself. Sign up once; burrow cloud status shows everything that happens after.

burrow cloud --early-access
team size

We store what you type here and nothing else. privacy

what happens next

burrow cloud status

Burrow Cloud · free while in beta

you
not on the list yet
queue
a few teams a week, first in, first out
email
one, with an invite link, when there is a seat
then
run burrow login; your previews move to the cloud
newsletter
none. no drip emails, no check-ins
billing
nothing until you pick a plan

✓ the CLI is free and works today

keysesc closes
1–6jump to a section
/focus the terminal
?show this list
escclose this list
tabcomplete a command (in the terminal)
↑ ↓command history (in the terminal)
ctrl+cstop a running command
ctrl+lclear the terminal

Shortcuts are off while you type in a field or the terminal.