A full preview environment for every pull request.

Stackyard builds your app, its services and a masked copy of your database for each branch, posts the URL on the PR, and tears everything down the moment you merge.

$ npx stackyard init

94 smedian cold start
1 : 1environments to PRs
$0while it sleeps

Illustration: an exploded stack of four layers — data, services, app and edge — that together form the preview environment for pull request 482.

features

Staging, multiplied by your branch count.

One shared staging server means a queue, a Slack thread about who broke it, and reviewers approving screenshots. Stackyard gives every branch its own copy of production-shaped infrastructure.

01

An environment per branch

Every push to an open PR rebuilds its own isolated stack at pr-<n>.<app>.stackyard.dev. No staging queue, no "who deployed over my branch".

  • main
  • feat/checkout
  • fix/rate-limit
02

Real data, safely branched

Each environment mounts a copy-on-write branch of your nightly Postgres or MySQL snapshot. Masking rules rewrite emails, names and tokens before anyone can query them.

  • postgres 16
  • mysql 8
  • mask: users.email
03

Sleeps when idle, gone on merge

Idle environments sleep after 30 minutes and wake on the next request. Merge or close the PR and the whole stack is destroyed — containers, volumes and the database branch.

  • sleep 30m
  • wake < 2s
  • destroy on merge

how it works

Five layers, built from your repo in about 94 seconds.

Stackyard reads the docker-compose.yml you already have plus a short stackyard.toml. Every push rebuilds only the layers that changed.

  1. 01

    Data branch

    A copy-on-write branch of last night's snapshot, ready in under 4 s regardless of size. Masking runs before the branch mounts.

  2. 02

    Services

    api, worker and redis start from your compose file — same images, same ports, a private network per PR.

  3. 03

    App build

    Your web app builds with layer caching shared across branches. Median rebuild after a push: 38 s.

  4. 04

    Edge URL

    pr-482.acme.stackyard.dev with TLS, an optional SSO gate and per-branch environment variables.

  5. 05

    Check + comment

    A GitHub check goes green and the bot comments the URL on the PR. Merge or close it and the stack is destroyed.

# stackyard.toml
[preview]
compose = "docker-compose.yml"
expose  = "web:3000"

[data]
snapshot = "nightly"
mask     = ["users.email", "users.name"]

integrations

Plugs into what you already run.

Install the app on your Git host, point Stackyard at a compose file or Helm chart, pick a snapshot, and send notifications where your team already talks.

source
GitHub, GitLab, Bitbucket
runtime
Docker Compose, Kubernetes (Helm), Terraform outputs
data
Postgres 12–17, MySQL 8, Redis 7
workflow
Slack, Linear, Sentry release tagging

pricing

Priced per environment-hour, not per seat.

Sleeping environments don't count. Every plan starts with a 14-day Team trial, no card required.

Hobby

$0/month

For side projects and trying Stackyard on one repo.

100 env-hours included
hard cap, no overage

↻ hover, focus or tap for details

Hobby includes

  • 3 concurrent environments
  • 1 repository, GitHub only
  • 1 GB data snapshots
  • Sleep after 15 min idle
  • Community support
Start free

Scale

$299/month

For platform teams with compliance and network needs.

3,000 env-hours included
then $0.03 per env-hour

↻ hover, focus or tap for details

Scale includes

  • Unlimited concurrent environments
  • Unlimited seats
  • SAML SSO and SCIM provisioning
  • VPC peering and private databases
  • Run in your own AWS or GCP account
  • 99.9% uptime SLA, shared Slack channel
Talk to sales

An env-hour is one running environment for one hour. Sleeping environments are billed at $0.

Stop waiting for staging.

Connect a repository and your next pull request ships with its own URL, its own services and its own database — in about a minute and a half.

Connect GitHub — it's free $ npx stackyard init Works with GitHub, GitLab and Bitbucket · SOC 2 Type II