
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.
aiMost of us have seen a coding agent fail to complete a task we know it can do. We just don't...
googlecloudWhen building Generative AI applications, developers often encounter a massive bottleneck: sequential...
discussI’ve been thinking about sharing some electronic circuit posts on Dev.to — small circuits, DIY...
agentsWhat nobody tells you about exporting your multi-agent prototype to a local workspace. Every...
agenticarchitectAutonomous agents are genuinely good at answering messy business questions. Give one an LLM and a set...
aiPR volume went up, ticket quality didn't, and the gap got filled with LLMs on both sides of the review: bots reviewing, bots replying, bots occasionally arguing with bots about priorities that only existed in a teammate's head. Our CEO named the actual problem, and it's bigger than code review.
Workflows from the Neura Market marketplace related to this Stable Diffusion resource