feat(blueprint): add LibreDB Studio (#931)

* feat: add libredb-studio compose

Adds LibreDB Studio — an MIT-licensed, AI-powered open-source SQL IDE (PostgreSQL, MySQL, Oracle, SQL Server, SQLite, MongoDB, Redis).

This commit adds the docker-compose.yml. The template.toml and meta.json entry follow in the same branch.

Image: ghcr.io/libredb/libredb-studio
Repo: https://github.com/libredb/libredb-studio

* feat: add libredb-studio template.toml

Adds the Dokploy template.toml for LibreDB Studio.

Defines auto-generated secrets (admin password, user password, JWT secret), exposes port 3000 on the primary domain, and persists data via a mount at /app/data.

* feat: add libredb-studio to meta.json

Registers LibreDB Studio in the template catalog index (meta.json), alphabetically-independent top entry. Completes the LibreDB Studio template (compose + template.toml + meta entry).

* fix: sort libredb-studio entry alphabetically in meta.json

Moves the libredb-studio entry to its correct alphabetical position between librechat and libredesk so meta.json remains sorted by id. Resolves the failing "Validate and Process Meta.json" check (duplicates/sort-order validation).

* fix: expand libredb-studio tags to match meta.json formatting

Formats the libredb-studio "tags" array as a multi-line block to match the output of dedupe-and-sort-meta.js, making the entry byte-identical to the canonical processed file. Resolves the failing "Validate and Process Meta.json" check.

* fix: remove invalid mounts block from libredb-studio template.toml

Removes the [[config.mounts]] block, which failed validation because Dokploy requires a 'content' field for file mounts. Data persistence is already handled by the named volume (libredb-data:/app/data) in docker-compose.yml, so no file mount is needed. Resolves the failing "Validate Docker Compose Files" check.

* fix: correct indentation of libredb-studio tags in meta.json

Adjusts the indentation of the "tags" key to 4 spaces so the libredb-studio entry is byte-identical to the output of dedupe-and-sort-meta.js. Resolves the remaining "Validate and Process Meta.json" check failure.

* feat: add libredb-studio logo

Adds the libredb-studio.svg logo to blueprints/libredb-studio/ so it matches the "logo" field in meta.json. Resolves the "Validate Blueprints Structure and Meta" check, which verifies that each meta.json logo has a corresponding file in its blueprint folder.

* fix: bump libredb-studio image to v0.9.27

Updates the image tag from v0.9.13 to v0.9.27 (current release) so reviewers can test against the latest version.

* fix: update LibreDB Studio version to v0.9.27

Update version field from v0.9.13 to v0.9.27 in meta.json

* fix(blueprint): remove v prefix from image tag

GHCR tags do not use v prefix (0.9.27 not v0.9.27)

* fix(meta): remove v prefix from version field

GHCR tags do not use v prefix (0.9.27 not v0.9.27)
This commit is contained in:
Yusuf Gündoğdu
2026-07-08 00:44:07 +03:00
committed by GitHub
parent cdc72377c7
commit 1c0380d77b
4 changed files with 83 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
version: "3.8"
services:
libredb-studio:
image: ghcr.io/libredb/libredb-studio:0.9.27
restart: unless-stopped
environment:
- ADMIN_EMAIL=admin@libredb.org
- ADMIN_PASSWORD=${ADMIN_PASSWORD}
- USER_EMAIL=user@libredb.org
- USER_PASSWORD=${USER_PASSWORD}
- JWT_SECRET=${JWT_SECRET}
- STORAGE_PROVIDER=sqlite
- STORAGE_SQLITE_PATH=/app/data/libredb-storage.db
volumes:
- libredb-data:/app/data
volumes:
libredb-data:

View File

@@ -0,0 +1,32 @@
<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="logo-gradient" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#4F46E5" />
<stop offset="100%" stop-color="#9333EA" />
</linearGradient>
<linearGradient id="code-gradient" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#10B981" />
<stop offset="100%" stop-color="#3B82F6" />
</linearGradient>
<filter id="glow" x="-20%" y="-20%" width="140%" height="140%">
<feGaussianBlur stdDeviation="3" result="blur" />
<feComposite in="SourceGraphic" in2="blur" operator="over" />
</filter>
</defs>
<!-- Background Shape -->
<path d="M100 20L169.282 60V140L100 180L30.718 140V60L100 20Z" fill="url(#logo-gradient)" fill-opacity="0.05" stroke="url(#logo-gradient)" stroke-width="1.5"/>
<!-- Database Layers (De-emphasized) -->
<g opacity="0.3">
<rect x="70" y="80" width="60" height="10" rx="2" fill="url(#logo-gradient)" />
<rect x="70" y="95" width="60" height="10" rx="2" fill="url(#logo-gradient)" />
<rect x="70" y="110" width="60" height="10" rx="2" fill="url(#logo-gradient)" />
</g>
<!-- Coding Brackets (Emphasized) -->
<g filter="url(#glow)">
<path d="M55 70L35 100L55 130" stroke="url(#code-gradient)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round" />
<path d="M145 70L165 100L145 130" stroke="url(#code-gradient)" stroke-width="6" stroke-linecap="round" stroke-linejoin="round" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,18 @@
[variables]
admin_password = "${password:32}"
user_password = "${password:32}"
jwt_secret = "${password:64}"
[config]
[[config.domains]]
serviceName = "libredb-studio"
port = 3000
[[config.env]]
ADMIN_PASSWORD = "${admin_password}"
[[config.env]]
USER_PASSWORD = "${user_password}"
[[config.env]]
JWT_SECRET = "${jwt_secret}"

View File

@@ -3884,6 +3884,22 @@
"generative-ai"
]
},
{
"id": "libredb-studio",
"name": "LibreDB Studio",
"version": "0.9.27",
"description": "The modern, AI-powered open-source SQL IDE. Query PostgreSQL, MySQL, Oracle, SQL Server, SQLite, MongoDB and Redis from your browser.",
"logo": "libredb-studio.svg",
"links": {
"github": "https://github.com/libredb/libredb-studio",
"website": "https://libredb.org/",
"docs": "https://libredb.org/"
},
"tags": [
"database",
"sql"
]
},
{
"id": "libredesk",
"name": "Libredesk",