Uffizzi is a tool that lets you preview pull requests before merging. Create on-demand Preview Environments for APIs, frontends, backends, databases, microservices, binaries and command line tools. Each Preview Environment gets a secure HTTPS URL that is continually refreshed when you push new commits. Uffizzi also handles clean up, so your environments last only as long as you need them.
Uffizzi is an open-source, off-the-shelf, cross-platform solution that works with any version control system, container registry, or CI platform.
If you're interested in Uffizzi, give us a star. It helps others discover the project.
Go to the quickstart
repo, then follow the instructions in the README
to create a Preview Environment for a sample application.
Uffizzi is designed to integrate with any CI platform as a step in your pipeline. You can use Uffizzi to rapidly create:
- Pull request environments
- Debugging environments
- Demo environments
- Release environments
- Staging environments
Uffizzi is designed for full-stack web applications and containerized services, including APIs, backends, frontends, databases, microservices, binaries and command line tools . Currently, application configurations must be defined via Docker Compose. Support for Helm and other configuration formats are on our public roadmap. See Docker Compose for Uffizzi to learn more about supported syntax.
Development teams adopt Uffizzi because it...
- Increases development velocity by removing the bottleneck of a shared test environment, where buggy or conflicting commits from multiple developers often cause delays in feature releases.
- Improves code quality by providing a way to test the functionality of each branch in clean, isolated, production-like environments before merging.
- Facilitates test parallelization since teams can create as many Preview Environments as they need and can iterate on features in parallel.
Teams also like Uffizzi because it's...
-
👩💻 Developer-friendly - Uffizzi is configured via Docker Compose, the same tool many teams use for local development.
-
🪶 Lightweight - Uffizzi Preview Environments are isolated namespaces designed to be fast and ephemeral.
-
🔁 Event-driven - Designed to integrate with any CI system, Uffizzi Preview Environments are created, updated, or deleted via triggering events, such as pull requests or new release tags. Uffizzi generates a secure HTTPS URL for each environment, which is continually refreshed in response to new events.
-
🧼 Clean - The ephemeral nature of Uffizzi Preview Environments means your team can test new features or release candidates in clean, parallel environments before merging or promoting to production.
See our high-level project roadmap, including already delivered milestones.
(If you haven't completed the quickstart guide, we recommend starting there to understand how Uffizzi works and how it's configured.)
There are two options to get Uffizzi:
-
Use Uffizzi Cloud (SaaS) - This is fastest and easiest way to get started with Uffizzi. Uffizzi Cloud is free for small teams and is recommended for those who are new to Uffizzi. It also includes some premium options like single sign-on (SSO) and password-protected URLs for your Preview Environments. If you want to use Uffizzi Cloud, you can follow this step-by-step guide to configure Preview Environments for your own application.
-
Install open-source Uffizzi on your own Kubernetes cluster - Alternatively, you can install Uffizzi on your own cluster by following the self-hosted installation guide.
- Slack channel - Get support or discuss the project
- Subscribe to our newsletter - Receive monthly updates about new features and special events
- Contributing to Uffizzi - Start here if you want to contribute
- Code of Conduct - Let's keep it professional
What about my database?
All services defined by your Docker Compose file are deployed to Preview Environments as containers—this includes databases, caches, and other datastores. This means that even if you use a managed database service like Amazon RDS for production, you should use a database image in your Compose (See this example that uses a postgres
image from Docker Hub).
If your application requires test data, you will need to seed your database when your Preview Environment is created. Here are two methods for seeding databases:
- (Recommended) Have your application perform a data migration on start-up. You can add a conditional to do this only if the database is uninitialized.
- Bundle test data into the database image itself. This method is only recommended for small datasets (< 50MB), as it will increase the size of your image and deployment times.
What do you mean by "environments"?
Uffizzi Preview Environments are deployed upon Kubernetes. Uffizzi performs a translation from Compose to Kubernetes, where your application is deployed as a Pod to an isolated Namespace within a cluster. This abstraction helps reduce a team's infrastructure footprint and associated overhead. Uffizzi also creates a unique hostname for each Preview Environment and provision a TLS certificate. Each Preview Environment exposes one socket that can receive HTTP traffic. Every container defined by your Compose can communicate with each other on an internal network vialocalhost
. Application instances that belong to different Preview Environments may only communicate via the public Internet. See the self-hosted installation guide for more architecture details.
Does Uffizzi support monorepos/polyrepos?
Yes. Your CI pipeline will typically include a series ofbuild
/push
steps for each of the components of your application. Uffizzi just needs to know the fully qualified container registry URL for where to find these built images.
Does Uffizzi support _____________?
Uffizzi is container-centric and primarily designed for web languages. In general, if your application can be containerized, described with Docker Compose, and accepts HTTP traffic, Uffizzi can preview it.How can my application services communicate?
Just like when you rundocker-compose up
locally, all the services
defined in your Compose share a local network and can communicate via localhost
. Application instances that belong to different Preview Environments may only communicate via the public Internet.
How is Uffizzi different from GitHub Actions (or other CI providers)?
Uffizzi does not replace GitHub Actions or any other CI provider. Uffizzi previews are meant to be added as a step in your existing CI pipeline, after your container images are built and pushed to a container registry.Can I connect Uffizzi with Netlify/Vercel?
Yes. While Uffizzi supports full-stack previews, some users who already leverage frontend platforms like Netlify or Vercel want to add Uffizzi previews for their APIs/backend. For help configuring this scenario see:Is Uffizzi open source?
Yes. If you have access to a Kubernetes cluster, you can install Uffizzi via Helm. Follow the self-hosted installation guide.This library is licensed under the Apache License, Version 2.0.
If you discover a security related issues, please do not create a public github issue. Notify the Uffizzi team privately by sending an email to [email protected]
.