data-diving/dbt-ui
data-diving/dbt-ui has 129 GitHub stars and 14 forks. Star changes are not measured yet. Last checked 2026-11-12 10:06 UTC. Last push 2026-11-06.
Comment ces chiffres sont mesurés
A modern web-based user interface for dbt-core projects
What you can do
- Project Browser: Browse your dbt project structure with an intuitive tree view. Each user works on their own branch in a separate git worktree on the server (hover the question mark next to the branch name to see its path); switching to another project asks for confirmation first
- Code Editor: Edit SQL models, YML configurations, tests, and macros with Monaco Editor
- Lineage Graph: Visualize model dependencies and data lineage
- Quick Actions: Run, test, seed and compile models from the lineage panel, and manage your project
Progression mesurée des étoiles
- in 24h
- Historique en cours
- in 7 days
- Historique en cours
- in 15 days
- Historique en cours
- in 1 month
- Historique en cours
Variations nettes sur des périodes qui se chevauchent, pas des totaux quotidiens. Les mesures absentes restent vides. Les étoiles indiquent l’intérêt, pas la qualité.
README.md
Originaldbt UI
A modern web-based user interface for dbt-core projects.
Documentation: https://dbt-ui.data-diving.com/

Quick Start with Docker
The easiest way to run dbt UI is using Docker:
# Clone the repository
git clone https://github.com/data-diving/dbt-ui.git
cd dbt-ui
# Create an encryption key for the scheduler (once; kept in .env, which git ignores)
echo "DBT_UI__SCHEDULER_ENCRYPTION_KEY=$(openssl rand -base64 32 | tr '+/' '-_')" >> .env
# Run with Docker Compose
docker compose up --build
# Or use existing git repositories from your computer
DBT_UI__GIT_REPOS_PATH=/path/to/your/repos docker compose up --build
# Or run without the scheduler (no encryption key needed)
docker compose -f docker-compose-without-scheduler.yml up --build
docker-compose.yml enables the scheduler and requires DBT_UI__SCHEDULER_ENCRYPTION_KEY; Docker Compose refuses to start without it. Keep the key: credentials stored with scheduled jobs cannot be decrypted without it. docker-compose-without-scheduler.yml runs dbt UI without the scheduler; keep the two files in sync when changing shared settings.
Scheduler settings (environment variables, e.g. in .env):
| Environment Variable | Default | Description |
|---|---|---|
DBT_UI__SCHEDULER_ENABLED |
false (true in docker-compose.yml) |
Enable the scheduler |
DBT_UI__SCHEDULER_ENCRYPTION_KEY |
- | Required. Fernet key for stored credentials |
DBT_UI__SCHEDULER_DB_URL |
sqlite:///<data dir>/dbt-ui.db |
Run data database. Postgres: postgresql://user:password@host:5432/dbname (connected through pg8000) |
DBT_UI__SCHEDULER_DATA_DIR |
~/.dbt-ui (/home/dbtui/data in Docker) |
SQLite file, run logs and job checkouts |
DBT_UI__SCHEDULER_MAX_CONCURRENT |
2 |
dbt runs executing at the same time, scheduled and manual combined; further runs wait in a queue |
DBT_UI__SCHEDULER_MAX_MEMORY |
- | Optional address-space cap per dbt process, e.g. 4g. Some adapters reserve large virtual memory; remove the cap if dbt fails with MemoryError or can't start new thread |
DBT_UI__SCHEDULER_RETENTION_DAYS |
30 |
Days of run history and logs to keep |
DBT_UI__SCHEDULER_MANUAL_TIMEOUT |
300 |
Timeout in seconds for manual runs from the editor |
DBT_UI__SCHEDULER_MAX_CATCHUP_RUNS |
100 |
Most catch-up runs queued per job at a time; further missed slots follow in the next batch |
DBT_UI__FRONTEND_URL |
http://localhost in Docker |
Address users open dbt UI at; failure notifications link to runs there ({{run_url}} is empty when it isn't set) |
Volume Mount
| Environment Variable | Default | Description |
|---|---|---|
DBT_UI__GIT_REPOS_PATH |
./git-repos |
Mount for git repositories - both cloned from URLs and existing local repos |
Set DBT_UI__GIT_REPOS_PATH to point to your existing repos folder to work with local repositories.
Open your browser and navigate to http://localhost
The backend API is available at http://localhost:8000
Architecture
This application consists of two parts:
- Frontend: React + TypeScript web application (Vite) - served via nginx
- Backend: FastAPI Python server for file system operations, git and dbt commands, and the optional scheduler (run data in SQLite or Postgres)
The scheduler runs dbt inside the backend container. dbt only sends SQL to your warehouse and waits for it, so it needs little CPU or memory; the backend still protects itself by running dbt as a separate process with lowered CPU priority, making it the first target of the out-of-memory killer, and optionally capping its memory. Run data tables are created or upgraded automatically on startup.
[!WARNING] WITH DUCKDB, SQLITE AND OTHER IN-PROCESS DATABASES, ALL DATA IS PROCESSED INSIDE THE DBT UI BACKEND CONTAINER. The database engine runs inside the dbt process, so every scheduled and manual run uses the backend container's CPU, memory and disk. This can significantly slow down or destabilise dbt UI for all users. Use the scheduler with remote warehouses (Postgres, Snowflake, BigQuery, Redshift, Databricks and similar), or give the container enough memory and limit parallel runs with
DBT_UI__SCHEDULER_MAX_CONCURRENT. Don't useDBT_UI__SCHEDULER_MAX_MEMORYas a memory budget: it caps the address space dbt reserves, which is several times what it uses, so values below a few GB make runs fail at random (can't start new thread).
Features
- Project Browser: Browse your dbt project structure with an intuitive tree view. Each user works on their own branch in a separate git worktree on the server (hover the question mark next to the branch name to see its path); switching to another project asks for confirmation first
- Code Editor: Edit SQL models, YML configurations, tests, and macros with Monaco Editor
- Lineage Graph: Visualize model dependencies and data lineage
- Quick Actions: Run, test, seed and compile models from the lineage panel, and manage your project
- Local File Access: No file uploads - backend reads files directly from your filesystem
- Git Integration: View modified files, stage changes, commit, push/pull, and switch branches
- MetaDV: Visual Data Vault modeling - map source columns to entities and generate Data Vault 2.0 models using metadv package
- Scheduler (optional, on in
docker-compose.yml): Schedule dbt runs on cron, catch up missed runs, rerun failures, get failure notifications and review run history on a timeline. See the documentation for details
Note: Only git-based dbt projects are supported. The project must be a git repository.
Want to Contribute?
Like dbt-ui and want to help make it even better? Check out our Contributing Guide to get started with discussions, issues, and pull requests. Your contributions help improve the experience for everyone!
Project Structure
dbt-ui/
├── frontend/ # React frontend application
├── backend/ # FastAPI backend server
│ └── scheduler/ # Optional built-in scheduler
├── docker/ # Docker configuration
├── docs/ # Documentation site (Zensical, see mkdocs.yml)
├── screenshots/ # Generates the docs screenshots from a demo stack
├── docker-compose.yml # with the scheduler
├── docker-compose-without-scheduler.yml
└── README.md
License and Attribution
This project is licensed under the MIT License.
Third-Party Software
This project uses open-source libraries under various permissive licenses (MIT, Apache-2.0, BSD-3-Clause, ISC).
When you install dependencies via npm install and pip install or build a Docker image their license files are placed in:
- Frontend:
node_modules/(view withnpm ls) - Backend: Python site-packages (view with
pip list)
For license texts and copyright information, check each package's GitHub repository
Frontend (npm)
| Package | License | Version | Repository |
|---|---|---|---|
| @monaco-editor/react | MIT | ^4.7.0 | https://github.com/suren-atoyan/monaco-react |
| dagre | MIT | ^0.8.5 | https://github.com/dagrejs/dagre |
| lucide-react | ISC | ^0.294.0 | https://github.com/lucide-icons/lucide |
| monaco-editor | MIT | ^0.55.1 | https://github.com/microsoft/monaco-editor |
| react | MIT | ^18.2.0 | https://github.com/facebook/react |
| react-dom | MIT | ^18.2.0 | https://github.com/facebook/react |
| react-markdown | MIT | ^9.0.1 | https://github.com/remarkjs/react-markdown |
| react-split-pane | MIT | ^3.0.4 | https://github.com/tomkp/react-split-pane |
| reactflow | MIT | ^11.11.4 | https://github.com/xyflow/xyflow |
| typescript | Apache-2.0 | ^5.2.2 | https://github.com/microsoft/TypeScript |
| vite | MIT | ^5.0.8 | https://github.com/vitejs/vite |
| eslint | MIT | ^8.55.0 | https://github.com/eslint/eslint |
Backend (PyPI)
| Package | License | Version | Repository |
|---|---|---|---|
| fastapi | MIT | 0.162.0 | https://github.com/tiangolo/fastapi |
| uvicorn | BSD-3-Clause | 0.54.0 | https://github.com/encode/uvicorn |
| pydantic | MIT | 2.14.2 | https://github.com/pydantic/pydantic |
| python-multipart | Apache-2.0 | 0.0.33 | https://github.com/Kludex/python-multipart |
| pyyaml | MIT | >=6.0 | https://github.com/yaml/pyyaml |
| packaging | Apache-2.0 | >=23.0 | https://github.com/pypa/packaging |
| metadv | MIT | >=0.1.0 | https://github.com/data-diving/metadv |
| sqlalchemy | MIT | >=2.0 | https://github.com/sqlalchemy/sqlalchemy |
| alembic | MIT | >=1.13 | https://github.com/sqlalchemy/alembic |
| pg8000 | BSD-3-Clause | >=1.30 | https://codeberg.org/tlocke/pg8000 |
| cryptography | Apache-2.0 OR BSD-3-Clause | >=42.0 | https://github.com/pyca/cryptography |
| croniter | MIT | >=2.0 | https://github.com/pallets-eco/croniter |
| psutil | BSD-3-Clause | >=5.9 | https://github.com/giampaolo/psutil |
Trademarks
- dbt, dbt Core, and dbt Labs are trademarks of dbt Labs, Inc.
- Docker and the Docker logo are trademarks or registered trademarks of Docker, Inc.
This project is not affiliated with, endorsed by, or sponsored by dbt Labs, Inc. or Docker, Inc.
Explorer des projets similaires
Asabeneh/30-Days-Of-Python
Le défi de programmation 30 Days of Python est un guide pas à pas pour apprendre le langage de programmation Python en 30 jours. Ce défi peut prendre plus de 100 jours. Avancez à votre rythme. Ces vidéos peuvent aussi vous aider : https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw
78,618 étoilesgrafana/grafana
Plateforme ouverte et composable d’observabilité et de visualisation de données. Visualise les métriques, les journaux et les traces issus de plusieurs sources, comme Prometheus, Loki, Elasticsearch, InfluxDB, Postgres et bien d’autres.
77,859 étoilesredis/redis
Pour les développeurs qui créent des applications en temps réel pilotées par les données, Redis est le cache, le serveur de structures de données et le moteur de requêtes documentaires et vectorielles préféré, le plus rapide et le plus riche en fonctionnalités.
77,472 étoilesapache/superset
Apache Superset est une plateforme de visualisation et d'exploration de données.
75,495 étoiles