diff --git a/.github/workflows/docker-build-push.yml b/.github/workflows/docker-build-push.yml index f2a7f310..e8734b9e 100644 --- a/.github/workflows/docker-build-push.yml +++ b/.github/workflows/docker-build-push.yml @@ -34,6 +34,7 @@ jobs: outputs: version: ${{ steps.extract-version.outputs.version }} image: ${{ steps.meta.outputs.tags }} + dockerhub_enabled: ${{ steps.dockerhub.outputs.enabled }} steps: - name: Checkout code @@ -65,7 +66,7 @@ jobs: echo "Version: ${VERSION}" - name: Set up QEMU for multi-platform builds - uses: docker/setup-qemu-action@v4 + uses: docker/setup-qemu-action@06116385d9baf250c9f4dcb4858b16962ea869c3 # v4.1.0 - name: Set up Docker Buildx uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3 @@ -168,3 +169,31 @@ jobs: echo "${{ steps.meta.outputs.tags }}" >> $GITHUB_STEP_SUMMARY echo '```' >> $GITHUB_STEP_SUMMARY + # Mirror the Docker Hub repository overview from DOCKERHUB.md after each main + # build. Runs only on main and only when Docker Hub is configured + # (DOCKER_HUB_USERNAME variable present), so forks are unaffected. + dockerhub-readme: + name: Sync Docker Hub README + needs: build-and-push + # Run only on main, only when Docker Hub is fully configured: the token + # (checked via the build job's dockerhub_enabled output โ€” secrets can't be + # read in an `if:`) AND the username variable. + if: ${{ github.ref == 'refs/heads/main' && needs.build-and-push.outputs.dockerhub_enabled == 'true' && vars.DOCKER_HUB_USERNAME != '' }} + runs-on: ubuntu-latest + # Only needs to read the repo to checkout DOCKERHUB.md; the Docker Hub + # update authenticates with DOCKER_HUB_TOKEN, not GITHUB_TOKEN. + permissions: + contents: read + steps: + - name: Checkout code + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + + - name: Update Docker Hub repository description + uses: peter-evans/dockerhub-description@1b9a80c056b620d92cedb9d9b5a223409c68ddfa # v5.0.0 + with: + username: ${{ vars.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_TOKEN }} + repository: ${{ vars.DOCKER_HUB_USERNAME }}/libredb-studio + short-description: "Open-source AI-powered web SQL IDE โ€” Postgres, MySQL, Mongo, Redis, Oracle, MSSQL, SQLite" + readme-filepath: ./DOCKERHUB.md + diff --git a/DOCKERHUB.md b/DOCKERHUB.md new file mode 100644 index 00000000..a62b2fe2 --- /dev/null +++ b/DOCKERHUB.md @@ -0,0 +1,161 @@ +

+ LibreDB Studio +

+ +

LibreDB Studio

+ +

+ The modern, AI-powered, open-source web-based SQL IDE for cloud-native teams. +

+ +

+ GitHub + License: MIT + multi-arch +

+ +

+ LibreDB Studio - Professional SQL IDE +

+ +> ๐Ÿ“– **Full documentation, source, and issues:** + +Query **PostgreSQL, MySQL, SQLite, Oracle, SQL Server, MongoDB and Redis** from your browser โ€” with AI-powered query assistance, interactive ER diagrams, schema diff, a virtualized data grid, RBAC, OIDC SSO, and a live monitoring dashboard. A lightweight, secure bridge between heavy desktop tools (DataGrip/DBeaver) and minimal CLIs. + +--- + +## Quick start + +```bash +docker run -d \ + --name libredb-studio \ + -p 3000:3000 \ + -e ADMIN_EMAIL=admin@libredb.org \ + -e ADMIN_PASSWORD=change-me-admin \ + -e USER_EMAIL=user@libredb.org \ + -e USER_PASSWORD=change-me-user \ + -e JWT_SECRET=change-me-to-a-random-32-char-string \ + libredb/libredb-studio:latest +``` + +Open and log in with the `ADMIN_EMAIL` / `ADMIN_PASSWORD` you set above. **Use your own strong passwords and a random `JWT_SECRET`** โ€” the values here are placeholders. + +> **Enable AI:** add `-e LLM_PROVIDER=gemini -e LLM_API_KEY=your_key -e LLM_MODEL=gemini-2.5-flash`. + +### Docker Compose + +```yaml +services: + libredb-studio: + image: libredb/libredb-studio:latest + ports: + - "3000:3000" + environment: + ADMIN_EMAIL: admin@libredb.org + ADMIN_PASSWORD: change-me + USER_EMAIL: user@libredb.org + USER_PASSWORD: change-me + JWT_SECRET: change-me-to-a-random-32-char-string + STORAGE_PROVIDER: sqlite # persist on the volume below + STORAGE_SQLITE_PATH: /app/data/libredb-storage.db + volumes: + - libredb-data:/app/data + restart: unless-stopped +volumes: + libredb-data: +``` + +A ready-to-use, fully-commented compose file is in the repo: [`docker-compose.example.yml`](https://github.com/libredb/libredb-studio/blob/main/docker-compose.example.yml). + +--- + +## Image tags + +| Tag | Pushed from | Use | +|-----|-------------|-----| +| `latest` | `main` | Latest stable build | +| `X.Y.Z` | `main` / release | Pin an exact version, e.g. `docker pull libredb/libredb-studio:0.9.16` (recommended for production) | +| `dev` | `feat/**`, `fix/**` branches | Bleeding-edge / preview | +| `sha-` | every build | Exact immutable commit | + +- **Architectures:** `linux/amd64`, `linux/arm64` (multi-arch manifest). +- **Also on GHCR:** `ghcr.io/libredb/libredb-studio` (canonical mirror, no pull rate limits โ€” preferred for Kubernetes). + +--- + +## Supported databases + +| Database | Driver | Highlights | +| :--- | :--- | :--- | +| **PostgreSQL** | `pg` | EXPLAIN plans, transactions, query cancellation, SSL/TLS, SSH tunnel | +| **MySQL** | `mysql2` | EXPLAIN plans, transactions, `KILL QUERY`, SSL/TLS, SSH tunnel | +| **Oracle** | `oracledb` (thin) | `FETCH FIRST` pagination, `V$` monitoring, `ANALYZE`, transactions | +| **SQL Server** | `mssql` | `OFFSET FETCH`, `sys.dm_*` DMVs, `DBCC CHECKDB`, Azure SQL auto-detect | +| **SQLite** | `better-sqlite3` | File-based or in-memory databases | +| **MongoDB** | `mongodb` | JSON query editor, find/aggregate/insert/update/delete | +| **Redis** | `ioredis` | Command editor, key browser, INFO monitoring | + +--- + +## Key features + +- **Professional SQL IDE** โ€” Monaco editor (VS Code engine), schema-aware autocomplete, multi-tab workspace, Visual EXPLAIN. +- **Interactive ER diagrams** โ€” real FK edges, cardinality, auto-layout (ELK.js), PNG/SVG export. +- **Schema diff & migration** โ€” compare snapshots/connections and auto-generate migration SQL. +- **Multi-model AI copilot** โ€” NL2SQL, query safety analysis, EXPLAIN-in-plain-English, slow-query autopilot. Gemini / OpenAI / Ollama / custom. +- **Pro data grid** โ€” virtualized millions of rows, inline editing, per-column filters, pivot table, CSV/JSON export. +- **Data visualization** โ€” 8 chart types with aggregation and saved-chart dashboards. +- **Data privacy & masking** โ€” automatic sensitive-column detection, RBAC-enforced masking, export protection. +- **Auth & SSO** โ€” local email/password or OIDC (Auth0, Keycloak, Okta, Azure AD, Zitadel) with PKCE and role mapping. +- **DBA toolkit (admin)** โ€” live monitoring dashboard, threshold alerts, one-click VACUUM/ANALYZE/REINDEX, full audit trail. + +

+ NL2SQL - Natural Language to SQL +
Ask in plain English, get executable SQL โ€” schema-aware. +

+ +

+ Interactive ER Diagram +
Interactive ER diagrams with real foreign-key edges and auto-layout. +

+ +--- + +## Environment variables + +| Variable | Required | Description | +|----------|----------|-------------| +| `ADMIN_EMAIL` | โœ… | Admin email (default `admin@libredb.org`) | +| `ADMIN_PASSWORD` | โœ… | Admin password | +| `USER_EMAIL` | โœ… | Standard user email (default `user@libredb.org`) | +| `USER_PASSWORD` | โœ… | Standard user password | +| `JWT_SECRET` | โœ… | JWT signing secret (min 32 chars) | +| `NEXT_PUBLIC_AUTH_PROVIDER` | โŒ | `local` (default) or `oidc` | +| `OIDC_ISSUER` / `OIDC_CLIENT_ID` / `OIDC_CLIENT_SECRET` | โŒ | OIDC SSO (required when `oidc`) | +| `OIDC_ROLE_CLAIM` / `OIDC_ADMIN_ROLES` / `OIDC_SCOPE` | โŒ | OIDC role mapping & scope | +| `LLM_PROVIDER` / `LLM_API_KEY` / `LLM_MODEL` / `LLM_API_URL` | โŒ | AI: `gemini`, `openai`, `ollama`, `custom` | +| `STORAGE_PROVIDER` | โŒ | `local` (default), `sqlite`, or `postgres` | +| `STORAGE_SQLITE_PATH` | โŒ | SQLite file path (e.g. `/app/data/libredb-storage.db`) | +| `STORAGE_POSTGRES_URL` | โŒ | PostgreSQL URL (when `STORAGE_PROVIDER=postgres`) | + +Health check endpoint: `GET /api/db/health` ยท Container HTTP port: `3000`. + +--- + +## Deploy + +- **Docker / Compose** โ€” see Quick start above. +- **Kubernetes (Helm)** โ€” `oci://ghcr.io/libredb/charts/libredb-studio` ยท [Artifact Hub](https://artifacthub.io/packages/search?repo=libredb-studio) +- **CapRover** โ€” one-click app: add repo `https://libredb.org/caprover-one-click-apps`, then install **LibreDB Studio**. +- **PaaS** โ€” one-click buttons for Koyeb & Render in the [GitHub README](https://github.com/libredb/libredb-studio#-one-click-deploy). + +--- + +## Links + +- **Source & docs:** +- **Live demo:** (`admin@libredb.org` / `LibreDB.2026`) +- **DeepWiki docs:** +- **License:** MIT + +This page is generated from DOCKERHUB.md and synced automatically on every main build. diff --git a/package.json b/package.json index 49f1eea1..8489f74d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@libredb/studio", - "version": "0.9.15", + "version": "0.9.16", "private": false, "publishConfig": { "access": "public"