r/sqlite • u/cevheribozoglan • 3d ago
Self-hosted browser GUI for SQLite, Postgres, Mongo, Redis, ClickHouse, Druid... now on their official tool lists
Affiliation: I’m the maintainer of LibreDB Studio.
Most of the GUI conversation here is Postgres which is fair, but a lot of us also keep Redis, ClickHouse, or Druid in the same week.
I was tired of bouncing between desktop clients and per-engine admin UIs, so I built a self-hosted browser editor that talks to all of them from one place (plus MySQL, Oracle, SQL Server, MongoDB, Cassandra, Elasticsearch and more...).
Not claiming to replace DBeaver/DataGrip. Different access model: it deploys next to the data(kubernetes), not onto every laptop.
Third-party listing, for context:
• PostgreSQL project news + clients catalogue
• Also in official Redis, ClickHouse, and Apache Druid tool docs
MIT, Docker/Helm/ `npx "@libredb/studio"`. Quick path: `docker run -p 3000:3000 libredb/libredb-studio`
2
2d ago
[removed] — view removed comment
1
u/cevheribozoglan 2d ago
That's the intended team path: Studio sits in the cluster, people auth to the UI (OIDC or local JWT), and the database only sees Studio.
Two different "sessions":
- Browser: one JWT cookie per person. No cap on how many can be logged in.
- Database: one pool per connection.id in the Node process, shared by everyone using that connection. Postgres defaults to min 2 / max 10, 30s idle, 60s acquire, 60s statement_timeout. Idle providers drop after 30 minutes. Redis is a single lazy connection, not a pool.
So if you seed a managed "prod-postgres" that every dev sees, ten people share one pool of 10. That's the "nobody gets a laptop tunnel" model. If each person saves their own connection record, each id gets its own pool of 10, and it multiplies.
The other budget is HTTP, not Postgres: 120 query-bucket requests / 60s, keyed on username, per process. Helm defaults to replicaCount: 1; a second replica is a second cache and a second set of pools against the same database.
We don't hide write buttons per user or enqueue queries across the team. The database sees N multiplexed clients from Studio, not N DBeaver processes.
For your team, is the shared pool the feature (Studio as the only client), or do you need a hard cap per person on top of that?
1
u/cevheribozoglan 2d ago
Worth being precise about what that shared "connection" actually is, because it isn't a Postgres pool on every engine:
- SQLite: no pool. One file handle. WAL can take another reader in-process; there is no connectionLimit to turn.
- libSQL / Turso: no pool and no held session. Each statement is one HTTP POST to sqld / Turso Cloud (Hrana /v2/pipeline). Ten people querying is ten requests, not ten checkouts.
- DuckDB / embedded LibreDB: singleWriterFile. A second open of the same file is refused, including read-only.
- Postgres / MySQL: real pool, min 2 / max 10.
- MongoDB: the driver's MongoClient pool, same min/max > maxPoolSize / minPoolSize.
- Redis: one lazy ioredis connection, not a pool.
- ClickHouse (and Couchbase): same HTTP shape as libSQL, one request per statement.
So a seeded Postgres that every dev sees is ten people sharing one pool of 10. A seeded Turso database is ten people sharing one HTTP client. If each person saves their own connection record, only the pooled engines multiply.
1
3
u/maekoos 3d ago
what does ”encrypted” even mean on your sign in page? And you seem to be using development keys in production…