previa. Early access

Review the branch.
See it running.

Previa turns every GitHub pull request into its own live preview: the exact commit, built from your own Dockerfile, running at a private HTTPS link that's posted right on the pull request. Reviewers click, try it, and approve with confidence.

2 files
to get started: a Dockerfile and a small config
1 link
per pull request, the same on every push
48 h
a preview stays up after it's published
Free
while Previa is in early access

Why Previa

A screenshot is a moment.
A preview is a place to explore.

Reviewing a change should feel like using it. Previa puts the running commit one click away from the review, so nobody has to check out a branch to see what it does.

Frontend teams

Click through the real UI on every push, not a picture of it.

API & backend teams

Databases, migrations and background workers come along for the ride.

Open-source maintainers

Preview contributions from forks safely. Forks never get your secrets.

Product & QA

Test the real thing from a link on the pull request. No local setup.

review-workflow.diff +5−5
@@ how your team reviews a pull request @@
  1. 1−Pull the branch, install, seed a database, just to click one button
  2. 1+Open the link on the pull request: that exact commit, already running
  3. 2−One shared staging server, where the last deploy wins
  4. 2+One preview per pull request, at a link that stays put
  5. 3−Screenshots in the thread, stale by the next push
  6. 3+One living comment, updated from Queued to Ready
  7. 4−"Works on my machine"
  8. 4+Everyone reviews the same running commit
  9. 5−Forgotten test environments left running for weeks
  10. 5+Removed on merge, and expired after 48 hours

Try it

Play with a pull request. Watch the preview follow.

Open it, build it, push new commits, merge it. A sped-up simulation of what Previa does on GitHub.

Build mode

feat: a cleaner task list #42

Not opened
    no preview yet
    fernhill/taskboard · demo

    How it works

    From pull request to preview,
    in seven steps.

    Build mode · you choose

    The default. Nothing builds until you press Build latest commit. Builds five minutes after your last push. Every new commit resets the clock.

    Step 01 · Notice

    Previa notices the moment you open it.

    As soon as a pull request is opened or updated, Previa picks it up, notes its latest commit and checks whether it can merge. Missed an update? Sync in the dashboard catches up in one click.

    Opened#42 feat: a cleaner task list
    branchfeature/task-list → main
    latest commit3f9c2a7
    authorkai
    • pull request picked up
    • latest commit noted
    • merge status checked
    Step 02 · Check

    Nothing runs until it should.

    In Manual mode, the default, you choose Build latest commit.In Automatic mode, a build starts five minutes after your last push. Right before it starts, Previa double-checks with GitHub. If anything changed, it waits.

    You pressed Build latest commit5 minutes since your last push
    • still open
    • still on commit 3f9c2a7
    • no merge conflicts
    • your turn in the queue
    Step 03 · Build

    Exactly that commit, built cleanly.

    Previa builds your own Dockerfile from exactly that commit, in a clean, isolated build with sensible time and size limits. The build log streams live while it runs.

    1. Preparing commit 3f9c2a7
    2. Step 1/5 : FROM node:22-alpine
    3. Step 3/5 : RUN npm ci
    4. Step 5/5 : RUN npm run build
    5. Image built
    6. Build finished in 1 min 12 s
    your Dockerfileexact commitisolated buildlive log
    Step 04 · Run

    Its own space. Nothing else in reach.

    Each preview runs on its own with firm CPU and memory limits. Your repository secrets are added when it starts (never for forks), and nobody can open it until its health check passes.

    sizestandard · 1 vCPU · 1 GiB
    health checkGET /health → 200
    secretsadded at start
    networkprivate to this PR
    filesread-only · /tmp writable
    lifetime48 hours
    Step 05 · Share

    One link for the life of the pull request.

    Every pull request gets its own private HTTPS link with a random part nobody can guess. When you push again, the new version takes over only once it's healthy, so reviewers never land on a broken page.

    https://pr-42-gc0uy9-k3x9q2ma.preview.ajaykathwate.dev
    3f9c2a7serving → retired
    8d41e0bhealthy → takes over
    Step 06 · Report

    Your team hears about it where they already are.

    Previa keeps one comment on the pull request up to date, from Queued to Building to Ready with the link, and adds a check to the exact commit. The dashboard updates live, no refresh needed.

    previa bot commented · edited
    Previa preview: Ready https://pr-42-gc0uy9-k3x9q2ma.preview.ajaykathwate.dev commit 3f9c2a7 · expires in 48 hours
    Previa previewsuccess · 3f9c2a7
    Step 07 · Clean up

    Merged or closed? It tidies up after itself.

    When the pull request closes, the link stops working and the preview and its data are removed. A preview nobody closes expires 48 hours after it was last published. Building again brings it back at the same link.

    1. 1link switched off
    2. 2preview stopped
    3. 3build removed
    4. 4preview data removed

    Features

    Everything between a push and a preview.

    B·01

    Manual or Automatic

    Manual by default: you press Build latest commit. Or switch on Automatic and Previa builds five minutes after your last push.

    you decide5 min quiet
    B·02

    Only buildable changes

    Pull requests with merge conflicts don't build. Previa checks again right before it starts, so nothing runs by mistake.

    CheckingConflictsOpen
    B·03

    Exactly that commit

    Every preview is built from one exact commit, and your .previewrc.yaml is checked before anything runs.

    exact commitconfig check
    B·04

    Your own Dockerfile

    If it runs in Docker and answers HTTP, it runs on Previa: Node.js, Python, Ruby, Go, PHP, Java or a static site.

    any language
    B·05

    Never drops a request

    Every request is saved before it runs, so a hiccup never loses your build. It simply picks up again.

    reliable
    B·06

    Safe for forks

    Pull requests from forks build without your secrets or extra connections, and can't affect your other builds.

    no secrets

    Full-stack previews

    Not just pages. Databases included.

    Add PostgreSQL or Redis, a setup command and up to three background processes to .previewrc.yaml. Previa starts them next to your app, hands over the connection details, and shares the link only when everything is ready.

    .previewrc.yamlyour repository root
    https://pr-118-x7k2pa-m4q8r1zd.preview.ajaykathwate.dev
    your appyour link:3000 · GET /healthz
    private to this preview · never public
    1. 1Servicesare up and answering
    2. 2Setupruns once
    3. 3Workersstart
    4. 4Your apppasses its health check
    5. 5Linkgoes live
    Layer 1 of 5 · Isolated preview Its own space, with firm limits

    Each preview runs on its own, without admin rights, on a read-only file system with firm CPU and memory limits.

    Security

    Built for code you haven't reviewed yet.

    Every pull request is treated as untrusted, even your own team's. Previews are kept apart from each other, from other customers and from Previa itself.

    Forks get less

    Pull requests from forks never receive your secrets or extra connections.

    Secrets stay secret

    Encrypted, added only when a preview starts, masked in logs, and never shown again.

    Your account stays separate

    Previews never run on Previa's own address, so a preview can't touch your sign-in.

    Every build is isolated

    Each build runs on its own, with limits, and can't reach anything private.

    Unguessable links

    Each link has a random part. Previews aren't behind a login, so use test data.

    Gone when you're done

    Merged, closed or expired: the preview and its data are removed.

    Roadmap

    Built in the open, one step at a time.

    Available today

      Ideas we're exploring

      Not built yet · not promises

      FAQ

      Questions, answered plainly.

      Didn't find yours?

      What is Previa?

      Previa turns every GitHub pull request into its own live preview: the exact commit, built from your Dockerfile, running at a private HTTPS link that's posted right on the pull request.

      What does my repository need?

      Two files at its root: a Dockerfile and a .previewrc.yaml. The config can be as short as {}; by default Previa expects your app on port 3000. You can also set a health check path, environment variables and a size.

      Which languages and frameworks work?

      Anything that runs in a Docker container and answers HTTP: Node.js, Python, Ruby, Go, Java, PHP, static sites and more. APIs work too.

      When does a preview get built?

      In Manual mode (the default), when you press Build latest commit. In Automatic mode, five minutes after your last push. Either way, Previa checks with GitHub right before building.

      How long does a preview live?

      Until its pull request is closed or merged, or 48 hours after it was last published. Building again brings it back at the same link.

      Is Previa free?

      Yes. Previa is free while it's in early access, so you can explore it on your own pull requests.

      Does signing in give Previa my code?

      No. Signing in only tells Previa who you are. It reads code only in the repositories, public or private, where you install its GitHub App, and only to build previews and post comments and checks.

      Is it safe to build pull requests from forks?

      Yes. Every build and preview is isolated, and pull requests from forks never receive your secrets or extra connections.

      Who can open a preview?

      Anyone who has its link. Each link has a random part, so previews can't be guessed, but they aren't behind a login. Use test data and sandbox credentials, never production ones.

      What happens to my code?

      It's used only to build and run your preview. When the pull request closes or the preview expires, the preview and its data are removed.

      What if a build fails?

      The comment and check on the pull request say what went wrong, the full build log is one click away, and you can retry whenever you're ready.

      How do I get early access?

      Make your early-access pass, then send it to Ajay on LinkedIn to claim your spot.

      Early access

      Ready to see your
      pull requests running?

      Previa is in early access. If you'd like it on your repositories, or have feedback, ideas or questions, get in touch.

      Early access

      Get your early-access pass.

      Make your pass, download it, and send it to Ajay on LinkedIn to claim your spot. It's made right here in your browser; nothing is sent anywhere.

      github.com/ Letters, numbers and single hyphens.
      What will you preview?

      Claiming copies a short message for you and opens Ajay's LinkedIn profile.