Skip to content

PlotPress

PlotPress is a self-hosted, markdown-first dashboard framework. Every dashboard is a folder of plain .md and .yaml files; nothing more. Charts render with Observable Plot, the frontend is Astro with islands for interactivity, and a single Go binary serves the data behind a group-scoped authorization layer.

Most BI tools store dashboards in a database, behind a UI editor. That makes them hard to review, hard to diff, hard to template, and hard to take with you. PlotPress treats a dashboard the way you’d treat any other piece of code: a folder in git, reviewed in a pull request, deployed by Flux or kubectl apply.

PillarWhat it means
Markdown-firstProse, headings, tables, and Plot blocks live together in .md. The dashboard reads like documentation because it is documentation.
One folder per dashboardEverything a dashboard needs — content, queries, config — sits in a single folder. Nothing is implicit.
Server-trusted SQLQueries are named YAML in the dashboard folder. The browser never sees raw SQL or a connection string; it sees a query name and parameters.
Group-scoped data sourcesConnections are declared centrally and bound to user groups. A dashboard can only run a query against a connection its viewer is allowed to use.
Self-hosted by defaultSingle Go binary + SQLite. Deploy with docker run or the Helm chart. Postgres support is on the roadmap when multi-replica becomes a need.
LayerChoiceNotes
FrontendAstro + Observable PlotStatic-rendered pages with Plot in client islands; near-zero JS on read-only views.
BackendGoSingle static binary; HTTP API for query execution and auth.
Metadata storeSQLite (default)Users, groups, sessions, audit log. Postgres planned.
Data sourcesPluggablePostgres, MySQL, ClickHouse, DuckDB, SQLite. Each connection is opt-in per group.
DeploymentDocker / HelmSingle image; chart shipped from this repo.