Open source, self-hosted, MIT

Your database is a universe.

Fly through every table and relationship as a living map, then query it with SQL that knows your foreign keys.

Get DBZuper

See the shape of your data before you read a single row.

Tables become stars, sized by row count. Foreign keys become light. Related tables gather into coloured clusters, so a 400-table schema reads like a map instead of a list. Hover or tap a star: each one is a table from a sample shop.

  • Declared and inferred relationships, from *_id naming
  • Layouts saved per connection; drag a table to pin it
  • Stays smooth on 2,000-table schemas

Zoom is semantic. The closer you get, the more it tells you.

Cluster names fade into table names. Hover one to light up its neighbours, double-click to focus on a neighbourhood, Ctrl K to jump anywhere.

Right down to the columns.

Up close, every table opens into a column card: keys, types, references. One more click and you're in its data, its structure, or a SQL tab with the query already written.

Try the path finder

Universe, data and SQL. One window.

DBZuper showing the Schema Universe graph, a filtered orders table and the SQL editor suggesting a foreign-key JOIN

Only in DBZuper

Pick two tables. Get the JOIN.

How does a customer connect to a warehouse? DBZuper walks the relationship graph, shows you the shortest chain, and writes the JOIN for you, inferred hops included.

Click a start table, then an end table.

shop · PostgreSQLFind path to…
Ready-to-copy JOIN

          

Only in DBZuper

Follow one row wherever it leads.

Every record is a card with a port per relationship. Click a port and the related rows appear next to it. The whole trail lives in the URL, so you can paste it to a teammate, or turn it into SQL.

dbzuper.local/c/shop/records?r=

Try it: open orders, then an order's order_items, then the product. Dashed ports are inferred relationships.

And when you need rows, a real grid.

Filter, sort and page any table. It all runs in the database, not in your browser, and one click turns the view into SQL.

orders table

      

Click a header to sort, add a filter, or click a customer_id to follow the foreign key. Sample data.

Autocomplete for JOINs. A safety net for DELETE.

Monaco with schema-aware autocompletion that suggests whole foreign-key JOINs. And a safety net that makes you mean it before anything destructive runs.

RunRun allExplain
orders.sql

            
          
#1 SELECT4 rows · 3 ms
namestatustotal
Mira Okafordelivered128.40
Lucas Moreaushipped64.00
Hana Satopaid212.90
Tomás Ribeirodelivered39.99

JOINs from foreign keys

Type the start of a table name after JOIN and the relationship comes with it.


          

Type it back to break it

Every write needs a confirm click. DELETE without WHERE, DROP and TRUNCATE need the target typed back. Read-only connections are enforced by the database itself.

Most clients give you a tree and a grid.

Trees and grids are great for precise edits, and DBZuper has them too. It just doesn't stop there.

You want to… The usual tree & grid DBZuper
Understand a schema you've never seenExpand 200 folders, one at a timeFly over it: clusters, tables, then columns
Find relationships nobody declaredHope someone added the foreign keysInferred from *_id naming, drawn dashed
Connect two distant tablesSketch it on paper, write the JOINs by handFind path to… and copy the JOIN
Chase one customer through the dataFive tabs, five WHERE clausesClick ports; share the trail as a URL
Write a JOINAutocomplete the table nameAutocomplete the whole ON clause
Avoid a 3 a.m. DELETE"Are you sure?" → EnterType the table back; read-only enforced by the server
Give your team accessInstall a desktop app on every laptopOne Docker image in a browser tab

And everything you'd expect.

Keyboard-first

One palette for tables, columns, records (users 42) and actions.

Server-level connections

Leave the database empty and browse every database on the server.

MySQLMariaDBPostgreSQLSQLite

Four engines, one workspace

Timeouts, read-only and case-insensitive filters handled per engine.

Four themes × light and dark

Classic, Layered, Graphite and Radar. Dark by default, obviously.

History that keeps secrets

Per connection and global. Passwords in SQL are redacted before they're stored.

Yours, on your server

No external services at runtime. Credentials encrypted at rest. amd64 and arm64. MIT licensed.

Some tables are bigger than others.

DBZuper is serious about your data and not very serious about itself. Hover or tap a huge table in the Universe and you'll see what we mean. Pin seven tables and something happens.

Pin them all. 0 / 7

order_items · row count

0

It's over 9,000!

Running in one command.

  1. Run the image. One container, no external services.
  2. Read the setup code from the log, so nobody else can claim your fresh install.
  3. Click "Try it with demo data", or connect your own database.
$ docker run -d --name dbzuper -p 8080:8080 \
    --add-host=host.docker.internal:host-gateway \
    -v dbzuper-storage:/app/storage \
    -v dbzuper-sqlite:/data/sqlite \
    ghcr.io/dbzuper/dbzuper:latest

$ docker logs dbzuper 2>&1 | grep "setup code"
  Setup code: ZUPR-7Q4K-M2XD

# open http://localhost:8080

One workspace. Every database.

psst. type make a wish anywhere on this page, or .