smaltbi smaltbi

Small. Alternative. Insight.

Business intelligence in the browser, powered by smaltdb

smaltbi is a report designer and viewer. Load CSV, JSON or Parquet files, model them with relationships and SQL measures, drag fields onto a canvas, and publish the result as a static site. Every report runs in its reader's browser, on smaltdb, a fast alternative database for the browser.

A live report

This is the sample report for a small coffee and tea shop: about 17,000 sales across customers, products and stores, loaded into smaltdb in your browser. Click a bar or a region to filter the page, double-click a column to drill down, or right-click a country on Customers & stores to drill through.

What smaltbi does

Drag fields, get charts

Drop a field on the canvas and smaltbi picks a visual. Change its type, add fields to its axis, legend or values, and format it from the side panel.

Model with SQL

Relationships, measures written as SQL aggregates that build on each other ([Revenue] - [Cost]), calculated columns and drill hierarchies. The model view draws it all as a diagram.

Every visual shows its SQL

Each chart runs one readable query, joined along your relationships. Open the SQL tab to see it, copy it, or replace it with your own.

Interactive reports

Cross-filtering, slicers, report, page and visual filters, drill down and drill-through, tooltips, bookmarks, and the view state in the link.

Themes

Portable theme files set colours, palettes, fonts and layout, in light and dark. The default theme is the smalt brand; switching themes never re-runs a query.

Your data stays in your browser

smaltdb runs in a Web Worker and keeps data in memory or in the browser's private storage (OPFS). The page fetches only the files a report loads.

Publish a report as a static site

A report is one JSON file that diffs well in git. Publishing packs it with the viewer, smaltdb and its data into a folder for any static host. The sample is one such site.

{
  "smaltbi": 1,
  "name": "Sales",
  "data": { "steps": [
    { "import": "data/sales.csv", "table": "sales" },
    { "import": "data/customers.csv", "table": "customers" }
  ] },
  "model": {
    "relationships": [
      { "from": "sales.customer_id", "to": "customers.id" }
    ],
    "measures": [
      { "table": "sales", "name": "Revenue",
        "sql": "SUM(sales.quantity * sales.unit_price)" }
    ]
  },
  "theme": "smalt",
  "pages": [ … ]
}
  1. Design. Build pages in the designer; it saves the report as you work.
  2. Publish. Download the site as a ZIP from the designer, or run node scripts/publish.mjs report.json out/ in a pipeline.
  3. Host. Unzip it onto GitHub Pages, Netlify, S3 or any web server. Readers' browsers build the data and run the report.