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.6.0.tar.gz (279.1 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.6.0-cp311-abi3-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.11+Windows x86-64

glyf_core-0.6.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.6.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.6.0-cp311-abi3-macosx_11_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.11+macOS 11.0+ ARM64

glyf_core-0.6.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.6.0.tar.gz.

File metadata

  • Download URL: glyf_core-0.6.0.tar.gz
  • Upload date:
  • Size: 279.1 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.6.0.tar.gz
Algorithm Hash digest
SHA256 229ba17bdcae10a1a6d389cbd6e28a84ec92ef91b7080c4b025fb2574a1f8b52
MD5 fe0b383cfd72fa232d03f3a2ebc3a037
BLAKE2b-256 0443e31640c4301767621bebbb5d8080f63030e1a23e671ec0cb5d8f836ecb9e

See more details on using hashes here.

Provenance

The following attestation bundles were made for glyf_core-0.6.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.6.0-cp311-abi3-win_amd64.whl.

File metadata

  • Download URL: glyf_core-0.6.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.6.0-cp311-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 761dc6b69c49d9e0bafe2a538fa88c852b7c41d00571b538281f3e15522b9f42
MD5 dd59995a5d2e89d84194111ce062b3e8
BLAKE2b-256 a430a193984af32a826b8cd93d7c3e0c4a9ab83d33ed69f37e1830e9a11c6b45

See more details on using hashes here.

Provenance

The following attestation bundles were made for glyf_core-0.6.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.6.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for glyf_core-0.6.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7af2c0d54a429c01a34dcf87c58b33f3870a92fb827dee622ec0a6cf65db5087
MD5 bbce20adfda3c5d69ad8c9a65286f942
BLAKE2b-256 8fad500df78c86ce5a21d76161b043f94302c724e8d1eaa18c90878e1301b637

See more details on using hashes here.

Provenance

The following attestation bundles were made for glyf_core-0.6.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.6.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for glyf_core-0.6.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9e80cd9f3cb7b85a078ac32bcb3e3998a73293dee04070ecbcebce86c107e44d
MD5 27023fb339c4a80a4ddd4abc655252db
BLAKE2b-256 cf4792d891fc5ce3291c2d53aaa29108a03e252bac76864d7c9b54935e2b2dd6

See more details on using hashes here.

Provenance

The following attestation bundles were made for glyf_core-0.6.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.6.0-cp311-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for glyf_core-0.6.0-cp311-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 edbe771c1c576114dcabb96352fc5092ab5cadb2d25db01c843f267210b85e60
MD5 ff5ad68d72418e1d2a2f6b8b74cdaeb7
BLAKE2b-256 5d3a60f637933bb0d61415c94d0f095c3c9a251a6244cb395531db1d48003aab

See more details on using hashes here.

Provenance

The following attestation bundles were made for glyf_core-0.6.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.6.0-cp311-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for glyf_core-0.6.0-cp311-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8511f248a29d03beeea121e8d22530e8111301c44729aba5927321104a503f83
MD5 ad2953e891516c385e10c6b021358fa3
BLAKE2b-256 f1a8b8f8a54099341da2b8ebfdc23754ec493fcb55e1940bebc7e094770a58af

See more details on using hashes here.

Provenance

The following attestation bundles were made for glyf_core-0.6.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

This release

0.6.0 This release

6 files

0.5.0

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