SQL in. One HTML file out. Built on DuckDB.

Write SQL.
Get a dashboard.

Write the SQL query you already know how to write, add a few -- @ comments, and asql renders it into a polished, self-contained HTML analytics report. No BI tool, no notebook, no JavaScript, no <div> wrangling. Your SQL runs through an embedded DuckDB engine — no server to stand up.

$ curl -fsSL https://www.asql.dev/install.sh | sh
First dashboard in about 60 seconds.

Windows or macOS? Use Docker below — no binary to unpack, and it’s the recommended path until native binaries for those platforms ship:

docker pull ghcr.io/cuiqanalytics/asql
docker run --rm -v $PWD:/work ghcr.io/cuiqanalytics/asql build report.sql

report.sql
-- @report
-- title: Revenue Dashboard
-- subtitle: 2026
 
-- @chart: trend
-- title: Monthly Revenue by Channel
 
SELECT
    date_trunc('month', order_date) AS date,
    acquisition_channel             AS series,
    sum(revenue)                    AS value
FROM read_csv_auto('orders.csv')
GROUP BY 1, 2
ORDER BY 1;
Monthly Revenue by Channel
Revenue Dashboard · 2026
900k 675k 450k 225k 0 Jan Apr Jul Oct
Direct Paid Partner

Three lines of SQL comments in, one multi-series chart out — asql build report.sql

Real reports, real SQL

Two excerpts from the reports shipped in asql-cli's examples/. Click a card to flip it — the annotated query on one side, the report it builds on the other.

Why asql

01

The chart is inferred, not configured.

Above your query, one comment names the intent — -- @chart: trend, ranking, funnel, waterfall, heatmap, and more — and asql reads the result shape to pick the mark, axes, series grouping, colors and number formats from there. No charting API to learn, just a keyword in a comment.

02

One file in, one file out.

Input is runnable SQL. Output is a single .html — no asset folder. Email it, commit it, drop it on any static host.

03

It stays SQL.

Every annotation is a -- comment. duckdb < report.sql still works — asql runs on DuckDB under the hood. The file never stops being valid, runnable SQL.

04

Two audiences, one source.

The same file builds an interactive dashboard or a print-ready narrative memo. One metadata line switches format.

05

Simple by default, precise when you need it.

Name your columns date, series, value and most reports need no overrides at all. When one does, you add a single line — @x, target, series-color — only where you need it; the defaults never disappear. A Claude Code skill teaches an AI agent this whole syntax, so even the overrides are one prompt away.

06

Any DuckDB extension, right in your SQL.

A -- @setup block runs before every query, so any community extension you can INSTALL in DuckDB — read spreadsheets, diff tables, attach Postgres or MySQL — is available to every chart in the report.

Why not just ask an AI to build me a dashboard?

It's a compiler, not a generator.

You can prompt an AI app builder for a dashboard and get one. asql is a different kind of tool.

Same input, same output, every time.

A prompt-generated dashboard is a fresh one-off each time you ask — re-run it and you may get a different layout, different chart choices, different code. asql build report.sql renders the same result every time.

Still just SQL, not a new app to maintain.

A generated dashboard is a new codebase — React, config, glue — that only the AI that wrote it really understands. Changing an asql report means editing the query you already had.

Diffable and reviewable.

git diff report.sql is a SQL diff anyone can read. No generated UI code to review.

No runtime you depend on.

One static .html file — no hosted app, no vendor account to view it, no server in the loop. Open it in five years.

Narrative format

One source, two audiences.

Add one line — -- format: narrative — and the same file builds as a print-ready, single-column document with a table of contents and templated prose that pulls real numbers from the queries.

Same source. Different audience.

The same asql report built as a narrative memo: title, table of contents, prose and inline figures.

It grows with you.

Today asql is free, runs on your machine, and leaves nothing behind but a file you own. That isn't a limitation to be fixed later — it's the foundation.

The same annotated SQL that builds a file on your laptop is what will keep a hosted dashboard current on a schedule. Same input, more places to put the output.

$ curl -fsSL https://www.asql.dev/install.sh | sh

Windows or macOS? Use Docker below — no binary to unpack, and it’s the recommended path until native binaries for those platforms ship:

docker pull ghcr.io/cuiqanalytics/asql
docker run --rm -v $PWD:/work ghcr.io/cuiqanalytics/asql build report.sql

Read the docs