Preview deploys
Four ways to get a shareable URL before going live
A preview runs a version of your app at its own URL while the live URL continues to serve the current version. Share it, then promote it to live or let it expire. There are four kinds — they differ in how they're triggered, what URL they get, and how long they live.
Check the data target before testing. All preview kinds share the app's managed PocketBase database and persistent files in /app/data with live. Writes from a preview can change live data, and discarding a preview does not undo those writes. For an external database, set a separate test connection with percher env set DATABASE_URL=... --scope preview if your app uses that variable. To test with a separate managed PocketBase database or separate persistent files, publish a separate app with synthetic data.
Ephemeral — percher publish --preview. Deploys to {app}--p-{slug}.percher.run with a random slug, so every publish gets a fresh URL. Expires automatically after 24 hours on Free, 72 hours on paid plans. Free has one preview slot per app, and a new preview replaces the previous one; paid plans allow up to 3 active previews per app, and another is refused with PREVIEW_LIMIT_REACHED until you promote or discard one. This is the quick "look at this" preview.
Preview branch (stable URL) — percher preview branch set <branch>. Pins a branch to the fixed address {app}-preview.percher.run. The URL never changes; every push to the pinned branch updates what it serves. Use this when you want one preview address to bookmark or share standing links to.
Auto branch — enable autoPreviews on the connected GitHub repo, then every push to a non-live branch deploys to {app}--p-{branch}.percher.run.
Pull request — open a PR on the connected repo and it deploys to {app}-pr-{n}.percher.run, where n is the PR number.
Finding them. The app's Overview shows the four surfaces in the Previews panel, with every currently reachable preview linked under Active now together with its time left. The full list — including expired and failed ones — lives under Publishes → Deploys & previews, where you can open, promote (make it the live version), or discard each preview.
Previews of a private app are gated the same way as the app itself — a preview URL never exposes a private app publicly.