Skip to main content
The audiences below come straight from the project’s own stated scope: the README describes Levelrail as built for 3 to 50 services across 1 to 10 machines, explicitly not a Kubernetes competitor, and comparison.md frames the project the same way: an agent-based control plane with built-in observability, for someone who does not want to run Kubernetes to get there. The three groups below are the ones that framing describes.

How to read this page

  • Every feature named below links to the doc page that covers it, and every maturity claim matches the label in feature status. Some areas are stable (backed by a live end-to-end test) and others are beta or behind a flag. “It fits” means the feature exists and is tested, not that it has survived production load.
  • Levelrail has no stable release yet. There is no stable image tag yet: :latest does not move, and prereleases publish as :beta. APIs, the app spec format, and the on-disk layout can still change without notice. None of the three audiences below should put a revenue-critical workload on it without a shadow run alongside whatever they use today, the same caution migrating-from-vercel.md gives explicitly.
  • Where a claim is uncertain, this page says so, the same convention comparison.md uses.

Solo developers and indie founders running their own stack

What this group is likely trying to do

Run a handful of side projects or a small product on a VPS or two, without paying per-service platform fees and without hand-rolling a deploy script every time something new needs HTTPS and a database.

Where Levelrail fits

  • One binary, single node. The control plane and the agent can run in the same process over an in-memory transport (architecture.md), so there is nothing extra to install for a one-server setup. It is also the best-tested path: per the README status section, “single node is the well-tested path.”
  • Push to deploy, with a real health gate. A new container only takes traffic after its readiness probe passes, not just after the process starts. The previous N images stay pinned, so a rollback target is never garbage collected before you need it (see comparison.md).
  • TLS, metrics, and logs without installing anything else. Caddy is embedded for automatic certificates, and every node keeps its own metrics (15 second resolution) and full-text-searchable logs out of the box (architecture.md). You don’t need a separate Grafana or log shipper to see why something was slow.
  • A template catalog. Postgres, Redis, and about 300 other one-click services are there for the database or tool a side project needs (templates-and-registry.md).
  • Nothing paywalled. OAuth sign-in, two-factor auth, audit logging, and scheduled backups with retention all ship in the same Apache 2.0 binary (comparison.md), so a project that grows past “just me” doesn’t hit a feature wall.

What to know before you rely on it

  • The measured idle footprint (58 to 96 MB RSS from 0 to 500 apps, performance.md) is from a macOS dev build on one developer’s machine, not a Linux release binary. Expect different numbers on your actual VPS, and no containers were running in that benchmark.
  • TLS defaults to an internal, self-signed issuer. The public ACME issuer has one recorded live run against Let’s Encrypt on a public VPS, but renewal and DNS-01 wildcards are not yet verified (architecture.md, acme-verification-runbook.md). If your side project needs a browser-trusted cert today, test that path yourself before depending on it.
  • Maturity varies by feature, per feature-status.md. Deploy approvals, IAM, PITR and database backups for Postgres, pipelines, deploy freeze and GitHub-based previews are labeled stable; load balancing, platform-as-code, the in-app AI chat, AI models and Cloudflare Tunnel are hide-behind-flag and stay off unless you enable them with APP_EXPERIMENTAL.

Small agencies and freelancers running several clients’ apps

What this group is likely trying to do

Operate a handful of client projects on infrastructure the agency controls (not a reseller platform with its own billing), give a client or contractor scoped access to only their own app, and keep a record of who deployed what.

Where Levelrail fits

  • Scoped access without a full RBAC build-out. IAM policies are Allow/Deny statements scoped to app:name, database:name, or *, on top of three role presets (admin, operator, viewer), so a contractor’s token can be restricted to exactly one client’s app (identity-and-access.md). An explicit Deny always wins, even over root.
  • A queryable audit log. Every mutating and sensitive request is recorded with actor, ability, method, path, and caller surface (CLI, dashboard, MCP, or API), exportable as CSV (comparison.md). An agency can use it to show a client what changed and who did it.
  • Organizational labels for grouping client work. Projects, organizations, and environments group apps and databases and layer shared env vars, though per projects-and-organizations.md these are plain organizational labels today: no per-project membership or permissions yet, since that layer is carried by IAM policies instead.
  • A read-only importer for onboarding an existing client. Moving a client off Coolify, Dokploy, or CapRover runs a dry run first and only issues GET requests against the source (migrating-from-coolify-dokploy-and-caprover.md).
  • Dedicated per-client nodes if you outgrow one box. Cloud node provisioning covers five providers (Hetzner, DigitalOcean, AWS, Azure, GCP), so a client that needs isolation can get its own node (node-provisioning.md, multi-cloud-provisioning.md).

What to know before you rely on it

  • IAM is labeled stable: a live end-to-end test shows a Deny policy blocking a real action and a token allow policy scoping one (feature-status.md). Policy enforcement is wired into specific app and database routes, so still verify a client’s scoped token cannot touch another client’s app before trusting that boundary.
  • Multi-node enrollment (cordon, drain, container relocation) has been verified locally across two real Docker daemons, but the WireGuard mesh itself and the cross-host remote transport remain unverified, and this has not been run across a real WAN or a second physical host (feature-status.md). If “a client’s node is in a different datacenter” is part of the plan, treat that as the least-proven part of the setup.
  • There is no billing, metering, or customer-facing subscription layer. This is infrastructure the agency operates for its own clients, not a platform for reselling hosting with its own payment flow.
  • There are no teams or org-level membership rules yet; access control runs entirely through IAM policies and roles on individual users and tokens, not through a team hierarchy.

Teams moving off Coolify, Dokploy, Heroku, or Vercel

What this group is likely trying to do

Already run on one of those platforms, and want more control over how servers are driven, or hit a limitation (SSH-based management, a paywalled feature, a managed-cloud pricing model) that Levelrail’s architecture avoids.

Where Levelrail fits

  • A documented importer for Coolify, Dokploy, and CapRover. It reads the source platform’s own API, supports a dry run that reports what would be created without creating anything, and is read-only against the source (migrating-from-coolify-dokploy-and-caprover.md).
  • A concept-mapping runbook for Vercel. There is no importer for Vercel. migrating-from-vercel.md is a manual runbook with an inventory step, a Vercel-to-Levelrail concept table, and named gaps (Edge runtime has no equivalent, for example).
  • The architectural reasons to move, laid out without ranking the competition: an agent that dials out over mTLS instead of SSH or Docker Swarm, a level-triggered reconciler instead of an imperative script, metrics and logs built into the core instead of a bolt-on, and rollback images pinned against garbage collection (comparison.md).
  • An MCP server for AI tooling, if that is part of why Heroku or Vercel’s own AI integrations feel limited. The same HTTP API surface is exposed to AI agents, and AI is never in the reconcile path (comparison.md, labeled beta, 118 to 156 tools depending on mode, in feature-status.md).

What to know before you rely on it

  • Heroku has no dedicated migration runbook. Only Coolify/Dokploy/CapRover (importer-backed) and Vercel (manual runbook) are covered. Heroku alternative gives the overview, and a move means working from the general architecture and app spec reference docs.
  • Template catalogs differ between platforms. Levelrail ships 311, and only a sample is deployed by its end-to-end tests, so check that the services you need exist and boot (see templates-and-registry.md and feature-status.md).
  • docs/migrating-from-vercel.md itself warns to run the new deployment in parallel and keep the old platform as the rollback path until a shadow run is clean, specifically because there is no stable release yet and public ACME renewal is unverified. That caution applies to anyone moving off any existing platform, not just Vercel.
  • Preview environments are stable for GitHub but beta for GitLab and Bitbucket (feature-status.md), so a team that lives on GitLab should expect rougher edges there than a GitHub-based team would.

Questions that come up across all three groups

Can I use this to resell hosting to my own customers, with billing? No. There is no billing, metering, or subscription layer anywhere in this codebase. IAM policies can scope a customer’s access to their own app, but charging them is outside this project’s scope. Is this ready to replace my production Heroku/Vercel/Coolify setup today? Not without caution. There is no stable release yet (README status section), and the recommended path, explicit in migrating-from-vercel.md, is to run Levelrail alongside your existing platform until a shadow run is clean. Do I need to run more than one server? No. Single node is the default and the best-tested path. You add a second node when one box runs out of room, not from day one (multi-node.md). What if I only half fit one of these three groups? That is fine. These are the audiences the project’s own non-goals point at, not a rigid segmentation. Read architecture.md and feature-status.md directly and decide which parts apply to your actual setup.

See also

Last modified on October 12, 2026