š 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)