Skip to main content

Declarative YAML-based compiler for data visualization dashboards. Write your dashboard once, compile to Streamlit, Plotly, Observable Plot, Apache Superset, Vega-Lite, or Grafana.

Project description

DashML

A declarative language for data visualization dashboards that compiles to multiple platforms.

Write your dashboard spec once in .dashml format, then compile it to Streamlit, Plotly, Observable Plot, Apache Superset, Vega-Lite, or Grafana.

Install

pip install dashml-lang

Or with uv for an isolated tool install:

uv tool install dashml-lang

The CLI command is dashml (the distribution name dashml-lang only matters at install time).

Quick Start

The repo includes a ready-to-build example at examples/startup_funding.dashml — a 4-page, 20-chart dashboard against real startup funding data. Clone the repo or copy those two files to try it.

# Generate a Streamlit app
dashml build examples/startup_funding.dashml --target streamlit --output app_dir
streamlit run app_dir/app.py

# Generate a standalone Plotly HTML dashboard
dashml build examples/startup_funding.dashml --target plotly --output dashboard_dir

# Generate an Observable Plot HTML dashboard
dashml build examples/startup_funding.dashml --target observable --output dashboard_dir

# Generate a Vega-Lite JSON specification
dashml build examples/startup_funding.dashml --target vegalite --output dashboard_dir

# Generate a Grafana dashboard JSON
dashml build examples/startup_funding.dashml --target grafana --output dashboard_dir

# Create a dashboard directly in Apache Superset
dashml build examples/startup_funding.dashml --target superset \
  --superset-user admin --superset-password admin

Runtime extras

The base pip install dashml-lang gives you the compiler. To actually run a generated artifact, you also need the matching runtime libraries. Install one or more extras combining the target with the data source:

Target CSV SQL BigQuery
Streamlit [streamlit] [streamlit,sql] [streamlit,bigquery]
Plotly / Observable (no extras — static HTML) [flask,sql] [flask,bigquery]
Vega-Lite (no extras — JSON only) (no extras) (no extras)
Grafana (no extras — JSON only) (no extras) (no extras)
Superset [superset] [superset] [superset]

For example, a Streamlit dashboard that queries Postgres:

pip install 'dashml-lang[streamlit,sql]'

Or the all-inclusive variant if you want to try every target and every source:

pip install 'dashml-lang[all]'

dashml list shows all available transformers; dashml --help shows full CLI options.

Try all 6 backends locally

The repo ships a demo/ directory with a reproducible reference stack — Postgres, Apache Superset, and Grafana orchestrated by Docker Compose — for evaluating DashML against a real SQL data source.

cd demo
docker compose up -d
# wait ~60-90s for Superset to initialize on first boot

That gives you Postgres on :5432 (seeded with startup_funding), Superset on http://localhost:8088 (admin/admin), and Grafana on http://localhost:3000 (admin/admin). Then compile examples/startup_funding_sql.dashml — the SQL twin of the CSV example — into all six platforms against that single shared database. See demo/README.md for the full walkthrough.

The demo stack is for evaluation only, not production guidance.

Database credentials

For SQL or BigQuery data sources, the generated artifact reads connection parameters from environment variables at runtime — never from baked-in literals. The generator always emits .gitignore and SECRETS.md next to the generated app.py. Pass --emit-env-example to additionally get a blank .env.example template you can copy and fill in. The same artifact directory is safe to commit to a public repository.

dashml build dashboard.dashml --target plotly --output app_dir --emit-env-example
cd app_dir
cp .env.example .env       # edit .env, set DASHML_DB_* values
python app.py              # reads from env (or .env via python-dotenv)

Without --emit-env-example, supply the same variables through your shell, container, systemd unit, or CI secret store — see SECRETS.md in the artifact.

See SECRETS.md in any generated SQL/BigQuery artifact for the full list of environment variables and recommended deployment patterns (Docker, Kubernetes, systemd, CI/CD, GCP Workload Identity).

Example spec

version: "1.0"
title: "Sales Dashboard"
style: "dracula"

data:
  type: csv
  path: sales.csv

charts:
  - id: "sales_by_country"
    type: "bar"
    title: "Sales by Country"
    x: "country"
    y: "sales"
    agg: "sum"
    sort: "y"
    sort_order: "desc"
    limit: 10

Documentation

Key Concepts

  • Compiler, not runtime — DashML generates standalone code; it never loads or touches your data
  • Credentials never baked — generated SQL/BigQuery artifacts read database credentials from environment variables at runtime; safe to version-control
  • 12 chart types — bar, line, scatter, pie, area, histogram, stacked_bar, grouped_bar, bubble, heatmap, box, geo
  • 3 data sources — CSV, SQL (PostgreSQL/MySQL/SQLite), Google BigQuery
  • 6 backends — Streamlit, Plotly, Observable Plot, Apache Superset, Vega-Lite, Grafana
  • 6 built-in themes — Dracula, Nord, Gruvbox, Monokai, One Dark, Solarized Light

Authors

  • Dawid Olejniczak
  • Szymon Nowaczyk

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dashml_lang-0.1.23.tar.gz (157.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dashml_lang-0.1.23-py3-none-any.whl (161.3 kB view details)

Uploaded Python 3

File details

Details for the file dashml_lang-0.1.23.tar.gz.

File metadata

  • Download URL: dashml_lang-0.1.23.tar.gz
  • Upload date:
  • Size: 157.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dashml_lang-0.1.23.tar.gz
Algorithm Hash digest
SHA256 eff52fe8e7bb80e322e70d85fe2acc65543a41d025ca696f08db6743fa6964f2
MD5 7c0fe3a397eef1d53dfd095cbae3be6b
BLAKE2b-256 d01706634b2fb3c6af894cebd89e2e3e800f2e816e611c7ecfb7d25c7b648c28

See more details on using hashes here.

Provenance

The following attestation bundles were made for dashml_lang-0.1.23.tar.gz:

Publisher: release.yml on dashml-dev/dashml

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dashml_lang-0.1.23-py3-none-any.whl.

File metadata

  • Download URL: dashml_lang-0.1.23-py3-none-any.whl
  • Upload date:
  • Size: 161.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dashml_lang-0.1.23-py3-none-any.whl
Algorithm Hash digest
SHA256 93f5d2692defe0d6d21492a2e2df653107d635f15a7f8ca15240fa4ae1ea5bf9
MD5 85edc93c4408509d7ae52203876b26db
BLAKE2b-256 b4364611b0389ba36ea25d52a846156cce7992236787ebec3ac8c27ea74aa679

See more details on using hashes here.

Provenance

The following attestation bundles were made for dashml_lang-0.1.23-py3-none-any.whl:

Publisher: release.yml on dashml-dev/dashml

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page