Why Levelrail

Why Levelrail

Turn any mix of Linux servers into one private cloud, run from one control plane. Push to git and get a running app with TLS, logs, metrics and rollback.

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

The problem

Self-hosting a deploy platform usually means one of two things. Either the control plane SSHes into every server and shells out docker commands, then parses the text that comes back, which is slow, polls constantly and breaks in subtle ways. Or you adopt an orchestrator built for far larger teams than yours.

Observability is the second gap. Metrics and logs are usually bolted on afterwards by installing a monitoring stack, so the first time you need to know why an app was slow last Tuesday, you discover you never set it up.

How it is different

  1. Agents dial out, nothing shells inEach server runs a small agent that connects out to the control plane over mutual TLS and talks to Docker through its Engine API. There are no inbound ports and no SSH keys on managed servers, and no parsing of docker CLI text.
  2. A reconciler, not a scriptDesired state lives in the database. A level-triggered reconciler compares it with what Docker reports on every pass, converges the difference and records a status condition with a reason. If the control plane restarts mid-change, the next pass finishes the job.
  3. Deploys wait for healthA new container takes traffic only after its readiness probe passes. The previous images stay pinned, so the rollback target is not garbage collected before you need it. This is proven on a single node; multi-node failover is not yet measured.
  4. Observability in the coreMetrics at 15 second resolution and searchable logs are stored on the node that produced them and queried on demand. A crashing app surfaces its last log lines automatically. There is no separate Grafana or log shipper to install.
  5. One edition, one binary eachThe control plane and the agent are each a single Go binary. State is SQLite in WAL mode and ingress is an embedded Caddy. The license is Apache 2.0 with no key and no paid tier.

The architecture page and the written decisions behind it go deeper, and networking shows which layers it runs.

Who it is for

  • You run your own servers (a VPS, a home server, a cloud VM) and want git-driven deploys, TLS, logs, metrics and rollback without assembling them yourself.
  • You are leaving Coolify, Dokploy or CapRover and want an agent model with a read-only importer and a dry run.
  • You are leaving a hosted platform because of per-seat or usage pricing, and your apps are containers.

Who it is not for

  • You need a global edge network, an edge runtime, ISR or built-in image optimization. Those are not provided.
  • You want someone else to run the servers. There is no hosted offering, and you are the one on call.
  • You need a Kubernetes replacement with a bin-packing scheduler and CRDs.
  • You want to resell hosting with billing and metering.

Honest limits

  • Pre-release: no stable release; APIs, the app spec and the on-disk layout can change between betas.
  • A single node is the well-tested path; multi-node is in beta and the WireGuard mesh is not battle-tested.
  • Load balancing is HTTP only; there is no TCP (layer 4) balancing yet.
  • Private networks gate DNS name resolution, they are not a packet filter.
  • Not a Kubernetes replacement: no bin-packing scheduler and no CRDs; autoscaling is beta.
  • No hosted offering: it runs on servers you own.

Automatic HTTPS defaults to an internal certificate until you enable public ACME (Let's Encrypt) in settings. A native git push remote and GitLab and Bitbucket previews are beta. Feature status shows the evidence behind every label.

Questions

What makes Levelrail different from Coolify and Dokploy?

Levelrail drives servers through an agent that dials out and calls the Docker Engine API, instead of connecting in over SSH or running Docker Swarm. Observability and rollback with pinned images are part of the core. The comparison pages cover where each project is ahead.

Is Levelrail production ready?

It is pre-release. A single node is the well-tested path and multi-node is in beta. Run it next to your current platform until a shadow run is clean, and read the feature status page for what is stable.

Why the name Levelrail?

The reconciler is level-triggered: it compares the level it wants with the level it sees on every pass, instead of reacting to individual events. The name is that idea.

Next