Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
f779742
feat(seed): add yaml dependency and test fixtures for seed connections
cevheri Mar 25, 2026
0acf705
feat(seed): implement seed connections plan with YAML/JSON support an…
cevheri Mar 25, 2026
962e261
feat(seed): add detailed seed connections design document with YAML/J…
cevheri Mar 25, 2026
8bc0a4d
feat(seed): add Zod v4 schemas and types for seed connections
cevheri Mar 25, 2026
99dbfd9
feat(seed): implement config loader with YAML/JSON parsing and TTL cache
cevheri Mar 25, 2026
22e96d2
feat(seed): implement credential resolver with env var injection
cevheri Mar 25, 2026
4858a6b
feat(seed): implement connection filter with role matching and defaul…
cevheri Mar 25, 2026
b738c69
feat(seed): add barrel export with orchestrator and unfiltered lookup
cevheri Mar 25, 2026
aeaf752
feat(seed): implement resolveConnection with 403/404 differentiation …
cevheri Mar 25, 2026
a70f63a
feat(seed): add GET /api/connections/managed endpoint
cevheri Mar 25, 2026
d373582
feat(seed): integrate resolveConnection into all DB API routes
cevheri Mar 25, 2026
78d63ec
feat(seed): add buildConnectionPayload helper and managed connection …
cevheri Mar 25, 2026
450e490
feat(seed): send connectionId for managed connections in all hook fet…
cevheri Mar 25, 2026
79ff820
feat(seed): add lock icon and hide edit/delete for managed connections
cevheri Mar 25, 2026
2e5eab0
test(seed): add integration tests for full seed pipeline
cevheri Mar 25, 2026
3d7be15
feat(seed): add Helm chart, Docker, and env documentation for seed co…
cevheri Mar 25, 2026
27d3e3a
refactor: delete demo provider, route, showcase queries, and types
cevheri Mar 25, 2026
ea384f4
refactor: remove all demo references from source code
cevheri Mar 25, 2026
e0bcc63
refactor(env): remove demo database configuration from .env.example
cevheri Mar 25, 2026
59cced5
refactor: update tests and config after demo removal
cevheri Mar 25, 2026
362d527
refactor(types): remo demo types
cevheri Mar 25, 2026
1210057
fix: clean up remaining demo references in tests and default query
cevheri Mar 25, 2026
4787320
chore: add testdb to .gitignore for improved environment management
cevheri Mar 25, 2026
b25e78b
fix(test): prevent JWT_SECRET contamination in OIDC crypto tests
cevheri Mar 25, 2026
b1a0a6a
fix(test): use real jose in auth tests to prevent OIDC cross-contamin…
cevheri Mar 25, 2026
551ef43
test: improve coverage for managed route and health endpoint
cevheri Mar 25, 2026
66c8726
test: improve coverage for auth logout route and db factory
cevheri Mar 25, 2026
c551c1d
test: enhance storage configuration and routes coverage
cevheri Mar 25, 2026
b93ae33
bump: version to 0.9.4
cevheri Mar 25, 2026
9126a62
revert: remove problematic coverage tests causing CI hang
cevheri Mar 25, 2026
4d91c8a
docs: add Seed Connections documentation to README
cevheri Mar 25, 2026
6c3b963
chore: update .gitignore to exclude Playwright MCP PNG files
cevheri Mar 25, 2026
5975978
fix(hooks): improve user connection merging logic in useConnectionMan…
cevheri Mar 25, 2026
12ebd19
bump: version to 0.9.6
cevheri Mar 25, 2026
125bc00
docs: add comprehensive Seed Connections usage guide
cevheri Mar 25, 2026
806eed0
fix: use single source of truth for connection lists across all compo…
cevheri Mar 25, 2026
3f84ec2
fix: address PR review feedback from Copilot
cevheri Mar 25, 2026
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
2 changes: 1 addition & 1 deletion .cursorrules
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ interface DatabaseConnection {
type: DatabaseType;
}

type DatabaseType = 'postgres' | 'mysql' | 'sqlite' | 'mongodb' | 'demo';
type DatabaseType = 'postgres' | 'mysql' | 'sqlite' | 'mongodb' | 'redis' | 'oracle' | 'mssql';

// ❌ Bad
type DatabaseConnection = {
Expand Down
10 changes: 5 additions & 5 deletions .devin/wiki.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"repo_notes": [
{
"content": "LibreDB Studio is a modern, AI-powered, open-source SQL IDE for cloud-native teams. It provides a zero-install, browser-based interface for managing PostgreSQL, MySQL, SQLite, Oracle, SQL Server, MongoDB, Redis databases, plus a demo mode. Built with Next.js 15 (App Router), React 19, TypeScript strict mode, Tailwind CSS 4, shadcn/ui, and Monaco Editor. The project uses Bun as its preferred runtime.",
"content": "LibreDB Studio is a modern, AI-powered, open-source SQL IDE for cloud-native teams. It provides a zero-install, browser-based interface for managing PostgreSQL, MySQL, SQLite, Oracle, SQL Server, MongoDB, Redis databases. Built with Next.js 15 (App Router), React 19, TypeScript strict mode, Tailwind CSS 4, shadcn/ui, and Monaco Editor. The project uses Bun as its preferred runtime.",
"author": "Maintainer"
},
{
Expand Down Expand Up @@ -42,7 +42,7 @@
},
{
"title": "NoSQL Database Providers",
"purpose": "Document the MongoDB provider (src/lib/db/providers/document/mongodb.ts) and Redis provider (src/lib/db/providers/keyvalue/redis.ts). Cover JSON-based query format for MongoDB (collection, operation, filter, options), Redis command execution, and how both extend BaseDatabaseProvider. Also cover the Demo provider (src/lib/db/providers/demo.ts) for mock/in-memory mode.",
"purpose": "Document the MongoDB provider (src/lib/db/providers/document/mongodb.ts) and Redis provider (src/lib/db/providers/keyvalue/redis.ts). Cover JSON-based query format for MongoDB (collection, operation, filter, options), Redis command execution, and how both extend BaseDatabaseProvider.",
"parent": "Database Provider System"
},
{
Expand All @@ -67,7 +67,7 @@
},
{
"title": "API Layer",
"purpose": "Document the REST API architecture in src/app/api/. Cover all endpoint groups: auth (login, logout, me, OIDC), database operations (query, multi-query, schema, health, test-connection, transaction, maintenance, pool-stats, provider-meta, schema-snapshot, cancel, monitoring, profile), AI endpoints (chat, nl2sql, explain, query-safety, impact, autopilot, describe-schema, index-advisor), admin endpoints (fleet-health, audit), and demo-connection. Explain request/response patterns, error handling, and authentication requirements.",
"purpose": "Document the REST API architecture in src/app/api/. Cover all endpoint groups: auth (login, logout, me, OIDC), database operations (query, multi-query, schema, health, test-connection, transaction, maintenance, pool-stats, provider-meta, schema-snapshot, cancel, monitoring, profile), AI endpoints (chat, nl2sql, explain, query-safety, impact, autopilot, describe-schema, index-advisor), admin endpoints (fleet-health, audit). Explain request/response patterns, error handling, and authentication requirements.",
"parent": "Architecture Overview"
},
{
Expand Down Expand Up @@ -123,12 +123,12 @@
},
{
"title": "Integration, Hook & Component Tests",
"purpose": "Document integration tests (tests/integration/db/) that test each database provider (postgres, mysql, sqlite, oracle, mssql, mongodb, redis, demo) with mocked drivers. Document hook tests (tests/hooks/) that test all 12 custom React hooks. Document component tests (tests/components/) covering all major UI components including Studio, QueryEditor, ResultsGrid, ConnectionModal, admin tabs, monitoring tabs, sidebar, schema-explorer, and studio sub-components.",
"purpose": "Document integration tests (tests/integration/db/) that test each database provider (postgres, mysql, sqlite, oracle, mssql, mongodb, redis) with mocked drivers. Document hook tests (tests/hooks/) that test all 12 custom React hooks. Document component tests (tests/components/) covering all major UI components including Studio, QueryEditor, ResultsGrid, ConnectionModal, admin tabs, monitoring tabs, sidebar, schema-explorer, and studio sub-components.",
"parent": "Testing Strategy"
},
{
"title": "E2E Tests",
"purpose": "Document Playwright E2E tests (e2e/) covering: login flow (login.spec.ts), connection management (connection-management.spec.ts), query execution (query-execution.spec.ts), tab management (tab-management.spec.ts), data export (export.spec.ts), demo mode (demo-mode.spec.ts), and admin dashboard (admin-dashboard.spec.ts). Cover Playwright configuration (playwright.config.ts) and how E2E tests integrate with the CI pipeline.",
"purpose": "Document Playwright E2E tests (e2e/) covering: login flow (login.spec.ts), connection management (connection-management.spec.ts), query execution (query-execution.spec.ts), tab management (tab-management.spec.ts), data export (export.spec.ts), and admin dashboard (admin-dashboard.spec.ts). Cover Playwright configuration (playwright.config.ts) and how E2E tests integrate with the CI pipeline.",
"parent": "Testing Strategy"
},
{
Expand Down
23 changes: 5 additions & 18 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -152,21 +152,8 @@ LLM_MODEL=gemini-2.5-flash
# LLM_MODEL=local-model
# LLM_API_URL=http://localhost:1234/v1

# ===========================================
# Demo Database Configuration (Optional)
# ===========================================
# Enable this to provide a pre-configured demo database
# that users can immediately explore when they open the app.
# Perfect for product demos, onboarding, and trial experiences.
#
# When enabled, a "Demo Database" connection will automatically
# appear in the connections list (cannot be deleted/edited).

# Enable/disable demo database feature
DEMO_DB_ENABLED=true
DEMO_DB_NAME="Employee PostgreSQL (Demo)"
DEMO_DB_HOST=your-neon-host.neon.tech
DEMO_DB_PORT=5432
DEMO_DB_DATABASE=employees
DEMO_DB_USER=employees_readonly
DEMO_DB_PASSWORD=your_demo_password
# ─── Seed Connections (pre-configured databases) ─────────────────────────────
# SEED_CONFIG_PATH=/app/config/seed-connections.yaml # Path to seed config file
# SEED_CACHE_TTL_MS=60000 # Cache TTL in ms (default: 60s)
# Credential env vars referenced in seed config (e.g., ${MY_DB_PASSWORD}):
# MY_DB_PASSWORD=secret
1 change: 0 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,6 @@ jobs:
ADMIN_PASSWORD: test-admin
USER_EMAIL: user@libredb.org
USER_PASSWORD: test-user
DEMO_DB_ENABLED: true

- name: Upload Playwright report
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,15 @@ Thumbs.db
.orchids/
.codegraph/

testdb

*.pid

# Helm subchart dependencies (built at CI time via helm dependency build)
charts/*/charts/*.tgz


seed-connections.yaml

.playwright-mcp/*.png

4 changes: 1 addition & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co

## Project Overview

LibreDB Studio is a web-based SQL IDE for cloud-native teams. It supports PostgreSQL, MySQL, SQLite, Oracle, SQL Server, MongoDB, Redis, and a demo mode with AI-powered query assistance.
LibreDB Studio is a web-based SQL IDE for cloud-native teams. It supports PostgreSQL, MySQL, SQLite, Oracle, SQL Server, MongoDB, Redis with AI-powered query assistance.

## Github
* Repository: https://github.com/libredb/libredb-studio
Expand Down Expand Up @@ -112,7 +112,6 @@ src/
│ │ ├── sql/ # SQL providers (postgres, mysql, sqlite, oracle, mssql)
│ │ ├── document/ # Document providers (mongodb)
│ │ ├── keyvalue/ # Key-value providers (redis)
│ │ └── demo.ts # Demo mock provider
│ ├── factory.ts # Provider factory
│ ├── types.ts # Database types
│ └── errors.ts # Custom error classes
Expand Down Expand Up @@ -152,7 +151,6 @@ charts/
- **SQL:** PostgreSQL, MySQL, SQLite, Oracle, SQL Server (extend `SQLBaseProvider`)
- **Document:** MongoDB (extends `BaseDatabaseProvider`)
- **Key-Value:** Redis (extends `BaseDatabaseProvider`)
- **Demo:** Mock data provider for testing

2. **LLM Abstraction:** `src/lib/llm/` module provides Strategy Pattern for AI providers (Gemini, OpenAI, Ollama, Custom)

Expand Down
145 changes: 134 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
</p>

<p align="center">
<a href="#-live-demo"><strong>🚀 Try Live Demo</strong></a> •
<a href="#-live-test"><strong>🚀 Try Live Test</strong></a> •
<a href="#getting-started"><strong>📖 Documentation</strong></a> •
<a href="#-one-click-deploy"><strong>⚡ Deploy Your Own</strong></a>
</p>
Expand All @@ -34,15 +34,15 @@

---

## 🚀 Live Demo
## 🚀 Live Test

> **Try LibreDB Studio instantly without installation!**

| Demo | URL | Credentials |
| Test | URL | Credentials |
|------|-----|-------------|
| **Public Demo** | [app.libredb.org](https://app.libredb.org) | `admin@libredb.org` / `LibreDB.2026` |
| **Public Test** | [app.libredb.org](https://app.libredb.org) | `admin@libredb.org` / `LibreDB.2026` |

The demo runs in **Demo Mode** with simulated data. No real database required!
The test instance comes with a pre-configured PostgreSQL database via [Seed Connections](#seed-connections-pre-configured-databases). No setup required!

---

Expand Down Expand Up @@ -333,10 +333,10 @@ bun run test:coverage
|-------|-----------|--------|-------|----------------|
| **Unit** | `tests/unit/` | `bun:test` | ~800 | Pure functions: SQL parser, connection strings, data masking, query limiter, schema diff, error classes, DB icons, showcase queries |
| **API** | `tests/api/` | `bun:test` | ~205 | Route handlers: auth, query, transaction, maintenance, AI endpoints, middleware |
| **Integration** | `tests/integration/` | `bun:test` | ~294 | Database providers: PG, MySQL, SQLite, MongoDB, Redis, Oracle, MSSQL, Demo (mocked drivers) |
| **Integration** | `tests/integration/` | `bun:test` | ~294 | Database providers: PG, MySQL, SQLite, MongoDB, Redis, Oracle, MSSQL|
| **Hooks** | `tests/hooks/` | `bun:test` | ~178 | React hooks: auth, connections, tabs, query execution, transactions, inline editing, AI chat, monitoring |
| **Components** | `tests/components/` | `bun:test` + happy-dom | ~194 | UI components: Studio, Sidebar, QueryEditor, ResultsGrid, Admin Dashboard, Charts, ERD |
| **E2E** | `e2e/` | Playwright | ~35 | Full browser flows: login, demo mode, connections, query execution, tabs, export, admin |
| **E2E** | `e2e/` | Playwright | ~35 | Full browser flows: login, connections, query execution, tabs, export, admin |

### Key Details

Expand All @@ -354,7 +354,7 @@ bun run test:coverage

Deploy your own instance of LibreDB Studio with a single click and a free account on Koyeb or Render:

[![Deploy to Koyeb](https://www.koyeb.com/static/images/deploy/button.svg)](https://app.koyeb.com/deploy?name=libredb-studio&type=docker&image=ghcr.io%2Flibredb%2Flibredb-studio%3Alatest&instance_type=free&regions=fra&instances_min=0&autoscaling_sleep_idle_delay=3900&env%5BADMIN_EMAIL%5D=admin%40libredb.org&env%5BADMIN_PASSWORD%5D=LibreDB.2026&env%5BDEMO_DB_DATABASE%5D=employees&env%5BDEMO_DB_ENABLED%5D=true&env%5BDEMO_DB_HOST%5D=yourhostname.eu-central-1.aws.neon.tech&env%5BDEMO_DB_NAME%5D=Employee+Demo&env%5BDEMO_DB_PASSWORD%5D=your_readonly_secure_pass&env%5BDEMO_DB_PORT%5D=5432&env%5BDEMO_DB_USER%5D=employees_readonly&env%5BJWT_SECRET%5D=your_secure_pass%3D&env%5BLLM_API_KEY%5D=your_GEMINI_API_KEY&env%5BLLM_API_URL%5D=http%3A%2F%2Flocalhost%3A11434%2Fv1&env%5BLLM_MODEL%5D=gemini-2.5-flash&env%5BLLM_PROVIDER%5D=gemini&env%5BNEXT_PUBLIC_AUTH_PROVIDER%5D=local&env%5BOIDC_ADMIN_ROLES%5D=admin&env%5BOIDC_CLIENT_ID%5D=your_oidc_client_id&env%5BOIDC_CLIENT_SECRET%5D=your_oidc_client_secret&env%5BOIDC_ISSUER%5D=https%3A%2F%2Flibredb.eu.auth0.com&env%5BOIDC_ROLE_CLAIM%5D=https%3A%2F%2Flibredb.org%2Froles&env%5BOIDC_SCOPE%5D=openid+profile+email&env%5BSTORAGE_POSTGRES_URL%5D=postgresql%3A%2F%2Fdb_user%3Adb_pass%40your_host.eu-central-1.pg.koyeb.app%2Flibredb_storage&env%5BSTORAGE_PROVIDER%5D=postgres&env%5BUSER_EMAIL%5D=user%40libredb.org&env%5BUSER_PASSWORD%5D=LibreDB.2026&ports=3000%3Bhttp%3B%2F&hc_protocol%5B3000%5D=tcp&hc_grace_period%5B3000%5D=5&hc_interval%5B3000%5D=30&hc_restart_limit%5B3000%5D=3&hc_timeout%5B3000%5D=5&hc_path%5B3000%5D=%2F&hc_method%5B3000%5D=get)
[![Deploy to Koyeb](https://www.koyeb.com/static/images/deploy/button.svg)](https://app.koyeb.com/deploy?name=libredb-studio&type=docker&image=ghcr.io%2Flibredb%2Flibredb-studio%3Alatest&instance_type=free&regions=fra&instances_min=0&autoscaling_sleep_idle_delay=3900&env%5BADMIN_EMAIL%5D=admin%40libredb.org&env%5BADMIN_PASSWORD%5D=LibreDB.2026&env%5BJWT_SECRET%5D=your_secure_pass%3D&env%5BLLM_API_KEY%5D=your_GEMINI_API_KEY&env%5BLLM_MODEL%5D=gemini-2.5-flash&env%5BLLM_PROVIDER%5D=gemini&env%5BNEXT_PUBLIC_AUTH_PROVIDER%5D=local&env%5BSTORAGE_PROVIDER%5D=postgres&env%5BSTORAGE_POSTGRES_URL%5D=postgresql%3A%2F%2Fdb_user%3Adb_pass%40your_host.eu-central-1.pg.koyeb.app%2Flibredb_storage&env%5BUSER_EMAIL%5D=user%40libredb.org&env%5BUSER_PASSWORD%5D=LibreDB.2026&ports=3000%3Bhttp%3B%2F&hc_protocol%5B3000%5D=tcp&hc_grace_period%5B3000%5D=5&hc_interval%5B3000%5D=30&hc_restart_limit%5B3000%5D=3&hc_timeout%5B3000%5D=5&hc_path%5B3000%5D=%2F&hc_method%5B3000%5D=get)

[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/libredb/libredb-studio)

Expand All @@ -378,10 +378,12 @@ Deploy your own instance of LibreDB Studio with a single click and a free accoun
| `LLM_PROVIDER` | ❌ | AI provider: `gemini`, `openai`, `ollama` |
| `LLM_API_KEY` | ❌ | API key for AI features |
| `LLM_MODEL` | ❌ | Model name (e.g., `gemini-2.5-flash`) |
| `STORAGE_PROVIDER` |❌ | Storage provider: default=`local` in localStorage, persists in `sqlite` or `postgres` databases |
| `STORAGE_POSTGRES_URL` |❌ |`postgresql://postgres:postgres@localhost:5432/libredb_storage` (required when `STORAGE_PROVIDER=postgres`) |
| `STORAGE_PROVIDER` | ❌ | Storage provider: `local` (default), `sqlite`, or `postgres` |
| `STORAGE_POSTGRES_URL` | ❌ | PostgreSQL connection URL (required when `STORAGE_PROVIDER=postgres`) |
| `SEED_CONFIG_PATH` | ❌ | Path to seed connections YAML config (see [Seed Connections](#seed-connections-pre-configured-databases)) |
| `SEED_CACHE_TTL_MS` | ❌ | Seed config cache TTL in ms (default: `60000`) |

> 💡 **Tip**: Copy `.env.example` to `.env.local` for local development.
> **Tip**: Copy `.env.example` to `.env.local` for local development.

---

Expand Down Expand Up @@ -431,6 +433,127 @@ helm install libredb oci://ghcr.io/libredb/charts/libredb-studio --version 0.1.0

Features: PostgreSQL subchart, Ingress/TLS, HPA, PDB, NetworkPolicy, ExternalSecrets support. See [charts/libredb-studio/README.md](charts/libredb-studio/README.md) for full documentation.

### Seed Connections (Pre-Configured Databases)

Pre-configure database connections via a YAML config file so users see them immediately after login. Ideal for Platform/SaaS deployments where admins provision databases for teams.

**Features:**
- Role-based access control (`admin`, `user`, `*` wildcard)
- Hybrid model: `managed: true` (read-only, admin-controlled) or `managed: false` (editable copy for user)
- Credentials injected via `${ENV_VAR}` syntax — never stored in config file
- Hot-reload: config changes apply within 60s without restart
- Works with Docker, docker-compose, and Kubernetes (Helm)

**1. Create a config file** (`seed-connections.yaml`):

```yaml
version: "1"

defaults:
managed: true
environment: production

connections:
- id: "prod-analytics"
name: "Production Analytics"
type: postgres
host: analytics-db.internal
port: 5432
database: analytics
user: "readonly_user"
password: "${ANALYTICS_DB_PASSWORD}"
roles: ["admin"]
color: "#10B981"

- id: "dev-sandbox"
name: "Dev Sandbox"
type: mysql
host: dev-mysql.internal
port: 3306
database: sandbox
user: "dev_user"
password: "${DEV_DB_PASSWORD}"
roles: ["*"]
managed: false
```

**2. Mount and configure:**

<details>
<summary><strong>Docker</strong></summary>

```bash
docker run -v ./seed-connections.yaml:/app/config/seed-connections.yaml:ro \
-e SEED_CONFIG_PATH=/app/config/seed-connections.yaml \
-e ANALYTICS_DB_PASSWORD=secret \
-e DEV_DB_PASSWORD=devsecret \
ghcr.io/libredb/libredb-studio:latest
```
</details>

<details>
<summary><strong>Docker Compose</strong></summary>

```yaml
services:
app:
image: ghcr.io/libredb/libredb-studio:latest
volumes:
- ./seed-connections.yaml:/app/config/seed-connections.yaml:ro
environment:
SEED_CONFIG_PATH: /app/config/seed-connections.yaml
ANALYTICS_DB_PASSWORD: ${ANALYTICS_DB_PASSWORD}
DEV_DB_PASSWORD: ${DEV_DB_PASSWORD}
```
</details>

<details>
<summary><strong>Kubernetes (Helm)</strong></summary>

```yaml
# values.yaml
seedConnections:
enabled: true
config:
version: "1"
connections:
- id: "prod-analytics"
name: "Production Analytics"
type: postgres
host: analytics-db.internal
password: "${ANALYTICS_DB_PASSWORD}"
roles: ["admin"]

# Credentials via K8s Secret:
extraEnvFrom:
- secretRef:
name: seed-db-credentials
```
</details>

**Config Reference:**

| Field | Required | Description |
|-------|----------|-------------|
| `version` | Yes | Must be `"1"` |
| `defaults` | No | Default values merged into all connections |
| `connections[].id` | Yes | Unique slug (`[a-z0-9-]+`, max 64 chars) |
| `connections[].name` | Yes | Display name in UI |
| `connections[].type` | Yes | `postgres`, `mysql`, `sqlite`, `mongodb`, `redis`, `oracle`, `mssql` |
| `connections[].roles` | Yes | `["*"]` (everyone), `["admin"]`, `["user"]`, or `["admin", "user"]` |
| `connections[].managed` | No | `true` = read-only (default), `false` = editable copy for user |
| `connections[].password` | No | Use `${ENV_VAR}` syntax for secrets |
| `connections[].environment` | No | `production`, `staging`, `development`, `local`, `other` |
| `connections[].group` | No | Group label in sidebar |
| `connections[].color` | No | Hex color for badge (e.g., `#10B981`) |

**Environment Variables:**

| Variable | Default | Description |
|----------|---------|-------------|
| `SEED_CONFIG_PATH` | `/app/config/seed-connections.yaml` | Path to config file |
| `SEED_CACHE_TTL_MS` | `60000` | Cache TTL in ms (hot-reload interval) |

---

## Roadmap
Expand Down
3 changes: 3 additions & 0 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions charts/libredb-studio/templates/configmap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,3 @@ data:
{{- end }}
OIDC_ADMIN_ROLES: {{ .Values.config.oidcAdminRoles | quote }}
{{- end }}
{{- if .Values.demo.enabled }}
DEMO_MODE: "true"
{{- end }}
Loading
Loading