Preview Deployments — A Live Preview for Every Pull Request

Every opened Pull Request is automatically published to its own ephemeral environment: pr-{n}-yourproject.skyversal.site. Setup, limits and security boundaries.

Preview Deployments automatically builds every Pull Request opened on your GitHub repository and publishes it to its own ephemeral address: pr-123-yourproject.skyversal.site. Test changes in a real environment before merging, or share the link with your team or client.

Setup

  1. Enable the feature under your project's Settings → Preview Deployments.
  2. On first enable, the pull_request event is added to your GitHub webhook automatically — nothing to configure by hand.
  3. Open a PR: when the build finishes, the preview URL lands as a comment on the PR and appears in the deploy list with a Preview badge.

How it works

  • PR opened / new commit: the PR's latest commit is built, passes the health gate, and the preview URL goes live. New pushes update the same environment — the PR comment is edited, not re-posted (no spam).
  • PR closed / merged: the preview environment is torn down automatically.
  • 72-hour TTL: previews with no recent pushes are cleaned up — resources are never held forever.

Limits & security

  • Free plan: 1 concurrent preview. When the limit is full, no preview is created for a new PR and an informational comment is posted — paid plans are unlimited.
  • Same-repo PRs only: fork PRs are not previewed (prevents arbitrary code from reaching your environment variables).
  • Shared database: previews connect to your project's existing database. release_command (migrations) never runs in previews — the production schema is protected.
  • Secret masking: payment/cloud/API keys are not written into preview environments (managed via platform configuration).
  • Draft PRs: not built while marked draft; building starts at "ready for review".

Note: Previews never interfere with your production deploys — separate container, separate address, separate lifecycle. Your production pushes continue on their normal path.

Last updated on November 3, 2026
Edit this page on GitHub