Django · Rails · Laravel · FastAPI · Go · Spring Boot

Push a branch. Get a live URL.

A real container, a real HTTPS address, a real PR comment — for Django, Rails, Laravel, Go, .NET, Rust and anything else that builds. We detect the framework, or use your Dockerfile. No Kubernetes, no YAML, no per-seat bill.

No signup, no credit card, self-destructs in 10 minutes. No repo handy? Try , , .

Already convinced? Sign in with GitHub — free, no credit card.

Branch previews·Auto PR commentsCommit statusAuto-expiryYour own domainREST APIMCP for AI agents
git pushfeature/checkoutcloneshallow, single branchdetectframework or Dockerfilebuildlog streams livebootcontainer startsrouteHTTPS cert issuedprv-a8c2f9.previews.yourcompany.comlive · on your own domain · expires on its own

Stages in order, not to scale — no per-stage timing is claimed here. What is fixed: a real container per branch, its own HTTPS certificate, and an expiry you don't have to remember.

Works with your actual stack

If it runs in a container, PreviewDrop previews it. Detected automatically, or driven by the Dockerfile you already have.

Django
Rails
Laravel
FastAPI
Spring Boot
Node.js
Express
.NET
Go
Rust
Next.js
Nuxt
SvelteKit
Astro

Any language. Any framework. If it builds, PreviewDrop previews it.

Already using something else?

When PreviewDrop wins — and when it doesn't

Honest comparisons against the tools you're already paying for. If you ship Next.js to Vercel and never touch a Dockerfile, you probably don't need this. If your backend is Django, Rails, Laravel or anything FROM-python-based, read on.

Built by backend devs who got tired of docker-compose up on every PR review. Made by Global Software Development EU in Bucharest, Romania. Runs on Hetzner in Germany.

What you actually get

Specs & pricing, no spelunking required

Flat per-workspace pricing. No per-seat fees, no surprise overages, no “contact sales” wall. Same container, same build pipeline on every plan — what changes is concurrency, TTL, memory, and seats.

PlanFreeStartermost pickedProTeam
Per month$0$19$79$149
Concurrent previews252040
Container memory256 MB512 MB1 GB2 GB
Preview lifetime4 h24 h3 days7 days
Projects310UnlimitedUnlimited
Team seats131025
REST API + CLI
Password-protected URLs
Custom preview domains
Every plan, including FreeUnlimited deploys·MCP server for AI agents·GitHub & GitLab · PR comments & commit status·Auto-TLS·Live build logs

Isolation

One container

Per branch, not per repo

Runtime

Container

Auto-detect or Dockerfile

Network

HTTPS + auto-TLS

Issued per preview

Region

EU

Hetzner, Germany

Why we built this

Vercel solved this in 2018. The rest of us got “use staging”.

Next.js devs have had “every PR gets a live URL” for years. Django, Rails, Laravel, FastAPI — you got “ssh into staging”, “ngrok the dev box”, or a 600-line GitHub Actions file that breaks the first time someone pushes a binary asset.

We built PreviewDrop because we wanted what Vercel ships, on the stack we actually work on. A real container, a real HTTPS URL, a real PR comment, in under a minute. No Kubernetes. No per-seat pricing. No terraform apply just to review a feature.

We're opinionated about the stack: flat workspace pricing because per-seat pricing punishes you for growing a team; auto-expiry by defaultbecause nobody should be paying for a preview that's been zombie-running for three weeks; MCP-native from day one because the next generation of devs will deploy from Claude or Cursor, not from a dashboard.

If your backend is Docker-shaped and your CI/CD is held together with cron jobs and YAML, this is for you.

GitHub & GitLab

Every PR gets a live preview link, automatically.

Open a pull request on GitHub — or a merge request on GitLab with automation enabled — and PreviewDrop posts a bot comment with the preview URL, build status, branch, and commit — before your reviewer even clicks through.

Posted automatically on PR open or new pushUpdates in-place on every commit — no comment spamCommit status check included — GitHub and GitLabNo extra CI setup — works out of the box
github.com / acme / quick-invoice / pull / 42
PreviewDrop bot comment on a GitHub pull request showing the live preview URL
New · Pro & Team

Previews on your own domain. Certificates on us.

Serve previews at prv-a8c2f9.previews.yourcompany.com instead of a vendor URL. You add three DNS records once — PreviewDrop verifies ownership, then issues and renews a wildcard TLS certificate for your domain automatically. No nameserver change, no certificate uploads, and we never get access to your DNS provider.

For agencies:

The link your client opens carries your brand — not a hosting vendor's. Same passwords, same auto-expiry, same QR codes, on your domain.

Wildcard TLS via Let's Encrypt — issued and renewed without you touching anythingThree DNS records, set once — verified record-by-record in the dashboardApplies to every deploy trigger: push, PR, API, MCPRemove the records and you're back to defaults — no lock-in
prv-a8c2f9.previews.previewdrop.devevery plan
prv-a8c2f9.previews.yourcompany.comPro / Team

The whole setup — three records

TXT_previewdrop-verify.previews.yourcompany.comownership
CNAME*.previews.yourcompany.com → previews.previewdrop.devrouting
CNAME_acme-challenge… → acme-delegate.previewdrop.devTLS
Wildcard certificate for *.previews.yourcompany.com, issued by Let's Encrypt through a delegated challenge — your DNS stays yours.
New · GitLab · every plan

GitLab, connected read-only.

Connecting GitLab asks for two read-only scopes — read_api and read_repository. Enough to list your projects, clone a branch and build it. Nothing can be written to your GitLab. Webhooks and merge-request comments need GitLab's full api scope, so that is a separate button you press — never the default.

Why:

A preview tool should not hold write access to your code host just to show you a URL.

Any project you can see, nested groups includedRead-only: one webhook paste per project, previews on every pushAutomation, if you enable it: webhooks created for you, preview URL on every MRA separate webhook secret for every project

PreviewDrop is requesting access to your account on GitLab.com.

What the default connection asks for

read_api

Read access to the API — list projects and branches.

read-only

read_repository

Read-only access to the repository — clone and build.

read-only

Not asked for unless you click this

api · webhooks + MR comments

GitLab's only write scope. Optional, per workspace, reversible.

Enable automation

Shown as Connected · read-only or Connected · automation in Settings → Integrations.

The actual dashboard

What you actually get

One project page per repo. Every deployment with its commit, status, preview URL, and full build log streamed live over WebSocket — searchable, copyable, downloadable.

previewdrop.dev/dashboard/projects/quick-invoice
Every deployment with commit, status, preview URL, and TTL.Build logs stream live over WebSocket — searchable, copyable, downloadable.All your repos at a glance — live status, branch, last deploy.Runtime container logs — tail your app after it goes live.Inject secrets and env vars per project — encrypted at rest.Request volume, error rates, and latency — per preview, per branch.Branch tracking, build commands, TTL, preview password — all per project.

Every deployment with commit, status, preview URL, and TTL.

Claude — PreviewDrop MCP
YouDeploy the feature/payments branch and wait for it to be ready
AI
Using deploy — projectId: proj_abc, branch: feature/payments, wait: true
AI

Done! Your preview is live:

prv-d94f2c1.previews.previewdrop.dev

Status: ready · Built in 47s

YouShow me the last 20 lines of the build log
AI
Using get_build_logs — id: dep_d94f2c1, tail: 20
AI-native

Let your AI agent deploy, inspect, and destroy previews.

The official PreviewDrop MCP server gives Claude, Cursor, and any MCP-compatible AI agent full control over your preview environments — no copy-pasting URLs, no tab-switching.

11 tools your agent can call

deploy_repoone-shot: find/create project, deploy, wait
redeployrebuild existing deployment
destroy_deploymentstop + remove by id
get_deploymentfull deployment record
list_deploymentsfilter by project / branch / status
list_projectsall projects in workspace
create_projectadd a GitHub repo as a project
get_build_logsbuild output (tail N)
get_runtime_logscontainer stdout / stderr (tail N)
get_accountemail · plan · workspace
get_github_app_install_urlauto-recovery on first-use 403
VS Code:Search previewdrop in the MCP Servers panel — one-click install.
Claude / Cursor:npx previewdrop mcp
Read the MCP docs
Share anywhere

Password-protected, auto-expiring, QR-ready share URLs.

Every branch preview — and every PR preview — gets a password-protectable HTTPS URL with a built-in QR code and a TTL. Hand a client or QA a single link without spinning up a staging server or leaving ngrok open all night.

For agencies:

Send clients a password-protected link that self-destructs after their review. No staging servers, no ngrok tunnel open all night, no leftover URLs indexed by Google.

Per-preview passwordQR for mobileAuto-expiring TTL
prv-a8c2f9.previews.previewdrop.dev6d left

Test on device

Scan to open the preview on your phone. Great for checking responsive layouts without a Ngrok-style tunnel.

Wire up CI/CD
in minutes

Once you have a PreviewDrop account, run one command from your project root. Our setup script detects your repo, writes the GitHub Actions workflow, and prints the secret to add. Done.

$ npx tsx https://previewdrop.dev/setup.ts
◆ PreviewDrop Setup
Framework: Next.js
GitHub repo: acme/my-app
Written: .github/workflows/previewdrop.yml
Setup complete. Push to preview.