Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Guidance for Claude Code in this repo — conventions, rules, and gotchas only.

## Project Overview

Web-based SQL IDE for cloud-native teams: forty-one external engines, plus the embedded LibreDB store (`EXTERNAL_DATABASE_TYPES` in [`src/lib/db/compatibility.ts`](src/lib/db/compatibility.ts) is the external-engine list, never a prose enumeration), plus AI query assistance.
Web-based SQL IDE for cloud-native teams: forty-two external engines, plus the embedded LibreDB store (`EXTERNAL_DATABASE_TYPES` in [`src/lib/db/compatibility.ts`](src/lib/db/compatibility.ts) is the external-engine list, never a prose enumeration), plus AI query assistance.
It runs **two ways**, as a standalone Next.js app and as a published npm package, and the two render different chrome, so a UI change verified in one is not verified in the other.

## Branching & PRs
Expand Down Expand Up @@ -90,7 +90,7 @@ A clean local pass is still not a guarantee: the same job also runs `build:lib`
> - **Agent leg.** A type-id whose `AGENT_STATEMENT_LANGUAGE` row is non-null also keeps, in the same PR: Code: `src/lib/agent/languages/<statement-language>/engines/<type-id>.ts` plus its client row in `languages/<statement-language>/engines/client.ts` · Docs: the `Agent language pack` subsection of `docs/providers/<type-id>.md`, naming the statement-language family and every overlay member · Tests: `tests/unit/lib/agent/engine-docs.test.ts`, which holds that subsection to the overlay, plus the engine's cases in `engine-overlays.test.ts` and `engine-pack-contract.test.ts`.
> - Any change to one side MUST sync the others **in the same PR**. The doc mirrors the code and the code mirrors the doc — never let them drift.

- **DB abstraction:** Strategy Pattern. SQL-dialect providers extend `SQLBaseProvider`; the non-SQL ones (`mongodb`, `redis`, `couchbase`, `firestore`, `prometheus`, `influxdb`, `kafka`, `mqtt`, `etcd`, `oxia`, `milvus`, `qdrant`, `s3`, `kubernetes`, `rabbitmq`, `libredb`) extend `BaseDatabaseProvider` directly, `neo4j` extends `GraphBaseProvider` (`src/lib/db/graph/`), and `SQLBaseProvider` and `GraphBaseProvider` themselves extend it. Inside `src/lib/db`, never branch on the type id; drive behaviour through capabilities/labels. Outside the provider layer, a per-engine fact is a row of a contract registry, never a type-id branch: the `src/lib/db/connection-string/`, `src/lib/db/execution-ui/`, `src/lib/db/sql-grammar/`, `src/lib/db/migration-ddl/` and `src/lib/db/sql-writing/` rows are declared beside each provider, and `CONNECTION_FIELDS` and `SEED_ONLY_FIELDS` are central UI-free tables in `src/lib/db/connection-fields.ts`; `tests/unit/lib/no-engine-branches.test.ts` fails on any other type-id branch, and its debt list is empty, so a new branch is moved into a contract rather than listed.
- **DB abstraction:** Strategy Pattern. SQL-dialect providers extend `SQLBaseProvider`; the non-SQL ones (`mongodb`, `redis`, `couchbase`, `firestore`, `prometheus`, `influxdb`, `kafka`, `mqtt`, `etcd`, `oxia`, `milvus`, `qdrant`, `weaviate`, `s3`, `kubernetes`, `rabbitmq`, `libredb`) extend `BaseDatabaseProvider` directly, `neo4j` extends `GraphBaseProvider` (`src/lib/db/graph/`), and `SQLBaseProvider` and `GraphBaseProvider` themselves extend it. Inside `src/lib/db`, never branch on the type id; drive behaviour through capabilities/labels. Outside the provider layer, a per-engine fact is a row of a contract registry, never a type-id branch: the `src/lib/db/connection-string/`, `src/lib/db/execution-ui/`, `src/lib/db/sql-grammar/`, `src/lib/db/migration-ddl/` and `src/lib/db/sql-writing/` rows are declared beside each provider, and `CONNECTION_FIELDS` and `SEED_ONLY_FIELDS` are central UI-free tables in `src/lib/db/connection-fields.ts`; `tests/unit/lib/no-engine-branches.test.ts` fails on any other type-id branch, and its debt list is empty, so a new branch is moved into a contract rather than listed.
- **Auth:** `NEXT_PUBLIC_AUTH_PROVIDER` = `local` (email/password) or `oidc` (PKCE → the same JWT cookie); `src/proxy.ts` enforces RBAC (admin vs user). [`docs/OIDC.md`](docs/OIDC.md).
- **Storage:** write-through cache — localStorage serves reads, `useStorageSync` pushes mutations to the server (debounced). `STORAGE_PROVIDER` (server-side only) = `local` | `sqlite` | `postgres`. [`docs/STORAGE.md`](docs/STORAGE.md).
- **API routes:** all backend in `src/app/api/`, except `/health`, which is a route at the app root so the plainest liveness path exists; JWT-protected except the public set in [`src/proxy.ts`](src/proxy.ts) — `/login`, `/launch`, `/api/auth/*`, `/health`, `/api/health`, `/api/db/health`, `/api/ready`, `/api/storage/config`, `/_next`, `/favicon.ico` and static assets — plus two machine paths gated by bearer credentials of their own instead of the JWT: the agent drive callback and /api/mcp. `src/proxy.ts` is the authority; do not restate the list elsewhere.
Expand Down
9 changes: 5 additions & 4 deletions DOCKERHUB.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

> 📖 **Full documentation, source, and issues:** <https://github.com/libredb/libredb-studio>

Query **PostgreSQL, MySQL, SQLite, libSQL, DuckDB, Oracle, Db2 LUW, SQL Server, MongoDB, Redis, Couchbase, Firestore, ClickHouse, Apache Druid, Elasticsearch, OpenSearch, Trino, BigQuery, Databend, Snowflake, Apache Spark, Apache Cassandra, Prometheus, InfluxDB, Apache Kafka, MQTT, RabbitMQ, OPC UA, MTConnect, NETCONF, etcd, Neo4j, Milvus, Qdrant, Oxia, S3-compatible object storage and Kubernetes** from your browser, with AI query assistance, RBAC and OIDC SSO.
Query **PostgreSQL, MySQL, SQLite, libSQL, DuckDB, Oracle, Db2 LUW, SQL Server, MongoDB, Redis, Couchbase, Firestore, ClickHouse, Apache Druid, Elasticsearch, OpenSearch, Trino, BigQuery, Databend, Snowflake, Apache Spark, Apache Cassandra, Prometheus, InfluxDB, Apache Kafka, MQTT, RabbitMQ, OPC UA, MTConnect, NETCONF, etcd, Neo4j, Milvus, Qdrant, Weaviate, Oxia, S3-compatible object storage and Kubernetes** from your browser, with AI query assistance, RBAC and OIDC SSO.

---

Expand Down Expand Up @@ -110,8 +110,8 @@ Every one of those tags is published on three bases, and the suffix is appended

## Supported databases

Forty-one external engines share one interface.
The forty-second row is the embedded LibreDB store: it ships inside the image.
Forty-two external engines share one interface.
The forty-third row is the embedded LibreDB store: it ships inside the image.

| Database | Driver | Highlights |
| :--- | :--- | :--- |
Expand Down Expand Up @@ -143,6 +143,7 @@ The forty-second row is the embedded LibreDB store: it ships inside the image.
| **Neo4j** | `neo4j-driver-lite` | Read-only Cypher editor, label and relationship-type browser |
| **Milvus** | `@grpc/grpc-js` | Read-only REST v2 request editor, vector search, admin Load and Release |
| **Qdrant** | none, HTTP | Read-only REST request editor, vector search, collection browser |
| **Weaviate** | none, HTTP | Read-only REST requests, vector search |
| **InfluxDB (InfluxQL)** | none, HTTP | Read-only InfluxQL editor, 1.x to 3 |
| **InfluxDB 3 (SQL)** | none, HTTP | Read-only SQL editor |
| **Oxia** | `@grpc/grpc-js` | Read-only oxia client commands, shard map, key browser |
Expand All @@ -158,7 +159,7 @@ Firestore, Prometheus, InfluxDB, Apache Kafka, MQTT, RabbitMQ, OPC UA, MTConnect

### Engines with no provider of their own

Twenty-seven further engines speak the wire protocol of one of the forty-one drivers above: pick that driver in the connection dialog. Each was measured against a real instance, and how much worked is recorded per engine.
Twenty-seven further engines speak the wire protocol of one of the forty-two drivers above: pick that driver in the connection dialog. Each was measured against a real instance, and how much worked is recorded per engine.

| Engine | Connect as | Support |
| :--- | :--- | :--- |
Expand Down
Loading
Loading