A review app is a temporary, fully deployed instance of an application created automatically for a single branch or pull request, so changes can be tested and reviewed in isolation before they are merged. Review apps are sometimes called preview environments or ephemeral environments, and they are usually torn down once the change is merged or closed.
Why it matters: Review apps let testers, developers and stakeholders try a change in a running environment early, without waiting for a shared staging server. This shortens feedback loops and avoids teams overwriting each other's changes. They do have limits: external dependencies are often replaced with mocks, so a review app only reflects the behaviour the team already knows about.
In practice: A continuous integration pipeline builds the branch, deploys it to a fresh environment and posts a link on the pull request. Automated tests run against it, and testers explore the change there. Third-party systems are usually mocked or stubbed, since connecting every review app to real partners is costly. Teams should be clear about which rules the mocks cover and plan further testing against real integrations before release.
Examples:
- A tester exploring a new checkout step in a review app linked from the pull request before any code is merged.
- A product manager approving copy changes by clicking through a preview environment.
- Data pipeline tests passing in a review app with mocked partner responses, then failing in production when the real partner rejects records.
Common pitfalls:
- Treating a passing review app as proof the change works end to end, when mocks only cover the rules the team knows about.
- Letting review apps drift from production configuration, so differences hide real problems.
What is the difference between a review app and a staging environment? A staging environment is usually long-lived and shared by everyone. A review app is short-lived and dedicated to one change.
Do review apps replace integration testing? No. They make early testing easier, but real integrations still need testing, because mocked dependencies cannot reveal rules the team does not know exist.