MidnightDocs

Overview#

Midnight is an open-source, self-hosted platform-as-a-service control plane written in Go. It is designed for a single trusted VM first: install it on a server you control, deploy an app, get it routed, and keep it running.

When something breaks, deployment records, logs, failure states and rollback are meant to make recovery understandable rather than mysterious. An embedded agent can drive deploys, roll back services, and diagnose failures.

Who it is for#

An operator running their own infrastructure who wants deployment workflow without handing the workload to a hosted provider. You need a Linux VM, Docker, Postgres and Traefik, and you are willing to operate them.

The target shape#

The single-server deployment assumes one disposable Linux VM running:

Component Role
Docker Engine Runtime scheduling and local image operations
Postgres Storage for the server and worker
Traefik Public HTTP or HTTPS routing through the file provider
Midnight package Six systemd units — server, worker, agent, buildkit, buildkit-worker, registry

What you actually do#

Three commands, run from inside your project directory:

midnight login
midnight link
midnight up

link writes .midnight/project.json, which travels with the repository, so the binding between a directory and a project, environment and service is shared rather than personal.

Status: MVP acceptance#

Midnight is in MVP acceptance. The control plane, package, migrations, dashboard, CLI and runtime wiring exist and can run the acceptance checklist, but Midnight is not MVP-complete until that checklist passes end to end on a fresh single trusted VM.

Important

Read the boundaries below before deciding what to run on it. They are current, deliberate, and stated by the project itself.

Boundaries#

Boundary What it means
Single trusted VM first The multihost scheduler is stubbed. Plan for one server
The reconciler is diff-only It computes differences; it does not act on everything it observes
Some endpoints return planning artefacts Certain demo and enterprise plan endpoints return a plan rather than performing a live action
Public HTTPS is not automatic Certificate issuance exists, but installed and public HTTPS still requires your Traefik state path and external DNS and ingress proof
No Cloudflare DNS connector Cloudflare is the planned first delegated-DNS provider. The general record connector is not implemented
No SLSA Build Level claimed The build pipeline produces SBOM and provenance artefacts. Midnight does not claim a SLSA Build Level or automatic publication of signed attestations
Releases are checksum-protected, not signed Standalone archives carry no detached signature. A checksum from the same location detects corruption, not a compromised release location
No Homebrew or Scoop Not configured; brew install and scoop install are not supported paths
Saving a variable does not deploy Desired state is stored; the workload is not restarted

Where to go next#