Welcome to Previewops
Hey there 👋 — we're glad you're here.
Previewops gives every pull request its own live preview environment, deployed directly to your cloud account. No more "works on my machine" conversations, no more manually spinning up test environments, and no more waiting for staging to be free. Your reviewers, designers, and stakeholders can click a real URL on a PR and see exactly what's shipping — before it merges.
It takes one comment to deploy, one comment to delete, and everything cleans itself up automatically.
TL;DR — Comment
/deploy-previewopson any pull request and Previewops builds your Docker image and deploys a live preview to your cloud account. The preview URL is posted back on the PR. It's deleted automatically when the PR closes.
Table of contents
How it works
Developer comments "/deploy-previewops" on a PR
│
▼
Previewops builds a Docker image from the PR branch
│
▼
Image is deployed to your cloud account (Cloud Run, Fly.io, Hetzner, etc.)
│
▼
Preview URL is posted as a comment on the PR
│
├─── Developer comments "/qa-previewops" → AI code review, test
│ coverage map, HTTP smoke tests, and regression risk analysis
│ posted back to the PR (coverage on all plans; AI on paid plans)
│
├─── Developer comments "/perf-previewops" → k6 load test runs
│ against the live preview URL; results + SLO evaluation
│ (+ AI insights on paid plans) posted back to the PR
│
▼
Preview is deleted automatically when the PR is merged or closed
Previews also expire after a configurable TTL (default: 24 hours), so idle environments never accumulate costs.
Quick start
- Install the GitHub App on your organisation or repository.
- Add your cloud credentials in the dashboard (required for Free and Premium BYOC plans).
- Comment on a PR:
/deploy-previewops - Previewops replies with the live preview URL within minutes.
That's it. For full onboarding details see getting-started.md.
Plans
| Plan | Price | Monthly deploys | Concurrency | TTL max | BYOC required | Private repos |
|---|---|---|---|---|---|---|
| Free | $0 | 150 | 3 | 24 h | Yes | No |
| Premium BYOC | $49/mo · $423/yr | Unlimited | Unlimited | Unlimited | Yes | Yes |
| Pro | $79/mo · $683/yr | 100 | 10 | 72 h | No | Yes |
| Enterprise | $199/mo · $1,720/yr | 300 | 30 | 7 days | No | Yes |
| Custom | $300–$600/mo | 500–999 | 15 | 14 days | No | Yes |
See plans.md for cap details, upgrade instructions, and what BYOC means.
Documentation
| Guide | What's in it |
|---|---|
| getting-started.md | Prerequisites, first deploy walkthrough, next steps |
| commands.md | All commands and options: /deploy-previewops, /delete-previewops, /validate-previewops, /qa-previewops, /perf-previewops, alwaysOn |
| qa-testing.md | AI code review, test coverage mapping, HTTP smoke tests, and regression risk analysis with /qa-previewops |
| performance-testing.md | Load testing with /perf-previewops: VUs, duration, SLO thresholds, AI insights, baseline comparison |
| configuration.md | .previewops.yaml schema, providerConfig reference, monorepo setup, runtime vars |
| credentials.md | How to add credentials per provider, BYOC explained, security note |
| plans.md | Plan comparison, deploy caps, private repo support, inactivity suspension, upgrading |
| add-ons.md | Optional add-ons: Advanced Perf ($29/mo) and Custom LLM (free) |
| cli.md | GitHub Actions CI mode — deploy without installing the GitHub App |
| self-hosting.md | Run your own Previewops instance: Terraform setup, non-GCP hosting, disabling the SaaS layer |
| providers/ | Per-provider setup guides for all 10 supported cloud platforms |
Supported providers
| Provider | Platform |
|---|---|
cloud-run |
Google Cloud Run (default) |
fly |
Fly.io Machines |
hetzner |
Hetzner Cloud + SSH |
docker-ssh |
Any SSH server + Docker Compose |
render |
Render.com |
railway |
Railway |
digitalocean |
DigitalOcean Droplets + SSH |
aws-lightsail |
AWS Lightsail + SSH |
aws-ecs |
AWS ECS Fargate + ALB |
azure-container-apps |
Azure Container Apps |