FAQ
Answers to the most common questions about PreviewDrop.
What languages and frameworks are supported?
Anything that runs in Docker. PreviewDrop auto-detects Node.js, Python, Ruby (Rails/Sinatra), Go, Java/Kotlin, PHP (Laravel/Symfony), Rust, and .NET without any config file. If your stack isn't auto-detected, add a Dockerfile and PreviewDrop will use it instead. See Frameworks & Docker for templates and gotchas per language.
Is my source code stored on PreviewDrop servers?
No. During a build, PreviewDrop clones your repo into an ephemeral build container on a Hetzner Cloud VM in Germany. Once the image is built and the container starts, the source tree is discarded. Only the compiled image layers are kept — and only as long as the preview is alive. When the preview expires or you stop it, the image is removed.
How do I set the build command, install command, or start command?
If you have a Dockerfile, those are defined inside it and PreviewDrop uses them as-is.
For auto-detected stacks (no Dockerfile), PreviewDrop infers sensible defaults. To override them, go to your project → Settings → Build settings and enter custom commands. Changes take effect on the next deployment.
My app won't start — it says "502 Bad Gateway". What do I do?
PreviewDrop reached your container but your app didn't respond. The two most common causes:
- Wrong port. Your app must listen on the
PORTenv var, not a hardcoded number. For Node:app.listen(process.env.PORT, '0.0.0.0'). - Binding to 127.0.0.1 instead of 0.0.0.0.The proxy can't reach loopback-only listeners.
More causes in Troubleshooting.
Can I use a database with my preview?
Yes — two patterns work well:
- Shared dev DB. Set
DATABASE_URLto a shared dev Postgres/MySQL in your project's Variables tab. All previews hit the same DB. Simplest setup. - Branch-isolated DB. Use Neon or PlanetScale branching and set the branch-specific URL as a branch override in the Variables tab.
PreviewDrop never intermediates your database connections — they go directly from your preview container to your DB host.
How long do previews last?
Previews expire after a period of inactivity. On the Free plan, idle previews expire after 1 hour. Paid plans extend that window (Starter: 24 h, Pro: 7 days) and add an option to pin a preview indefinitely. When a preview expires the container is stopped and the URL goes 404. Push a new commit or click Redeploy to bring it back — PreviewDrop rebuilds from the same commit.
What happens when I close or merge a PR?
PreviewDrop receives the GitHub webhook, marks the deployment as stopped, and terminates the container. The preview URL goes offline within a few seconds. Any other open previews for the same project (e.g. other branches) are unaffected.
Can I share a preview with someone who doesn't have a PreviewDrop account?
Yes. Preview URLs are public by default — anyone with the link can open them. If you want to restrict access, enable Preview passwordin Project Settings (Starter plan and up). You can also email the URL directly from the PreviewDrop dashboard — recipients don't need an account.
Does PreviewDrop support WebSockets?
Yes. The Traefik reverse proxy that PreviewDrop uses forwards WebSocket upgrades to your container. No special config needed — your app's WebSocket server works as-is as long as it's listening on $PORT on 0.0.0.0.
How do I trigger a deployment from CI without a Git push?
Use the PreviewDrop CLI (previewdrop deploy) or the REST API (POST /api/deployments with your API key). Both let you trigger a build from any branch or commit SHA from inside a CI pipeline, Makefile, or script. The deploy API returns the preview URL as soon as the container is healthy so you can post it downstream.
Are my environment variables secure?
Yes. Variable values are encrypted at rest using AES-256 before being stored in the database. The plaintext is only decrypted inside the build VM at container start time. PreviewDrop staff cannot read your secret values — only the variable names are visible in the Variables tab.
Is there a free plan? What are the limits?
Yes — no credit card required. The Free plan gives you 1 project, 1 concurrent preview, 1-hour idle TTL, and 2 GB build memory. It's intended for trying PreviewDrop on a personal project. For team usage and longer-lived previews, see the pricing page.
Can multiple people on my team use the same PreviewDrop workspace?
Yes. Invite teammates from Settings → Team. Every team member can see all projects and deployments in the workspace. GitHub App access is shared — the repo list comes from the owner's GitHub App installation, so new members don't need to re-grant GitHub access.
Where is my data hosted?
Build VMs and the primary application database (Supabase) run in the EU — Nuremberg, Germany and EU-region Supabase respectively. Payment processing uses Stripe (US, with EU Standard Contractual Clauses). See the Subprocessors page for a full list.