A request already in flight stays with the version that took it.
When traffic moves to v4, v3 drains rather than stops. A slow request that started on v3 finishes on v3. Only new requests go to v4.
■ Self-hosted · one binary · open for testing
Basecove is a single Go binary for your own server. It builds your app, health-checks it while the current version keeps serving, moves traffic only once the new one passes, provisions its database and watches every route it serves.
How it works
A deploy runs as copy, install, build, health check, switch, drain. The test suite starts real processes against the real proxy and checks both of these through the edge. It doesn't just read a status column.
When traffic moves to v4, v3 drains rather than stops. A slow request that started on v3 finishes on v3. Only new requests go to v4.
A build error, a crash on boot or a health path that won't return 200: any of them stops the deploy before traffic moves. The current version never stops serving.
What's in the binary
git push and a live, watched URL.deploy
A Dockerfile runs as a container. A package.json with a start script runs natively. A built Vite, React, Astro or plain HTML site is served directly, with no server process.
detect → install → build → start
gate
Deploy with a gate and the new version waits at "healthy, no traffic" until you route or discard it. Roll back to any earlier release through the same health check.
healthy → [you] → live
route
An embedded Caddy routes by hostname and gets Let's Encrypt certificates for every app, including the dashboard's own admin hostname. An app can answer on up to 10 more, such as admin., or send www to its domain.
www.shop.example.com → shop.example.com
data
Postgres, MySQL or Redis, provisioned with generated credentials and injected as DATABASE_URL. Or attach a managed one by connection string.
DATABASE_URL=postgres://…
watch
Basecove deployed the app, so it already knows what to probe. It checks health, tracks per-route errors from real traffic and certificate expiry, and alerts Slack, Discord, Teams or any webhook.
GET /checkout · 5xx 0.0%
git
Point an app at a repository and pick a branch. A GitHub App covers private repos without a stored token, and a push to the branch you choose starts a deploy. A pushed deploy waits at the gate for you, or goes live once its GitHub Actions tests pass.
push main → v12 gated
Spec sheet
No control plane and no agent phoning home. Basecove's own servers have no inbound access to your machine. The daemon, the proxy, the dashboard and the state database all ship as one statically linked file.
Install
You need a Linux server with ports 80 and 443 open, and DNS records for your app's hostname and an admin hostname pointing at it. The full walkthrough covers each step.
$ curl -fLO https://basecove.name.ng/download/basecove-linux-amd64.tar.gz $ curl -fLO https://basecove.name.ng/download/SHA256SUMS $ sha256sum -c --ignore-missing SHA256SUMS
$ tar xzf basecove-linux-amd64.tar.gz && cd basecove $ ./install.sh --binary ./basecove \ --host example.com --admin-host admin.example.com
$ sudo -u basecove basecove user add you -role admin \ -data /var/lib/basecove # then open https://admin.example.com
On an ARM server, use basecove-linux-arm64.tar.gz.
Basecove runs real apps on a real server today, and we want testers to find what breaks. These are the edges we already know about.
All known limits →