Skip to main content
A deploy link lets a project author add a button to a README. A visitor who clicks it picks their own server (remembered in their browser) and lands on that server’s create-app form with the details filled in. Nothing is created until the visitor reviews the form and presses Deploy.

URL scheme

Rules the form enforces:
  • Env values are never accepted from a link, only the names. The visitor types each value, and it is stored as a secret.
  • A parameter that fails validation is ignored, and a banner names every ignored parameter. Unknown parameters are ignored the same way.
  • The form shows “Prefilled from a link: review before deploying” and names the source host when source is valid.
  • If the link has no valid image, the regular new app wizard opens with the banner above it.

Launcher page

Most READMEs should link to the launcher, because the author does not know the visitor’s server:
The launcher is a static page with a small script. It asks for the visitor’s server address once, stores it in localStorage in that browser only, validates that it is an http or https address without a username or password, then redirects to <server>/apps/new?deploy=1&... carrying the same parameters. It makes no external requests and has no tracking. It does not add deploy=1 to the link you write, the launcher does that.

Badge

The badge is a flat SVG that reads on light and dark backgrounds:
Markdown for a README, using a real public image (traefik/whoami, port 80, health path /health):
Percent-encode : / and , inside parameter values as shown. For a project that needs secrets, add env=API_KEY,DATABASE_URL.
It validates the same rules as the form and prints the launcher link and the README Markdown. Add --server https://levelrail.example.com to also print the direct link for one specific server, or --launcher URL to point at a self-hosted copy of the launcher. See the CLI reference.

Self-hosting the launcher

deploy.html and deploy.js are plain static files under docs/public. Copy both, plus badges/, to any static host and pass that host to --launcher.
Last modified on October 12, 2026