Skip to main content

glyf

Open source visualization build tool for your data pipeline.

Ship charts from the same pipeline as your data.
Define charts in SQL, compose dashboards in YAML, publish anywhere.

PyPI Tests Python Rust License

Install · Quickstart · How it works · CLI · Examples · Docs

  ┌──────────────────────┐   ┌──────────────────────┐   ┌──────────────────────┐
  │     dbt project      │   │     glyf sources     │   │      glyf build      │
  ├──────────────────────┤   ├──────────────────────┤   ├──────────────────────┤
  │ models/*.sql         │   │ charts     *.ggsql   │   │ resolve  ref()       │
  │ target/manifest.json │──▶│ dashboards *.yml     │──▶│ execute  SQL         │
  │ warehouse relations  │   │ macros     *.py      │   │ render   Altair      │
  └──────────────────────┘   └──────────────────────┘   └───────────┬──────────┘
                                                                    │
      ┌─────────────────────────┬───────────────────────┬───────────┘
      ▼                         ▼                       ▼
      site/index.html           charts/*.png *.svg      export --zip
      static dashboard          chart artifacts         zip for CI

The last mile

Every stage of the modern data stack has declarative, version-controlled, testable artifacts. Every stage except visualization.

Your models are versioned. Your jobs are automated. Your data quality is tested. Visualization is still the last artifact outside the pipeline.

  • Dashboards live outside the workflow. Your dbt models are in Git. Your charts are usually configured in a browser, stored elsewhere, and maintained by whoever last touched the UI.
  • Columns rename, charts break silently. When dbt models change, dashboard failures show up late. glyf moves chart definitions into a build step that validates earlier.
  • Publishing should not require a vendor. For internal portals and product dashboards, rendered HTML and chart assets are usually enough.

glyf is artifact-driven, not dbt-runtime-driven: run dbt first, then run glyf against the resulting artifacts and relations.

Install

glyf is published on PyPI as glyf-core. The package installs the glyf command and the glyf Python module; only the distribution name differs.

uv tool install glyf-core
glyf --version
Other ways to install — one-line script, Homebrew, pipx, pip, offline

One-line script (macOS and Linux). Installs uv first if it is missing, never uses sudo, and accepts --update, --version X, and --help:

curl -fsSL https://raw.githubusercontent.com/glyf-data/glyf/main/install.sh | sh

Homebrew. brew trust is required, not optional — Homebrew 6.0 refuses to load formulae from untrusted third-party taps:

brew tap glyf-data/glyf
brew trust --tap glyf-data/glyf
brew install glyf

pipx or pip. Prefer uv or pipx for a CLI tool; use pip when you want glyf inside an existing project virtualenv, next to dbt-core:

pipx install glyf-core
python -m pip install glyf-core

Offline or air-gapped. Every release ships platform wheels, an sdist, and a checksums.txt:

sha256sum --check --ignore-missing checksums.txt
uv tool install ./glyf_core-<version>-cp311-abi3-<platform>.whl

Prebuilt wheels cover Linux (x86_64, aarch64), macOS (Intel, Apple Silicon), and Windows (x86_64). They target Python 3.11+ through the stable ABI, so one wheel per platform covers every supported Python version and no Rust toolchain is needed. Upgrade with uv tool upgrade glyf-core.

Quickstart

In an existing dbt project:

glyf init      # scaffold glyf.yml, visualisations/, dashboards/
dbt build      # produce the dbt artifacts glyf reads
glyf doctor    # check artifacts, charts, and SQL execution
glyf build     # compile, render, and export the site
glyf serve     # preview it locally

doctor reports whether the dbt artifacts, chart files, and SQL execution are ready before your first build, so the first failure is a readable message rather than a stack trace.

How it works

01 — Write charts in GGSQL

SQL you already know, extended with a visualization grammar. Use ref() to reference dbt models directly, exactly as a dbt model would:

SELECT month, revenue
FROM {{ ref('fct_orders') }}

VISUALISE month AS x, revenue AS y
DRAW line
LABEL title => 'Monthly Revenue'
LABEL subtitle => 'Revenue trend from dbt model'
CONFIG width => 900

glyf resolves each reference to its schema path from target/manifest.json and validates the query before it renders anything.

02 — Compose dashboards in YAML

Lay charts out into sections. Use Python macros for labels, thresholds, and reusable components, so a dashboard change is a one-line diff in review:

name: executive
title: Executive Dashboard

summary:
  - "{{ ui.label_value('Owner', 'Analytics Engineering') }}"
  - "{{ ui.label_value('Generated', time.now('%Y-%m-%d %H:%M')) }}"

layout:
  columns: 3

sections:
  - title: Revenue overview
    columns: 3
    items:
      - metric:
          label: Sample revenue
          value: "$7.6k"
      - chart: revenue
        title: Monthly revenue
        width: 2

03 — Build once, publish anywhere

One command resolves dbt artifacts, validates chart specs, executes chart SQL against your warehouse, renders charts with Altair, and emits files you can publish:

target/glyf/
├── compiled/     resolved chart SQL
├── charts/       rendered PNG / SVG, and chart metadata
├── data/         chart rows and Vega specs — internal, never published
├── dashboards/   generated dashboard pages
├── assets/       CSS and fonts
├── index.html    landing page
├── bundle.json   manifest of everything built
└── site/         self-contained static site  ← publish this

No BI server to maintain. Drop site/ into S3, GitHub Pages, a docs site, or a CI artifact. Publish site/ rather than target/glyf/: the rest is working output, and data/ holds the raw rows.

A published site carries the data behind its charts unless you ask otherwise — see what a published site exposes.

CLI

Command What it does
glyf init Scaffold glyf config, chart, and dashboard directories
glyf doctor Check dbt artifacts, chart files, and SQL execution
glyf build Full pipeline: compile, render, and export
glyf serve Serve the generated site locally
glyf list List discovered charts and dashboards
glyf validate Validate chart and dashboard specs without rendering
glyf render Render charts only
glyf dashboard Build dashboards only
glyf export Export the publishable site (--clean, --zip)

Point any command at another project with --project-dir:

glyf build --project-dir examples/sales_dashboard

Examples

Four runnable projects live in examples/: simple_dbt, sales_dashboard, product_analytics, and finance_metrics.

uv sync
cd examples/simple_dbt
uv run dbt seed --profiles-dir . --full-refresh --no-partial-parse
uv run dbt run --profiles-dir .
uv run dbt compile --profiles-dir .
uv run glyf build
uv run glyf serve

Then open examples/simple_dbt/target/glyf/site/index.html.

Who it's for

Analytics Engineer You work in dbt and version-control everything. You should not need LookML or a BI platform UI to publish a declared dashboard artifact.
Data Scientist Write SQL-style chart definitions that run in the pipeline and stay current, instead of one-off notebooks that drift.
Data Leader Open source, runs locally, and produces outputs your team already knows how to deploy and review.
Application Engineer The data team owns the spec; you consume rendered output without negotiating with an embedded analytics vendor.

Status

Capability
dbt ref() and source() resolution from manifest.json shipped
GGSQL chart definitions, SQL execution, Altair rendering shipped
Warehouse execution through the dbt profile (DuckDB, Trino, Snowflake, BigQuery) shipped
Dashboard YAML, Python macros, self-contained static site shipped
PNG / SVG chart artifacts and --zip export shipped
Generated typed React components planned
MCP server so agents can reason about the chart graph planned
Visual diff between builds as a CI artifact planned

See ROADMAP.md for the longer view.

Documentation

The full docs site is built from docs-site/ and published at glyf.pages.dev. These guides are also readable directly in the repository:

Quickstart First build, end to end
Configuration glyf.yml reference
Visualisation syntax The GGSQL grammar
Dashboard YAML Layout, sections, macros
dbt integration Artifacts, ref(), adapters
CI/CD Building glyf in a pipeline
Troubleshooting Common failures

Contributing

Developing from this repository
uv sync

Dev dependencies include dbt-core and dbt-duckdb for the bundled examples.

The Makefile runs the same checks locally and in GitHub Actions:

make ci                      # the full pipeline
make ci PYTHON_VERSION=3.12  # against a specific Python

make on its own lists every target. Individual steps: make install, make test, make coverage, make build, make dashboard-ci. make test runs pytest with coverage and writes coverage.xml, which CI uploads to Codecov.

Run the docs site locally with Node.js installed:

cd docs-site
npm install
npm start

Issues and pull requests are welcome. Paths in glyf.yml and dashboard YAML use forward slashes on every platform.

License

Apache 2.0

Download files

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

Source Distribution

glyf_core-0.5.0.tar.gz (268.8 kB view details)

Uploaded Source

Built Distributions

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

glyf_core-0.5.0-cp311-abi3-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.11+Windows x86-64

glyf_core-0.5.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.17+ x86-64

glyf_core-0.5.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.4 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.17+ ARM64

glyf_core-0.5.0-cp311-abi3-macosx_11_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.11+macOS 11.0+ ARM64

glyf_core-0.5.0-cp311-abi3-macosx_10_12_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.11+macOS 10.12+ x86-64

File details

Details for the file glyf_core-0.5.0.tar.gz.

File metadata

  • Download URL: glyf_core-0.5.0.tar.gz
  • Upload date:
  • Size: 268.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for glyf_core-0.5.0.tar.gz
Algorithm Hash digest
SHA256 5f56eeaac99a0d573e18d8614db1ff0db10f8ca14c2077fc646284c87397238f
MD5 09b5f7938c4a5d87dbab8b2bc8f3a789
BLAKE2b-256 017631f66ca22b294f7ba2bb00d314ce74c6c7fa6524241d56de8d715abc1795

See more details on using hashes here.

Provenance

The following attestation bundles were made for glyf_core-0.5.0.tar.gz:

Publisher: release.yml on glyf-data/glyf

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

File details

Details for the file glyf_core-0.5.0-cp311-abi3-win_amd64.whl.

File metadata

  • Download URL: glyf_core-0.5.0-cp311-abi3-win_amd64.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: CPython 3.11+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for glyf_core-0.5.0-cp311-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 431e2153a099a998d86caa6c282d09067ba66a26e99f1b0e50b26e8e0aaa9953
MD5 e12bb714faf7b224541d2a64b6233ab8
BLAKE2b-256 927e33a05df4bd87ea6c4c0e46d057387d3ab154742d62f13dc254abc422d853

See more details on using hashes here.

Provenance

The following attestation bundles were made for glyf_core-0.5.0-cp311-abi3-win_amd64.whl:

Publisher: release.yml on glyf-data/glyf

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

File details

Details for the file glyf_core-0.5.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for glyf_core-0.5.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d8ced2ab974065e384ba4d0d6fd514088f4a80f931eeeb7ea46ed0550c6d6533
MD5 e2dd17ae2164c9c966f3450649d7dc96
BLAKE2b-256 28229b9029e7a1b6ce45fc697557bdf9138266ea09e2fc800320d7668f15237b

See more details on using hashes here.

Provenance

The following attestation bundles were made for glyf_core-0.5.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on glyf-data/glyf

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

File details

Details for the file glyf_core-0.5.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for glyf_core-0.5.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c16cc7242de9c0e332130dfeee65c5fddf4991e440b663e436b1d3e00be24c68
MD5 3920d96e466786fcec578c0906c8ef16
BLAKE2b-256 90d78c786fe642de775b6d720b7d1703f6ba4d1d65893d24b11586a799cf74dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for glyf_core-0.5.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on glyf-data/glyf

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

File details

Details for the file glyf_core-0.5.0-cp311-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for glyf_core-0.5.0-cp311-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 16f4895f47a6ce59f3c6c1e4eaa5f8f4e1d478f615c0aed6151b5d5d829e0b56
MD5 f042c55598e0d219dd634b4fc1cf97ee
BLAKE2b-256 3b3b575ed5e0e136d7021139dc4a6167f75897bdebd7be9dccd85ed80995294f

See more details on using hashes here.

Provenance

The following attestation bundles were made for glyf_core-0.5.0-cp311-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on glyf-data/glyf

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

File details

Details for the file glyf_core-0.5.0-cp311-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for glyf_core-0.5.0-cp311-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 984221b8c91dedd5e14086531973f1dad86a5a2bf1f62f408c78b68f7f684aba
MD5 ac029b2f759d520ae7e27c47705d5d17
BLAKE2b-256 5a5da7ffb7b93c1ce517ef4c6110450f5596f83f635d45e3d5a06debe047fdc2

See more details on using hashes here.

Provenance

The following attestation bundles were made for glyf_core-0.5.0-cp311-abi3-macosx_10_12_x86_64.whl:

Publisher: release.yml on glyf-data/glyf

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

Release history Release notifications | RSS feed

0.6.0

6 files

This release

0.5.0 This release

6 files

0.4.0

6 files

0.3.0

6 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page