Minimal example of running Topcoat — a full-stack Rust web framework — on Zerops. Single-page SSR app with module-based routing, no database required.
Lightweight project core
Single dedicated container with balancers (L3/L7), logger and statistics services
After deploying one of the environments and getting to know Zerops, you have two paths forward. 1 Clone our GitHub repositories and use the whole recipe as a template, or if you already have an existing application on a similar stack, 2 integrate the recipe setup with your application.
or
Taking ownership of theenvironment
Small Production environment provides a production-ready setup with two app containers for zero-downtime deploys and horizontal autoscaling under load.
Go to Service Settings > Pipelines & CI/CD Settings in the Zerops Dashboard and connect your repository.
For production, use a trigger on new tags. This keeps deployments intentional and tied to a specific version. You can also add a regex filter, such as ^v[0-9]+\.[0-9]+\.[0-9]+$, if you want to allow only semantic version tags.
Alternatively, add zcli push to your existing CI/CD pipeline if you want full control over when deployments happen.
Pay attention to minFreeRamGB. This value tells Zerops when to scale RAM vertically. Adjust it based on your app’s real memory needs. RAM scales up immediately, while CPU scales after two consecutive measurements below the threshold.
lightbulbTip
Run a quick stress test with a tool like hey before real users arrive. This helps you see how your app behaves under load and tune the autoscaling settings.
When changing DNS records for production, start with a low TTL value. Make sure SSL certificates are active before you disable the fallback Zerops subdomain.
Once everything works, you can disable the Zerops subdomain so all traffic goes through your custom domain.
Your application is live in production and the core setup is complete.
The following sections are optional. They cover extra production features such as log forwarding, backups, and diagnostic access. You can stop here and come back later when you need them.
Topcoat binds to 127.0.0.1:3000 by default — without HOST=0.0.0.0 and PORT=8080, Zerops readiness checks and the L7 balancer cannot reach the app.
Use topcoat dev in dev containers — install topcoat-cli in prepareCommands; it provides watch mode and asset bundling that plain cargo run does not.
Build container has no pkg-config / libssl-dev — crates defaulting to native-tls (reqwest, hyper-tls, …) fail with Could not find directory of OpenSSL installation. Use rustls-tls instead: reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] }. Same pattern for any HTTP client crate.
A server-rendered TanStack Start application with Nitro Node output, deployed on Zerops. Includes ready-made environment configurations for the full development lifecycle.
A Bun application connected to PostgreSQL, running on Zerops with six ready-made environment configurations — from AI agent and remote development to stage and highly-available production.