đ The Problem
If you work with microservices in Kubernetes, you know the pain:
- Your app uses PostgreSQL for transactions, Redis for cache, Kafka for events, and MongoDB for documents.
- To debug a production issue, you open:
psql,redis-cli,kcat,mongosh, maybecurlfor Elasticsearch... - You copy-paste IDs between terminals. You forget which environment you're in. You accidentally run
DROPon staging.
I've been there. So I built Panopticum â a lightweight, self-hosted web UI that lets you browse, query, and edit data across 11+ database types from a single interface. No Electron, no heavy desktop app, no CDN dependencies.
đ ī¸ Why Another Database Tool?
Existing tools are great, but they didn't fit my workflow:
| Tool | Gap I Felt |
|---|---|
| DBeaver / DataGrip | Desktop-only, heavy, per-connection setup |
| Adminer / phpMyAdmin | Web-based, but single-DB-type, PHP stack |
| pgAdmin / Mongo Express | Excellent for one DB, but I needed many |
| Custom internal tools | Took weeks to build; not reusable |
I wanted something that could be:
â
Deployed in one command to any K8s cluster
â
Secure by default (HTTP Basic + env vars)
â
Fully offline / air-gapped (no external CDNs)
â
Extendable via REST API
â
Simple enough for QA engineers, powerful enough for devs
So I built it with Micronaut 4, HTMX, and Thymeleaf â and open-sourced it.
đ Quick Start
# Run locally
./gradlew run
# Or with Docker
docker run -d --name panopticum \
-p 8080:8080 \
-v panopticum-data:/data \
-e PANOPTICUM_USER=admin \
-e PANOPTICUM_PASSWORD=changeme \
ghcr.io/thesharque/panopticum:latest
Open http://localhost:8080 â and you're in.
đ Supported Databases (All in One Place)
| Type | Browse | Query | Edit Rows |
|---|---|---|---|
| PostgreSQL / CockroachDB / YugabyteDB | â | â SQL | â (by ctid) |
| MySQL / MariaDB | â | â SQL | â (with PK/unique) |
| MS SQL Server | â | â SQL | â (with PK/unique) |
| Oracle | â | â SQL | â (by ROWID) |
| MongoDB | â | â Query JSON | â |
| Redis / Dragonfly / Valkey | â | â | â (key/value) |
| ClickHouse | â | â SQL | â |
| Cassandra / ScyllaDB | â | â CQL | â (with PK) |
| RabbitMQ | â queues | â | â read-only |
| Kafka | â topics | â | â read-only |
| Elasticsearch / OpenSearch | â indices | â Query DSL | â
(by _id) |
đĄ All connections are stored in an embedded H2 database. Add/remove them via UI or bootstrap via
PANOPTICUM_CONNECTIONS_JSONenv var.
⨠Features That Made My Life Easier
đ Zero-Config Auth & Offline-First
- HTTP Basic Auth (credentials from env vars â easy with K8s Secrets)
- All frontend assets (HTMX, CodeMirror, Prism) bundled locally â no CDN, works in air-gapped clusters
- Light/dark theme, EN/RU localization
⥠HTMX for Snappy UX
No React, no build step for the frontend. Partial page updates via HTMX keep the UI responsive while keeping the codebase simple and maintainable.
<!-- Example: Load table rows without full reload -->
<div hx-get="/api/postgresql/connection-1/schema/public/table/users"
hx-trigger="load"
hx-target="#rows-container">
<div id="rows-container">Loading...</div>
</div>
đ Data Diff: Compare Records Across Environments
This is my favorite feature. Found a suspicious record in Prod?
- Click "Add to Compare" on any row detail page
- Switch to Stage or Dev connection
- Open the same logical record
- Click "Compare" â see side-by-side JSON/field diff
All stored in your browser's localStorage â no server roundtrip. Perfect for debugging environment drift.
đ Full REST API + Swagger
Every UI action has a corresponding API endpoint. Documented interactively at /swagger-ui:
# Execute SQL via API
curl -u admin:changeme http://localhost:8080/api/postgresql/conn-1/query \
-H "Content-Type: application/json" \
-d '{"sql": "SELECT id, email FROM users WHERE status = $1", "params": ["active"]}'
Great for automation, CI checks, or building custom dashboards.
đ§ Who Is This For?
- DevOps/SREs: Debug data issues in staging/prod without installing 5 CLI tools
- QA Engineers: Validate test data across services with a simple UI
- Backend Developers: Quick ad-hoc queries without leaving the browser
- Security Teams: Audit access via basic auth + logs; no external dependencies
đ Check it out, star, or open an issue:
https://github.com/theSharque/panopticum
đŦ Let's Chat
- What's your biggest pain point when debugging across multiple data stores?
- Would you use a tool like this in your workflow?
- Any databases you'd like to see added?
Drop a comment below â I read every one. đ
Top comments (0)