Open source · AGPL-3.0
Your binaries. Your servers. One control panel.
Setu is a cPanel-style control panel for single-binary web apps. Rust, Go, anything that ships as one executable: give each app a domain, HTTPS, its own PostgreSQL database, nightly backups and updates that roll back. All on servers you own.
One command to install
On a fresh Ubuntu 22.04/24.04/26.04 or Debian 12/13 server (x86_64 or aarch64), as root, with ports 80 and 443 open and a DNS name pointing at it. The installer brings PostgreSQL and Caddy itself.
Install
shcurl -fsSLO https://github.com/setucp/setu/releases/latest/download/install.sh && sudo bash install.sh --panel-host panel.example.comNo DNS name yet
shcurl -fsSLO https://github.com/setucp/setu/releases/latest/download/install.sh && sudo bash install.sh --tls internalFrom bare server to live app in three steps
Setu is a single binary. It is the control plane, the per-server agent and the small privileged helper, selected by subcommand.
- Step 1
Install
Run the installer. It verifies the release against SHA256SUMS, sets up PostgreSQL and Caddy, starts the panel and prints a one-time setup URL.
- Step 2
Add a server
The setup wizard registers this machine; add more with one `setu agent install` line. Agents only connect outward, and each server shows online within seconds.
- Step 3
Add an app from a manifest
Paste or link a small TOML manifest, pick a domain, and Setu provisions the site: user, database, binary, systemd unit, HTTPS route, health check.
Everything a site needs, handled
No Dockerfiles to write, no runtime to maintain on the server. The app is a published binary and Setu runs it as a hardened systemd service.
TLS
Automatic HTTPS
Caddy sits in front, programmed through its admin socket, with one route per domain and certificates through ACME.
Data
PostgreSQL for every app
Each site gets its own database and role, created for you and passed to the app through its environment.
Runtime
Native systemd, real limits
Every site runs as its own user in a hardened unit, with memory and CPU limits enforced by cgroups. No container runtime in the path.
Safety
Nightly backups
Database and data directories are backed up on a schedule, and you can restore a site from the panel.
Releases
Updates that roll back
An update backs up first. If the new version does not come up healthy, Setu puts the old binary back and restores data when it has to.
Fleet
Many servers, one panel
Agents long-poll the control plane over HTTPS, outbound only. Manage one box or a small fleet from the same place.
Built for single-binary apps
If it compiles to one executable, binds an address from the environment and answers a health check, Setu can run it.
Rust
Axum, Actix and friends
Publish a release tarball and describe it in a manifest. Setu does the rest.
Go
Static Go services
One static binary, a port and a database URL from the environment is all it takes.
Any binary
Anything compiled
Setu has no per-language knowledge. The manifest is the only app-specific thing it reads.
Samples
Miniflux and hello-axum
Sample manifests you can copy and adapt live in the manifests repository.
Why not Docker, Kubernetes or cPanel?
They are good tools for other jobs. Setu is for the case where you have a few compiled apps and your own servers.
Instead of Docker
Nothing to build or run
Containers still leave you to wire the proxy, certificates, database, backups and updates. Setu does that part, and the app stays a plain binary under systemd. Containers are on the roadmap if you need them.
Instead of Kubernetes
No cluster to operate
A cluster is a lot of moving parts for a handful of binaries. Setu is one binary and a few systemd units that you can read and debug with journalctl.
Instead of cPanel
Made for compiled apps
Hosting panels are built around PHP sites and shared hosting. Setu is built for Rust and Go services, and it is open source under AGPL-3.0.
Where it is going
Setu is early: expect rough edges before 1.0. Version 0.2 is planned to run anything and lose nothing. Plans can change.
- Available
Binary apps on your servers
Native systemd, Caddy HTTPS, per-app PostgreSQL, local backups with restore, updates with rollback, multi-server agents.
- Coming soon
Containers (Podman)
Container images as a first-class runtime, rootless Podman under systemd.
- Coming soon
Off-box encrypted backups
Nightly uploads to S3-compatible storage with retention and restore.
- Coming soon
Cloudflare tunnel ingress
Serve sites from servers with no public IP.
- Coming soon
Moves between servers
Move a site to another server, and drain a server without losing sites.
- Coming soon
2FA and alerts
Two-factor sign-in for operators, and email or webhook alerts when a site, server or backup fails.
Put your next binary on a server you own.
Setu is free and open source. Read the docs, or go straight to the installer.