trellum

Vibe-code a report.
Ship a professional dashboard.

Built with your favorite AI tools: Claude Code, Cursor, Codex or anything else you like. Shared with your team, rebuilt on schedule, hosted where everyone can find them.

$ git clone https://github.com/trellumhq/trellum.git # the full product is AGPL-3.0-only

made by anyone
Product QA Analysts Support Marketing Founders
written with
Claude Code Cursor Codex Gemini CLI …any agent

▼ the console below is live. Click a card, it opens.

trellum ■ acme▸■ growth ▾ Search reports… (Ctrl+K) amara@acme.com ▾
12 reports · ● 12 healthy · 0 errorsclick a card, it opens
★ favorites

live. This is how the portal behaves, not a picture of it. Click a card, flip a theme, toggle the delivery.

start here · free & open source

A report is one conversation.

You talk to your own harness, the one you already enjoy. It writes the report as plain Python and SQL in your repository. After the source install in the guide, python -m trellum.run turns that folder into what you saw above. No new tool. No DSL. No account.

You can start right now. Clone trellum, make reports on your own machine, and use the included portal when you want to schedule or share them.

you → Claude Code
weekly revenue by channel, our brand theme, flag the W8 pricing change
Claude Code
Wrote reports/weekly-revenue/: query, KPI row, trend chart, shared annotation. Built in 4.1s. Pushed report/weekly-revenue.
how a report is actually built

Any source. Combined. One dataset.

Warehouse, files, APIs. Every source you have, compiled together into one dataset, and every report builds from it. That's the speed, and that's the end of most of your ETL.

combine any source
Postgres & SQL Snowflake BigQuery DuckDB CSV & Parquet Sheets REST APIs + many more

And this is the trick: combine them. A CSV + your warehouse + an API, joined into the same dataset, in the same report.

into one compiled dataset
compiled dataset
columnar · cached · queried once
temporary. not a copy of your data
every report builds from it
weekly-revenue
€412k ▲9,180 ▲€44.9 ▲

✓ rebuilds in seconds. reads the dataset, not the warehouse

Your data stays yours. The dataset is a temporary compilation, rebuilt from source on refresh. It is not a replica living somewhere else.
Most of your ETL, gone. The combine step is the pipeline. Joins across sources happen at compile time, not in a second toolchain.
Why it's fast. Sources are queried once. Changing a report never re-queries the warehouse, so iteration takes seconds, even on large data.

⚡ live is an option, per report: skip the compiled dataset and query at view time. Viewers pick the parameters and get this minute's numbers. Choose it where freshness beats speed.

The framework makes the report.
The portal makes it reporting.

Make reports today, on your machine, for free. When one is worth sharing, put it on the portal: it gets a schedule, a home and an audience, current every morning, governed by the org. That's the product you saw at the top.

the portal, feature by feature

Everything the portal does.

Real behaviours, not marketing shots. The live tile is ticking right now.

Custom themes, everywhere

Defined once. Every report, email and PDF follows your brand.

acme darktrellum lightblossomyours ✦
13 built incharts, emails, PDFs+ yourstokens, type, palette
open a report in the console above and watch these cycle

The metrics layer

One definition of revenue. Reports claim it, and the numbers cannot disagree.

metrics.yaml · gross_revenue · v2 · iap + ad · €
weekly-revenue
€412k ✓
claims gross_revenue
board-pack
€412k ✓
claims gross_revenue
same id, same expansion at build time. consistency by construction

Live reports

Queried at view time; the viewer picks the parameters.

LIVE revenue-today allEUNA
€41.2kfresh as of 0s ago

Runs on a schedule

Built on the clock. The published report is simply current.

mon 07:00 — refresh 41s · build 4.1s
weekly-revenue · updated ✓
email a copy? an option, per report

Email delivery, built in

Themed email with the numbers inline, and the PDF attached when you want it.

✉ weekly-revenue → leadership07:02
⎙ board-pack.pdf → the board07:02
✉ churn-cohorts → growthmon

Shared annotations

Add "W8 · pricing change" once. Every report that shows W8 carries it.

⚑ W8 · pricing change. added once:
…appears on both. plus a studio calendar of every event

A/B testing, honest

Not just "B looks bigger". An uplift with an interval you can sign.

CUPED built in · plus the Experiments overview: every test, one page

Buddy, the AI assistant

Ask the portal about your own reports. It answers from the builds, with sources.

why did EU revenue dip in W12?
Paid spend paused 5 days in W12 — EU Paid only. → weekly-revenue, W12, EU
answers link to the exact report, filter and week

Share links, safely

Send a report outside the studio. Scoped, password protected, revocable.

trellum.dev/s/w-rev-8f3a1 · weekly-revenue
🔒 passwordset by you⏳ expiresin 14 days⌫ revokeone click
a link, not an attachment. always the current build, never a stale copy

Review what ships

Fetch repository changes, inspect the diff, and publish the exact commit you reviewed.

remote main fetched3 commits
reports changed4
reviewed headpublish

One overview

Every report, every studio, state at a glance.

weekly-revenue · ✓ currentmon 07:00
revenue-today · livenow
churn-v2 · ⎇ in reviewpreview ✓

Governed & observed

Your directory signs people in; the org frames studios; the audit log remembers.

SSO →
ORG · ACME
growth · 8finance · 5
SSO, MFA and audit logging included
the toolbox · from the framework

Every chart you'd reach for.
And zero walls when you don't.

Built in so you never build them. And never a limit on what your agent can invent on top.

None of them fit? There is no wall.

A report is code, so a component is whatever your agent writes. Any HTML, any JS, any visualization that doesn't exist yet. It arrives themed, filtered and wired to the same dataset as every built-in. No plugin API to wait for. No marketplace. Completely open, up to you.

# your agent, mid-conversation: self.add(RawHTML(""" <canvas id="anything"> … </canvas> """)) # any HTML it can imagine
3D surface
themed · filterable · shared data
flow diagram
themed · filterable · shared data
…even a game
playable · in a report · yes really
filters & cross-filtering date selectors tab groups comparison tables CSV export themes & custom themes shared annotations

Start with a conversation.
End with reporting that runs itself.

You saw it behave at the top. Explore the demo gallery, then run the complete product on your own infrastructure.

trellum▸demo▸tour ▾ themes still cycling →
trellum.dev/demo/· generated reports. click a bar, flip a theme
Reports
Gallery
interactive + exportable
Sources
Offline
synthetic demo data
Themes
13+1
including yours
the same report, still running
The framework · open source

Your agent writes the first report today. Free, local, no account.

$ git clone https://github.com/trellumhq/trellum.git · view on GitHub →
The portal · where it runs

Published on merge. Scheduled or live. Yours to govern.

AGPL-3.0-only · run it on your own machines