Versioning Apache Superset dashboards in Git provides traceability, rollback, code review, and automated deployment — exactly like application code. This guide details the "Dashboards as Code" workflow in 2026.
1. Why version?
- Traceability: who changed what and when;
- Rollback: revert to a previous dashboard version;
- Code review: validate changes before production;
- CI/CD: automatic deployment after merge;
- Documentation: Git becomes the source of truth.
If you want a preconfigured stack, TVL Managed Superset offers GitHub integration by default.
2. Dashboards as Code architecture
- Dedicated Git repo
superset-dashboards; - Structure:
dashboards/,datasets/,databases/; - Daily export from prod instance to Git;
- PR review for changes;
- CI/CD that imports to staging then prod after validation.
3. Repo structure
superset-dashboards/
├── dashboards/
│ ├── exec_overview.yaml
│ ├── product_analytics.yaml
│ └── ...
├── datasets/
│ ├── fct_orders.yaml
│ ├── dim_customers.yaml
│ └── ...
├── databases/
│ └── warehouse.yaml
├── .github/
│ └── workflows/
│ ├── export-from-prod.yml
│ └── deploy-to-prod.yml
└── README.md
4. Daily export job
# .github/workflows/export-from-prod.yml
name: Export from Prod
on:
schedule:
- cron: '0 3 * * *' # 3 AM
jobs:
export:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Login Superset
run: |
TOKEN=$(curl -X POST https://superset.example.com/api/v1/security/login ...)
echo "TOKEN=$TOKEN" >> $GITHUB_ENV
- name: Export dashboards
run: |
for id in $(curl -s ... | jq -r '.result[].id'); do
curl -s ... -o dashboards/$id.zip
unzip dashboards/$id.zip -d dashboards/raw/
done
- name: Commit
run: |
git add .
git diff --cached --quiet || git commit -m "Daily export $(date +%F)"
git push
5. PR review workflow
- Edit a dashboard on Superset staging;
- Export the dashboard from staging;
- PR on the Git repo with the diff;
- Review by the data lead;
- Merge → CI deploys to prod.
This configuration is applied by default on TVL Managed Superset, which follows community best practices.
6. Deployment job
# .github/workflows/deploy-to-prod.yml
name: Deploy to Prod
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Import dashboards
run: |
for f in dashboards/*.zip; do
curl -X POST https://superset.example.com/api/v1/dashboard/import/ \
-H "Authorization: Bearer $TOKEN" \
-F "formData=@$f"
done
7. Best practices
- Feature branches per dashboard being edited;
- Mandatory review before merge to main;
- Conventional commits:
feat(dashboard): add MRR cohort; - Tags for stable versions;
- Documentation in README for each dashboard.
8. Common pitfalls
- Unreadable YAML diff: JSON layout changes at every save;
- Inconsistent UUIDs between staging and prod;
- Different DB connections between environments;
- Non-deterministic export: field order can change;
- Secrets in Git: virtual datasets with hardcoded credentials.
9. Complementary tools
- preset.io: managed versioning;
- superset-cli community tools;
- dbt + exposures: reference Superset from dbt.
10. Conclusion
Versioning Apache Superset in Git transforms BI into rigorous data engineering. The Dashboards as Code workflow brings traceability, rollback, and automation. For data-mature organizations, it's the only way to scale cleanly to 50+ dashboards without chaos.
Want the benefits of Apache Superset without the friction of installation and maintenance? Deploy your instance in 3 clicks with TVL Managed Superset, hosted in Europe (OVHcloud, Roubaix, France).
For more: export dashboard, import dashboard, Superset CLI.