Open source · AGPL-3.0 · Python
Noust
Deploys web applications to your own Linux servers and manages all those servers from one console.
Many servers, one console
A central opens an SSH tunnel to each of your servers and drives them through their API, without exposing new ports on them. Before an action runs on several servers you see the plan; the canary goes first and, if it fails, the rest are left alone.
In the animation, a central box connects to three towers by three tunnels. One tower, the canary, gets the action first; when it succeeds, the other two get it at the same time. On another turn the canary fails and the other two are left untouched.
Build apart, without root
Every release is built in its own directory, without touching the one that serves. In new applications, installing and building run as noust-build, a system account with no home or shell, and if the isolation test fails the build stops instead of carrying on as root.
In the animation, the new release is assembled cube by cube inside a frame. A dependency’s script tries to reach three chests and bounces off the frame each time.
Switch without a gap
In blue/green mode, which is optional, the new release starts next to the old one and only gets traffic if it passes the health check on its own port. Then nginx validates the configuration and reloads, and the old one finishes its requests before it stops.
In the animation, the new release answers the health checks, nginx moves the traffic to it, and the old one switches off when its drain bar empties.
Rolling back
If the new release fails its health check, the previous one is activated again on its own and the error carries the probe results and the journal. You can go back to any release still on disk; Noust puts code back, never a database, and asks before going past a schema change.
In the animation, an arrow marks the active release on a shelf. A new release fails, disappears and the arrow goes back; then it steps back two releases and pauses before a schema-change marker.
Changes that undo themselves
Every sshd or firewall change you make through Noust arms a systemd timer that undoes it after 300 seconds. You can only keep it by signing in over SSH again: a session that was already open proves nothing.
In the animation, a change closes the server’s door and starts a timer. If the new login cannot get in, the timer runs out and the door reopens; if it gets in, the change is kept.
Who changed what
Every change is written to a log whose lines are chained with HMAC-SHA256, so altering one shows: noust audit verify names the first broken line. If you turn approvals on, root-equivalent changes are decided by a second person, not the one who asked.
In the animation, a request waits for another person to approve it, runs once and adds a block to a chain. Then one block is altered and the verifier stops at it.
- 85 releases between December 2025 and October 2026, and almost 12,000 tests.
- deb and rpm packages for Ubuntu, Debian, Fedora and openSUSE, plus PyPI and a container image.
- A console and an API with roles, passkeys, two-factor sign-in and an HMAC-chained audit log.
- Edits nginx and Apache configuration without losing comments or formatting.
Technologies: Python · React · systemd · nginx · Docker
