Your own cloud. No Kubernetes.

Deploy from a git webhook and get a running app with logs, metrics and one-click rollback, from one Go binary with no SSH.

curl -fsSL https://levelrail.com/install.sh | sudo sh

136 stars on GitHub Latest release v0.8.8

Levelrail

Where it stands

  • APIs and the app spec can change between releases, so read the changelog before you upgrade.
  • A single node is the well-tested path. Multi-node is in beta.
  • Not a Kubernetes replacement: no bin-packing scheduler and no CRDs.
  • Free and Apache 2.0. It runs on servers you own, with no hosted offering.

How it is built and why: the architecture page.

One server
AWSServer A, replica 1Remote serverAzureAI assistants, optionalScale and placeGoogle CloudUsersOne server, one installHetzner, DigitalOceanServer B, replica 2Levelrail control planeYour editorBuildIngressGit hostsAny CI/CD
The levelrail.com landing pagelevelrail.com
levelrail-cli
levelrail-cli apps deploy webblue servinggreen readiness passedcutover blue to greenlevelrail-cli apps deploys list weba3f9c1e live, 2 min agoa3f9c1d previous, image pinnedlevelrail-cli apps deploys rollback-to web a3f9c1drolled back, no rebuild
Apps
The Levelrail apps list: 12 apps, 11 running, each row showing health, node, traffic, p95 latency and errors.

Template gallery

359 services, each one a click away.

Databases, CMSs, analytics, automation, storage and monitoring ship as ready-made Compose templates. Pick one, set a domain if you want one, deploy.

templates
359
categories
17
starter kits
7
The Levelrail template picker: a search box, a category list with counts and a grid of service cards with Deploy now buttons. The Levelrail template picker: a search box, a category list with counts and a grid of service cards with Deploy now buttons.
Secrets generated for you One click, then it runs

What it does

Deploy, watch and network your own servers.

Levelrail is one Go binary on the servers you already own. These three cards show what it takes care of, and how far it goes today.

01 / deploys blue v41 serving green v42 candidate readiness probe previous image pinned

Deploys that wait for health.

Traffic moves only after the new container passes its readiness probe. If it never does, the old one keeps serving, and the previous image stays pinned for one-click rollback.

How deploys work
02 / observability 200 GET /api/health 3ms 200 GET / 5ms 502 upstream restarting sample, stays on node

Metrics and logs, already there.

Both stay on the node that produced them and queries fan out to the agents. Nothing to install, nothing shipped to a third party.

See observability
03 / layers L7 application owned L6 presentation L5 session L4 transport partly L3 network owned L2 data link L1 physical

Seven layers. We run three.

Levelrail owns L7 and L3 and part of L4. The WireGuard mesh is beta and TCP load balancing is not built.

Read the layer map

Try it

See a deploy and its logs, live.

Break the deploy and watch the old version keep serving. Filter the logs the way you would on a real node.

marketing-site / deploy

alpineRolling out

Rolling out

Traffic stays on the current deploy until the new one is healthy.

Traffic100% old, 0% new
  1. BuildSkipped

    Using a pre-built image, no build step ran.

  2. Health checkWaiting
    0/5
  3. CutoverWaiting
  4. CleanupWaiting
Old image stays pinned for rollback
How deploys work

marketing-site / observe

LogsLive

Nothing matches yet. New lines show up here as they arrive.

Sample traffic. Real logs stay on the node that wrote them.

How observability works

Every app, deploy and log in one place.

Real screens from a running control plane. Click through them, or leave it alone and it pages through for you.

The dashboard

The Levelrail dashboard: five of five apps running, deploy counts, nodes online and a list of recent deploys. The Levelrail dashboard: five of five apps running, deploy counts, nodes online and a list of recent deploys.
The apps list showing five healthy apps with their domains, images and last deploy time. The apps list showing five healthy apps with their domains, images and last deploy time.
A deploy page with a live banner and a rollout timeline of build, health check, cutover and cleanup steps. A deploy page with a live banner and a rollout timeline of build, health check, cutover and cleanup steps.
The live logs view with tabs for live, search, errors and archive, and a stream of HTTP request lines. The live logs view with tabs for live, search, errors and archive, and a stream of HTTP request lines.
The deploy history list showing which deploy is current, with visit, logs and promote actions. The deploy history list showing which deploy is current, with visit, logs and promote actions.

Apps running, requests, error rate, deploys in the last day and nodes online, with the recent deploys beside the next steps.

Every app with its state, domain, image, traffic, p95 latency, errors and last deploy time.

A rollout timeline: health check, cutover and cleanup, each with how long it took, and a banner saying this deploy is serving traffic.

Live container output on the node that produced it, with search, error and warning filters, and an archive.

Every deploy attempt, which one is current, and a one-click promote to production.

Day two

The moments that decide whether you trust it.

Six situations you will meet, with the real command for each. Output shown is illustrative.

Roll back to the exact image that worked.

Rollback redeploys a past successful deploy by its pinned image and config, and follows it through the readiness gate.

levelrail-cli
levelrail-cli apps deploys rollback-to web a3f9c1d --watch# same image, same config, no rebuild
Rollback

Light enough to forget it is there.

Measured on 2026-10-19 on a 2 vCPU, 8 GB Linux test box, with no apps under load. One run on one box, not a benchmark of your hardware. What is verified and the method.

200 MB idle memory (RSS), control plane

253 MB peak memory in the same run

On a 2 vCPU, 8 GB Linux box the control plane idled at 200 MB of memory with a peak of 253 MB, bars drawn to the same scale.

1.5% CPU while idle

A Mac development build (Apple M4 Max) idled at 68 MB with no apps. That is a different machine and build, so it is not comparable.

Agents, not SSH.

  1. 01The agent dials out over mTLS. No inbound ports, no SSH keys on your servers.
  2. 02It uses the Docker Engine API. Nothing shells out to the docker CLI.
  3. 03A level-triggered reconciler records a reason after every pass.
  4. 04Metrics and logs stay on the node. Queries fan out to the agents.

Integrations

Works with the stack you already run.

Git hosts, databases, DNS, alerts, cloud accounts and AI assistants plug in without a plugin marketplace. Each one is documented, and the beta ones say so.

  • Git hosts and images

    Stable
    • GitHub
    • GitLab
    • Bitbucket
    • Gitea
    • Docker

    Push to deploy from GitHub, GitLab, Bitbucket or Gitea, or deploy an image straight from a registry.

    Git integrations
  • Databases and storage

    Mixed
    • PostgreSQL
    • MySQL
    • MongoDB
    • Redis
    • Amazon S3

    Postgres is stable. MySQL, MariaDB and MongoDB are beta. Backups go to S3 compatible storage.

    Backups and storage
  • Cloud providers

    Beta
    • Hetzner
    • DigitalOcean
    • AWS
    • Google Cloud
    • Azure

    Onboard servers from your own cloud account. Most provider paths are tested against fakes so far.

    Cloud onboarding
  • Ingress and DNS

    Stable
    • Caddy
    • Cloudflare
    • WireGuard

    Caddy is embedded for TLS and routing, Cloudflare handles DNS and wildcard certificates, and a WireGuard mesh joins nodes (beta).

    Domains and ingress
  • Alerts

    Stable
    • Slack
    • Discord
    • Telegram

    Notification channels for Slack, Discord and Telegram, plus webhooks and email, with credentials stored encrypted.

    How secrets are stored
  • AI assistants (MCP)

    Beta
    • Claude
    • Cursor
    • Copilot
    • Windsurf

    Any MCP client can connect with a scoped token, such as Claude, Cursor, Copilot or Windsurf.

    Connect an assistant
  • CI and automation

    Stable
    • GitHub Actions
    • Jenkins
    • CircleCI

    Trigger deploys from any pipeline with the CLI and API tokens, from GitHub Actions, Jenkins or CircleCI.

    Deploy from CI

Product names and logos belong to their owners and are used for identification only.

Open source

Apache 2.0. One edition. Nothing behind a plan.

No license key. Everything below ships in the same binary, free.

assistant over MCP (illustrative)
> why did the last deploy of web fail?explain_failed_deploy app=web# structured failure, last good deploy compared, a cause and a fix> roll it back# held for your approval: a write needs confirmation

Beta

Operate it from an assistant.

An MCP server exposes Levelrail to your assistant with the same permissions as the person asking: over 240 tools in on-demand toolsets, with read-only and standard modes.

The assistant never holds a standing credential, and writes need confirmation. AI is never in the reconciliation path: the deterministic reconciler does the work, the assistant only reads and suggests.

The network

Seven layers of network. Levelrail runs three.

  • L7Ingress and TLS through embedded Caddy, with HTTP load balancing and a request firewall.
  • L4Partly: one outbound mTLS link per node and an optional host firewall. No TCP load balancing.
  • L3A WireGuard mesh (beta), private networks and mesh DNS names.
  1. L7 Application Levelrail Ingress, TLS, HTTP balancing, firewall
  2. L6 Presentation Yours Encodings and compression, inside your app
  3. L5 Session Yours User sessions, inside your app
  4. L4 Transport Partly Agent link (mTLS), host firewall (ufw) No TCP balancing yet
  5. L3 Network Levelrail WireGuard mesh (beta), private networks, mesh DNS
  6. L2 Data link Yours Switches and VLANs, your host or provider
  7. L1 Physical Yours Cards, cables, power, your hardware

Questions people ask first.

Is it Levelrail or Level Rail?

Levelrail, one word. People often search for it as "Level Rail" or "LevelRail", and all of those mean the same open source, self-hosted deployment platform at levelrail.com, not a railway product.

What is Levelrail?

A self-hosted platform that turns one or more Linux servers into a private cloud. Point it at a git repository or a Docker image and it builds, deploys, and keeps the app running, with TLS, logs, metrics, and rollback. The control plane and the node agent are each a single Go binary, and Docker is the only container runtime.

How is this different from Coolify or Railway?

Most self-hosted platforms in this category, Coolify included, manage remote servers by SSHing in and running docker CLI commands, then parsing the text output. Levelrail's agent dials out over mTLS and talks to the Docker Engine API directly, nothing shells out to the docker CLI, and a level-triggered reconciler replaces polling loops. Railway is a managed cloud you don't control, while Levelrail runs on servers you own. The comparison page covers where the other projects are the better choice.

Do I need to know Kubernetes?

No. Levelrail is not a Kubernetes alternative: there is no scheduler with bin-packing or autoscaling, no CRDs, and nothing to learn beyond apps, domains, and databases. It is built for running 3 to 50 services on 1 to 10 machines without operating a cluster.

Is it free?

Yes. Levelrail is Apache 2.0 licensed with one edition: no license key and no feature gated behind a plan. OAuth sign-in, two-factor authentication, audit logging, resource-scoped IAM, and scheduled backups all ship in the same binary for everyone. SAML and SCIM are not supported yet.

Is it ready for production?

A single node is the well-tested path. APIs, the app spec format, and the on-disk layout can change between releases on the way to 1.0. A single node is the well-tested path, and the feature status page labels every area as stable, beta, or behind a flag, with the evidence for each.

Can I run it on a single server?

Yes, and that is the default. On one server the control plane runs the node agent in the same process and talks to it through an in-process transport, so there is nothing extra to install. The same code path serves one node or ten.

What happens if a deploy fails?

With the default blue-green strategy, and with rolling, traffic only moves to the new container once its readiness probe passes, not once the process merely starts. If the probe never passes, the old container keeps serving and the deploy fails with a specific reason such as OOMKilledDuringReadiness. The recreate strategy stops the old container before starting the new one, so expect a short gap. Prior images stay pinned, so garbage collection cannot remove a rollback target.

Does it support multiple servers?

Yes, and it is in beta. A second server joins with a one-time token and gets its own client certificate. Every agent dials out to the control plane, so managed servers need no inbound ports. You can cordon and drain nodes and pin apps to them. The WireGuard mesh and cross-host service DNS are the least verified part of this area.

Is there an AI or MCP integration?

Yes, in beta. An MCP server exposes up to 186 tools (145 in read-only mode) over the same HTTP API and permission model the dashboard uses, so an AI client can list apps, read logs, get metrics, diagnose a failed deploy, trigger a deploy, or roll back. A token limited to fewer abilities gets the same 403 the REST API returns. AI is never part of the reconciliation path.

Run it on a server today.

One command on a Linux box, then a setup wizard. About ten minutes to your first deployed app.

curl -fsSL https://levelrail.com/install.sh | sudo sh

Levelrail is Apache 2.0 licensed, with one edition and nothing behind a plan. What is open, and what is not here yet.

  1. Run the installerIt checks the host, installs Docker if needed and verifies the release checksum.
  2. Open the setup linkA one-time token creates the first admin. Nothing to configure first.
  3. Deploy your first appA sample, a template or your own repository, with TLS and logs from the start.
your server
curl -fsSL https://levelrail.com/install.sh | sudo shchecking host, docker and portsrelease downloaded, checksum verifiedlevelrail service starteddashboard URL printed, on your server at port 8080one-time setup link printed, keep master.key safe