
I built NeonD — an open-source, self-hosted control plane for PostgreSQL inspired by Neon. It gives you branching, point-in-time recovery, and S3-backed durability, all running from a single Docker container on dedicated server.
title: I built a self-hosted PostgreSQL Control Plane that runs on single Docker container published: true description: I built NeonD — an open-source, self-hosted control plane for PostgreSQL inspired by Neon. It gives you branching, point-in-time recovery, and S3-backed durability, all running from a single Docker container on dedicated server. tags: database, postgres, postgresql, selfhosted cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e9m34bvs9lod7p9wk6mn.png
Every time I spin up a new side project, I hit the same wall with Postgres:
postgres:latest in Docker is fine until you want a throwaway copy of prod to reproduce a bug, or a preview environment per PR.I wanted the developer experience of Neon — instant branches, a nice UI, one connection string per branch — on a $10 Hetzner box. That gap is what NeonD tries to fill.
NeonD is a control plane that sits on top of the open-source neondatabase/neon storage engine. The Neon team open-sourced the hard parts (pageserver, safekeeper, compute); NeonD wraps them into something you can deploy in five minutes.
{instance-slug}.yourcompany.comMigration between servers is docker compose down, rsync one directory, docker compose up on the new box. That's it.

I want to be very upfront: NeonD is not for mission-critical production. The architecture is intentionally tightly coupled — one container, one server, one point of failure. There's no HA, no automated failover, no multi-region story. If you're running a bank, use RDS. If you're running a side project, a staging cluster, a preview-environment farm, or an early-stage startup where velocity matters more than five nines — that's the sweet spot.
Deployment is a docker-compose.yaml:
services:
neond:
image: neond/neond:latest
environment:
PORT: 3000
SERVER_SECRET: "SuperSecret" # you should change this
PORT_RANGE: 50000-50010
ports:
- "3000:3000"
- "50000-50010:50000-50010"
restart: unless-stopped
volumes:
- ./neond_data:/neond
Then:
Total time from docker compose up to querying a branched database: under five minutes.
This is an early project (17 stars as I write this, hi!) and there are plenty of rough edges. Things I'd especially appreciate eyes on:
Repo: github.com/matisiekpl/neond
Huge credit to the Neon team for open-sourcing the storage engine. NeonD is a thin control plane on top of their work — none of this would exist without what they've built.
gemmaI ported the whole Gemma-4 family — E2B, E4B, 12B, 31B, and the 26B-A4B MoE — to run on...
communityHey DEV, I'm Tobore. Let's actually connect. I've been on here for a while now, mostly writing and...
ai(yep, kinda clickbait, just for the funsies 😊) At the beginning of the year, I relaunched my...
aiMy laptop was sitting idle with the fan at full tilt. Nothing was running that I knew of. The culprit...
githubactionsI Built a Thing! TL;DR — Google Gemini-based Pull Request reviews and Issue Triaging for...
aiI've been hearing the word "harness" thrown around a lot lately. I assumed it just meant "the IDE" or...
Workflows from the Neura Market marketplace related to this Midjourney resource