back to projects
in-progress· ongoing

pgShepherd

Postgres migration and observability CLI

RustPostgresTypeScriptSQLite

Why I built this

Existing migration tools are either too magic (Prisma) or too manual (raw SQL). I wanted something that respects DBA-level rigor while staying ergonomic.

The problem

Schema changes in production are still scary in 2026. Tools should make the safe path the easy path.

target users: Backend engineers running their own Postgres.

Core features

  • Dependency-aware migration graph
  • Online schema changes (pg-style)
  • Query plan diffing across migrations
  • Local replay against production schema dump

Technical challenges

  • Detecting locking migrations statically
  • Parsing Postgres's protocol-level errors into actionable messages

Engineering decisions

Why Rust

Distributed as a single static binary. No runtime dependency for the install path.

Lessons learned

  • Postgres's catalog is more usable than people think — most 'magic' can be replaced with a good catalog query.