One root process
The panel runs unprivileged. A small Rust daemon holds root, and its contract has no operation that runs a program you hand it.
Source-available hosting panel
Websites, PHP versions, SSL, databases, file transfer, backups and the firewall — managed from a browser, with a cabinet for every customer and an API your billing system can drive.
curl -sSL https://get.maran.innovayse.com | bashOne command on a fresh server. Every check runs before anything changes.
The panel runs unprivileged. A small Rust daemon holds root, and its contract has no operation that runs a program you hand it.
A domain is validated as a domain, not escaped into a command line. There is no newline to end one directive and begin another.
Every account is a system user with its own home, its own php-fpm pool under its own uid, and its own quota.
A provisioning API creates, suspends and deletes accounts, so a billing system can run hosting without a person in the loop.
Static, PHP and reverse-proxy sites with aliases. The agent validates every rendered vhost with the web server itself and rolls it back if the reload refuses.
ACME with an HTTP-01 challenge, uploads for custom material, renewal thirty days before expiry, and keys in a root-only store outside every home.
A database and a scoped user per account, chrooted SFTP carrying the account's own uid, per-plan limits on both.
Backups of files and databases, restorable one at a time, a managed firewall, and monitoring of the server's own state.
Append-only, covering every sign-in and every change, with a screen only administrators can open.
Updates are signed, take a database dump before they swap anything, and roll back with one command.
Run one command on a fresh server. Preflight checks the distribution, memory, disk and ports, and reports every problem at once rather than one per run.
The installer prints a link that creates the first administrator. Nothing else can create it, and it is consumed the moment it is used.
An account is provisioned on the host as a real Linux user with its home, its pool and its quota — then hand its cabinet to the customer.
The split below is the product's main design decision. Everything else on this page follows from it.
maran-apiThe panel
maran-agentThe only root process
has root
thenPostgreSQLThe panel's data
The panel asks the agent for named operations with typed, validated arguments. There is no operation that runs a caller-supplied program, and no shell string anywhere between them — so the set of things the root process can be made to do is finite, written down and reviewable.
One command on a fresh server of any of these, on x86_64 or aarch64.
Ubuntu
22.04 · 24.04 LTS
Debian
12 · 13
AlmaLinux
9 · 10
Rocky Linux
9 · 10
A distribution outside this list is refused rather than guessed at — the installer knows each supported family's package layout and service names. Production installs are native; Docker is used in development only.
In active development toward the first feature release. What follows is what exists, and what does not.
Maran is published under the Business Source License 1.1 by Innovayse LLC, and converts to Apache 2.0 on 29 August 2030. The date is written into the licence rather than promised.
Four properties of the code, each of them either true or not, and each checkable by reading it.
A domain is validated as a domain — letters, digits, hyphens, dots — not escaped into a command line. There is no newline in it to end one directive and begin another.
Every write is rendered, renamed into place atomically, then checked by the service itself. If validation or the reload refuses, the file is rolled back.
Peer credentials are read from the socket before an operation is considered, so the daemon knows which process is on the other end rather than trusting what it is told.
Asking for another account's resource is answered as not found, never as forbidden — an error that never confirms a row exists.
Multi-tenancy is in the product from the first release rather than added later, and it shows in who can use it.
A cabinet per customer, plans that cap what an account may use, and a provisioning API a billing system drives to create accounts without a person in the loop.
Client sites on one server, each its own Linux user with its own quota and PHP version — and an audit journal that answers who changed what.
Everything a single machine needs, installed in one command, updated with signed artefacts and rolled back with another.
The newest release and the most recent thing written about how this is built.
Maran 1.0.0-beta.1 — the first installable release
The first release you can install on a server: accounts as real Linux users, websites, PHP versions, SSL, databases, file transfer and backups — published as a beta, with the boundary stated.
19 September 2026Why the agent takes no shell commands
The one design decision that shaped everything else in Maran — a root daemon that takes typed operations and no shell strings — and what it costs.
The short answers. The rest are on the questions page.
The architecture, the contract between the panel and the agent, and what the installer does to a server — written down rather than summarised.