Spawner and the alternatives for preview environments
Spawner does one job: a preview of every branch, on one server of yours, for a team and its coding agents. Here is where it sits next to the other ways to get preview environments, also called review apps or ephemeral environments.
Where Spawner fits
Choose Spawner when
- You want a preview of every branch, and of work nobody has pushed yet, for your team and its coding agents.
- Your app already runs with Docker Compose: its database, API and workers come up together, as they are.
- You would rather look after one Linux server than a Kubernetes cluster or a service billed per seat.
- Previews must stay private: behind your team’s login, with share links for guests.
- You want a fixed cost: many environments on one server, asleep when nobody uses them.
Choose something else for
- Production and previews in one tool: Coolify or Dokploy
- A machine of its own for each preview, kernel included: Preevy or PullPreview
- A front end that already runs on Vercel or Netlify: their previews
- An app already hosted on Render, Railway or Heroku: their pull request environments
- A Kubernetes cluster you already run: Okteto, Signadot, Bunnyshell, Shipyard or Qovery
- Several servers, single sign-on or private registries: not Spawner, see what it does not do
Side by side
One line per family of tools. Each tool’s own answers, and where they come from, are in the details below.
| Tools | Runs on | Runs your Compose file | A preview per pull request | A preview of unpushed work | Cost |
|---|---|---|---|---|---|
| Spawner | One Linux server of yours | Yes, after a policy check | From CI | Yes | Free, plus the server |
| Self-hosted platforms Coolify, Dokploy | Your servers | Yes (Dokploy: not in previews) | Built in | No | Free, plus the servers |
| A machine per preview Preevy, PullPreview | A cloud machine per preview | Yes | From CI | Yes, from their CLI | The machines (PullPreview: a paid license for companies) |
| Front-end hosting Vercel, Netlify | Their platform | No | Built in | Yes, from their CLI | Free tier, then paid |
| Application hosting Render, Railway, Heroku | Their platform | No | Built in | Railway only | Paid, by usage |
| Kubernetes platforms Okteto, Signadot, Bunnyshell, Shipyard, Qovery | A Kubernetes cluster | Okteto, Shipyard; Bunnyshell imports it | Built in or from CI | Okteto, Signadot | Paid; some free tiers |
What Spawner does not do
- Production, scaling or several servers. One installation runs on one Linux server, dedicated to previews, with Docker Compose.
- Environments for pull requests on its own. Nothing watches the git host yet: a CI job calls
spawner upandspawner down(previews for pull requests). - Private image registries. Images come from public registries or are built from the sources. Repositories live on any git host, over SSH with a deploy key, or over HTTPS when they are public.
- Single sign-on beyond GitHub login, or permissions per project. No OIDC or SAML; every member sees every project.
- More isolation than containers give. Environments share the server’s kernel, and their outbound traffic is filtered only for the cloud’s metadata and the server’s own services (security).
The documentation keeps this list up to date, in concepts.
Tool by tool
Each family next to Spawner on eleven questions, from each tool’s documentation. “Not documented” means its documentation does not say. Uffizzi, which made previews from Compose files, has had no commit since August 2024.
Self-hosted platforms: Coolify and Dokploy
Open source platforms that run your applications on servers of your own, production included, with previews of pull requests among their features. A preview runs the code of the pull request on your server: Coolify’s documentation warns that “a pull request can run code on the deployment server”, and Dokploy’s says “we recommend not using preview deployments for public repositories”.
| Criterion | Spawner | Coolify | Dokploy |
|---|---|---|---|
| Where it runs | One Linux server of yours, dedicated to previews | Your servers, over SSH; Coolify Cloud can host the dashboard | Your servers; Dokploy Cloud can host the dashboard |
| Needs Kubernetes | No | No | No: Docker, and Docker Swarm across servers |
| Starts from a Docker Compose file | Yes: .spawner/ holds a manifest and a Compose file | Yes: Docker Compose is one of its build packs | Yes for its Compose services, but previews are for its Applications only |
| A preview per pull request, built in | From CI: a job runs spawner up, then spawner down | Yes: through its GitHub App or a repository webhook | Yes: GitHub pull requests, for Applications |
| A preview from a local worktree, uncommitted changes included | Yes: spawner up sends the files git sees, uncommitted ones included | No: from a pull request, or an image tag built by CI | No preview; an Application can be deployed from an uploaded .zip |
| Previews protected by default | Yes: team login, a token for agents, share links for guests | No: basic authentication is an option, set with labels for Compose | No: basic authentication can be set per application |
| Security policy on the compose file | Yes: an allowlist, checked before Docker runs the file | No: its docs ask you to review the compose file before deploying | Not documented |
| Sleep and wake | Yes: after 2 hours without activity; the team’s next visit wakes it | Not documented | Not documented |
| CLI and MCP server for coding agents | Yes: a CLI with JSON output and stable exit codes, an MCP server with 9 tools | Yes: a CLI and an MCP server | Yes: a CLI and an MCP server |
| License | Apache-2.0 | Apache-2.0 | Apache-2.0, except a proprietary directory |
| Price model | Free; you pay for the server | Free; Coolify Cloud from $5 a month | Free; Dokploy Cloud from $4.50 a month per server |
A machine per preview: Preevy and PullPreview
Tools that start a machine in your cloud account for each pull request, and run its Docker Compose file there. Each preview gets a machine of its own, kernel included, and costs one. Preevy’s URLs go through Livecycle’s hosted tunnel unless you run your own, and its last release dates from June 2025. PullPreview’s license allows noncommercial use and a 30-day commercial trial.
| Criterion | Spawner | Preevy | PullPreview |
|---|---|---|---|
| Where it runs | One Linux server of yours, dedicated to previews | A machine it creates in your AWS, Google Cloud or Azure account, or a pod in your Kubernetes cluster | A machine per preview in your AWS Lightsail or Hetzner account |
| Needs Kubernetes | No | No: Kubernetes is one option | No |
| Starts from a Docker Compose file | Yes: .spawner/ holds a manifest and a Compose file | Yes | Yes, or a Helm chart |
| A preview per pull request, built in | From CI: a job runs spawner up, then spawner down | From CI: a job runs preevy up | Yes: a GitHub Action, started by a label on the pull request |
| A preview from a local worktree, uncommitted changes included | Yes: spawner up sends the files git sees, uncommitted ones included | Yes: preevy up from your machine syncs the local files | Its CLI deploys a local path, for debugging |
| Previews protected by default | Yes: team login, a token for agents, share links for guests | No: a service can be made private, behind a secret or a Livecycle login | No: open to every address unless the cidrs input narrows it |
| Security policy on the compose file | Yes: an allowlist, checked before Docker runs the file | No: each preview has a machine of its own | No: each preview has a machine of its own |
| Sleep and wake | Yes: after 2 hours without activity; the team’s next visit wakes it | Not documented | Not documented; the ttl input deletes old previews |
| CLI and MCP server for coding agents | Yes: a CLI with JSON output and stable exit codes, an MCP server with 9 tools | A CLI; no MCP server documented | A CLI; no MCP server documented |
| License | Apache-2.0 | Apache-2.0 | Prosperity Public License: noncommercial use, and a 30-day commercial trial |
| Price model | Free; you pay for the server | Free; you pay for the machines | €300 a year per organization for commercial use, plus the machines |
Hosted front-end platforms: Vercel and Netlify
Hosting built for web front ends and functions, with a preview for each push or pull request. Nothing to operate. Neither runs a Docker Compose file: Vercel’s guide says of it “Vercel does not read any of it”.
| Criterion | Spawner | Vercel | Netlify |
|---|---|---|---|
| Where it runs | One Linux server of yours, dedicated to previews | Vercel’s platform | Netlify’s platform |
| Needs Kubernetes | No | No | No |
| Starts from a Docker Compose file | Yes: .spawner/ holds a manifest and a Compose file | No: translated by hand, app containers into services in vercel.json and databases from its Marketplace; containers (beta) run from a Dockerfile | No |
| A preview per pull request, built in | From CI: a job runs spawner up, then spawner down | Yes: a preview for each push and pull request | Yes: a Deploy Preview for each pull request |
| A preview from a local worktree, uncommitted changes included | Yes: spawner up sends the files git sees, uncommitted ones included | Yes: vercel deploy uploads the local directory | Yes: netlify deploy uploads a local folder as a draft |
| Previews protected by default | Yes: team login, a token for agents, share links for guests | Yes: Vercel Authentication, on by default for new projects | No: a password or private visibility, depending on the plan |
| Security policy on the compose file | Yes: an allowlist, checked before Docker runs the file | Not applicable | Not applicable |
| Sleep and wake | Yes: after 2 hours without activity; the team’s next visit wakes it | Functions and containers scale down when idle | Not applicable: static files and functions |
| CLI and MCP server for coding agents | Yes: a CLI with JSON output and stable exit codes, an MCP server with 9 tools | Yes: a CLI and an MCP server | Yes: a CLI and an MCP server |
| License | Apache-2.0 | Proprietary | Proprietary |
| Price model | Free; you pay for the server | Free Hobby plan for personal use; Pro per developer seat, plus usage | Free plan; paid plans with monthly credits |
Hosted application platforms: Render, Railway and Heroku
Hosting for whole applications, databases included, with an environment for each pull request. Railway “does not run docker-compose.yml files directly”, Render describes services in a Blueprint, and in February 2026 Heroku moved to “a sustaining engineering model focused on stability, security, reliability, and support”.
| Criterion | Spawner | Render | Railway | Heroku |
|---|---|---|---|---|
| Where it runs | One Linux server of yours, dedicated to previews | Render’s platform | Railway’s platform | Heroku’s platform |
| Needs Kubernetes | No | No | No | No |
| Starts from a Docker Compose file | Yes: .spawner/ holds a manifest and a Compose file | No: services are described in a render.yaml Blueprint | No: each Compose service is set up by hand as a Railway service | No: review apps are described in app.json |
| A preview per pull request, built in | From CI: a job runs spawner up, then spawner down | Yes: preview environments, on a Pro workspace or higher | Yes: PR environments, deleted when the pull request closes | Yes: review apps, with Pipelines and the GitHub integration |
| A preview from a local worktree, uncommitted changes included | Yes: spawner up sends the files git sees, uncommitted ones included | No: from git | Yes: railway up uploads the current directory | No: from GitHub |
| Previews protected by default | Yes: team login, a token for agents, share links for guests | Not documented | Not documented | Not documented |
| Security policy on the compose file | Yes: an allowlist, checked before Docker runs the file | Not applicable | Not applicable | Not applicable |
| Sleep and wake | Yes: after 2 hours without activity; the team’s next visit wakes it | Free instances only, after 15 minutes without traffic | Optional: a service sleeps 5 to 10 minutes after its last outbound traffic, and wakes on the next request | Eco dynos, after 30 minutes without traffic |
| CLI and MCP server for coding agents | Yes: a CLI with JSON output and stable exit codes, an MCP server with 9 tools | Yes: a CLI and an MCP server | Yes: a CLI and an MCP server | Yes: a CLI and an MCP server |
| License | Apache-2.0 | Proprietary | Proprietary | Proprietary |
| Price model | Free; you pay for the server | A workspace plan, plus instances prorated by the second | A plan with included usage, then usage by the second | Dynos and add-ons, prorated to the second |
Kubernetes development platforms: Okteto and Signadot
Development and preview environments inside a Kubernetes cluster. They reuse your cluster, your manifests and what your team knows. Signadot deploys only the services a change touches and routes requests through them.
| Criterion | Spawner | Okteto | Signadot |
|---|---|---|---|
| Where it runs | One Linux server of yours, dedicated to previews | Your Kubernetes cluster, or Okteto’s managed service | An operator in your Kubernetes cluster, with Signadot’s hosted control plane |
| Needs Kubernetes | No | Yes | Yes |
| Starts from a Docker Compose file | Yes: .spawner/ holds a manifest and a Compose file | Yes: translated to Kubernetes | No: it forks Kubernetes workloads |
| A preview per pull request, built in | From CI: a job runs spawner up, then spawner down | From CI: GitHub Actions or GitLab CI | From CI: a job creates a sandbox per pull request |
| A preview from a local worktree, uncommitted changes included | Yes: spawner up sends the files git sees, uncommitted ones included | Yes: okteto up syncs local files into a development container | Yes: services running on your machine join a sandbox |
| Previews protected by default | Yes: team login, a token for agents, share links for guests | No: endpoints are public unless marked private | Yes: preview URLs need an API key or a Signadot login |
| Security policy on the compose file | Yes: an allowlist, checked before Docker runs the file | Keys such as privileged are not supported, with a warning | Not applicable |
| Sleep and wake | Yes: after 2 hours without activity; the team’s next visit wakes it | Yes: idle previews sleep, after 1 hour by default | Not documented |
| CLI and MCP server for coding agents | Yes: a CLI with JSON output and stable exit codes, an MCP server with 9 tools | A CLI and agent skills; no MCP server documented | Yes: a CLI and an MCP server |
| License | Apache-2.0 | CLI Apache-2.0; the platform is proprietary | CLI Apache-2.0; the platform is proprietary |
| Price model | Free; you pay for the server | Free plan for small teams; others on request | Free Starter plan; usage-based plans above it |
Environments as a service on Kubernetes: Bunnyshell, Shipyard and Qovery
Services that create an environment for each pull request on Kubernetes clusters, yours or theirs. Without a new product, Argo CD’s pull request generator or Helm in CI does it with what you already run.
| Criterion | Spawner | Bunnyshell | Shipyard | Qovery |
|---|---|---|---|---|
| Where it runs | One Linux server of yours, dedicated to previews | Bunnyshell’s service, on a Kubernetes cluster you connect or one it manages | Shipyard’s cloud: a Kubernetes cluster per account | Qovery’s control plane, deploying to Kubernetes clusters in your cloud |
| Needs Kubernetes | No | Yes | Not yours: Shipyard runs the cluster | Yes: clusters Qovery manages |
| Starts from a Docker Compose file | Yes: .spawner/ holds a manifest and a Compose file | Imported once into a bunnyshell.yaml | Yes | No: a Dockerfile, an image or a Helm chart per service |
| A preview per pull request, built in | From CI: a job runs spawner up, then spawner down | Yes: an ephemeral environment per pull request | Yes | Yes: preview environments for pull requests |
| A preview from a local worktree, uncommitted changes included | Yes: spawner up sends the files git sees, uncommitted ones included | Not documented | Not documented | Not documented |
| Previews protected by default | Yes: team login, a token for agents, share links for guests | Not documented | Yes: single sign-on through your git host, or bypass tokens | Not documented |
| Security policy on the compose file | Yes: an allowlist, checked before Docker runs the file | Bind mounts are flagged for review at import | Not documented | Not applicable |
| Sleep and wake | Yes: after 2 hours without activity; the team’s next visit wakes it | Yes: sleep and wake schedules, per environment or for the organization | Yes: environments spin down after a time without visits | Scheduled stop and start, previews included |
| CLI and MCP server for coding agents | Yes: a CLI with JSON output and stable exit codes, an MCP server with 9 tools | A CLI; no official MCP server documented | Yes: a CLI and an MCP server | Yes: a CLI and an MCP server |
| License | Apache-2.0 | CLI MIT; the service is proprietary | CLI Apache-2.0; the service is proprietary | CLI Apache-2.0; the platform is proprietary |
| Price model | Free; you pay for the server | By the minute of a running environment, plus your cluster | From $500 a month for 3 concurrent environments | From $299 a month, billed yearly |
Sources
- Spawner 2.1.0: what the CLI sends , the MCP server , protected previews , sleep and lifetime , the compose policy , previews for pull requests , license
- Coolify: preview deployments , Docker Compose , security model , basic authentication , MCP server , CLI , pricing
- Dokploy: preview deployments , previews for Compose services, an open request , CVE-2025-53825 , sources, .zip upload , basic authentication , Dokploy Cloud , MCP server , CLI , license , pricing
- Preevy: README: drivers, private services, tunnel , releases , documentation
- PullPreview: README , inputs: cidrs, ttl , CLI , license , pricing
- Uffizzi: repository and its last commit , documentation
- Vercel: deployment protection , protection on by default for new projects , Docker Compose , container images , vercel deploy , MCP server , pricing
- Netlify: Deploy Previews , password protection , netlify deploy , MCP server , pricing
- Render: preview environments , Docker Compose, a feature request , free instances , MCP server , CLI , pricing
- Railway: PR environments , Docker Compose , serverless , railway up , MCP server , pricing
- Heroku: review apps , Eco dynos , usage and billing , CLI , MCP server , an update on Heroku, February 2026
- Okteto: previews , Docker Compose , private endpoints , sleep and cleanup , coding agents , CLI , pricing
- Signadot: overview , pull requests from GitHub Actions , preview URLs , MCP server , CLI , pricing
- Bunnyshell: ephemeral environments , Docker Compose import , clusters , sleep schedules , CLI , pricing
- Shipyard: documentation , authentication , sleep settings , MCP server , CLI , security, clusters , pricing
- Qovery: introduction , preview environments , deployment sources , scheduled stop and start , MCP server , CLI , pricing
- Argo CD: pull request generator
Checked on , against Spawner 2.2.0 and each tool’s documentation. A line out of date? Open an issue.