Tablumo User Guide
Documented version: v1.23.0 · June 2026 · This guide is updated with every release.
Getting started
Tablumo runs entirely in your browser. Open it, drop a data file onto the page, and you're analyzing — there is nothing to install and no account to create. The first screen shows a single drop area; after your first import it shrinks to a compact + Add data button so the screen belongs to your data.
Finding your way around
Everything you navigate with lives in the left sidebar. At the top, Tables lists every file you've imported — click one to switch to it, hover it for the × that closes it (with undo), or right-click it for more (see below). Below, Views switches between Data, Chart and Dashboard for the current table; your dashboard pages appear right underneath, one click away, and the Filters item shows and hides the filter panel (with a badge counting active filters). The bottom group holds Analyses, Feedback, What's new and the light/dark switch.
The slim top bar always shows where you are — table › view › page — and the autosave status sits in its corner. Need more room? Collapse the sidebar to a narrow icon rail with the panel button (in the sidebar or the top bar); every icon keeps working, and Tablumo remembers your choice next time.
Rename, export & close tables

Right-click any table in the sidebar's Tables list for the three things you do with a table as a whole:
- Rename — give the table a name that means something: "Pipeline 2026" instead of sample_data_sales_opportunities. Double-clicking the table works too. Type the new name, press Enter to save or Esc to keep the old one. The new name follows the table everywhere — the top-bar breadcrumb, the ⌘K palette, dashboards, even the file name of a CSV export — and it's remembered across reloads and in saved analyses. Nothing else changes: your filters, dashboards and calculated columns stay exactly as they are.
- Export as CSV — downloads that table with its own filters and sorting applied, even if it isn't the table you're currently looking at. The file name says (filtered) when filters are active.
- Close table — same as the hover ×, including the eight-second Undo.
⌘K command palette

The fastest way around Tablumo isn't clicking at all. Press ⌘K (Mac) or Ctrl+K (Windows/Linux) — or click the Search box in the top bar — and type where you want to go:
- A view — "data", "chart", "dash" — switches the workspace.
- A table — type part of its file name to jump to it.
- A dashboard page — type its name to open that board.
- A column — picking one opens the filter panel and starts a filter on that column. Two letters of "Region" and you're filtering by region; if the column is already filtered, Tablumo just takes you to it.
- An action — Add chart to dashboard, New calculated column, Export CSV (your filters applied), Open analyses, theme and sidebar switches, Send feedback, What's new.
Everything works from the keyboard: type to search, ↑↓ to move, Enter to run, Esc to close. Matching is forgiving — word starts count ("opp" finds sample_data_sales_opportunities), and so do parts of words.
Importing data
Supported formats
CSV, TSV and plain-text tables, plus Excel workbooks (.xlsx and .xls). You can drop a file anywhere in the window, use the Choose files button, or click + Add data in the sidebar. Several files at once are fine — each becomes its own table in the sidebar's Tables list.
What Tablumo figures out for you
Delimiters (comma, semicolon, tab, pipe), header rows and column types are detected across the whole file, not a sample — so a column that turns numeric after row 10,000 is still typed correctly. Each column header shows a type badge (text, number, date, time, true/false); hovering it shows how many empty values the column has.
Large files & the disk-backed engine
Tablumo keeps its data engine's database in private on-device browser storage (OPFS) and pages table data to disk, so a file's size is not capped by memory: big files stream to disk as they import, and filters, charts and dashboards query them from there. Everyday files stay fully in memory and are exactly as fast as ever — only genuinely big files (over 150 MB) take the disk route. The bottom of the sidebar shows which engine you got: Disk-backed engine, or In-memory engine if this browser has no private disk storage or another Tablumo tab is using it — everything still works there, just with the old memory ceiling. Nothing leaves your machine either way.
While a file imports, the status line shows its size ("Importing data.csv (936 MB)…"); files of 100 MB and up add a short note about what to expect, and after a few seconds an elapsed timer starts counting — a long import never looks frozen.

Two honest notes. Big tables survive reloads since v0.67: the on-disk database is the store, so after a reload they re-attach in about a second instead of re-importing — and since v0.68 they're included in saved analyses and .tablumo exports too (one stored copy, referenced — the honest trade is that a big file occupies disk twice: database plus original bytes). And working memory for any single operation is capped at about 1.5 GB so a giant sort can never crash the tab — an operation that truly needs more stops safely with a plain-language explanation, leaving your session and other tables untouched.
Excel specifics
Multi-sheet workbooks import as one table per sheet, named file · Sheet. Dates keep their time-of-day even when Excel's display format hides it. Empty sheets are skipped; formula cells contribute their computed value.
Combining tables

Data often arrives in related files — opportunities in one export, the activities logged against them in another, linked by a shared ID. With two or more tables loaded, click Combine tables in the sidebar (or press ⌘K/Ctrl+K and type "join") to bring the columns of one table into another:
- Start from the table whose rows the combined table is built around.
- Bring in columns from the other table.
- Match rows where… — Tablumo suggests the linking fields by comparing column names, types and a sample of actual values (for the sample data it finds Opportunity ID = Opportunity ID on its own). If it guessed wrong, both sides are ordinary dropdowns. Need more than one shared field — say a targets file that lines up on Region AND Fiscal Period rather than an ID? Click + Add another matching field: rows only combine when every pair agrees, and each extra pair has its own ✕ to remove it.
- Rows to keep — All rows (the default) keeps every row of the table you start from; rows without a match simply get their new columns empty. Only rows with a match leaves the unmatched rows out of the combined table — handy when you only want to analyze what links up. Your original table keeps all its rows either way.
Before anything is created, Tablumo shows the honest numbers: how many rows find a match, what happens to the ones that don't, and exactly how many rows and columns the combined table will have — following the "Rows to keep" choice, so there are no surprises. If a row matches several rows in the other table, it appears once per match — and the dialog says so. When two tables share a column name, the brought-in one is renamed after its table, e.g. Owner (activities).
The combined table appears as a new table in the sidebar and behaves like any imported file: filter it, chart it, build dashboards on it, add ƒx columns, export it — and it's saved with your session and analyses. Your original tables stay untouched.
Refreshing a combined table

A combined table is built at a moment in time — but Tablumo remembers how it was built. When one of the originals changes (you add a ƒx column to it, or refresh it if it's a combine itself), right-click the combined table in the sidebar and choose Refresh combined table. The match re-runs against the originals as they are now, and the result replaces the old data in place:
- Everything stays attached. The combined table keeps its identity, so your filters, sorts, dashboard pages, ƒx columns and column arrangements carry straight over. New columns the originals gained flow in; a filter or sort on a column that no longer exists is removed rather than left broken.
- An amber dot tells you when it's worth it. The dot on the combined table in the sidebar means "built from tables that changed". It watches row and column counts, so value-only edits can't always be detected — Refresh is therefore always available, dot or no dot.
- No dead ends. If an original was closed or a matching field was removed, the menu item is disabled and a note says exactly what's missing — re-import the original or combine again.
After a refresh, a short confirmation reports the new row count, and the refreshed data is what reloads and saved analyses restore from then on.
Comparing two versions of a table

Two exports of the same data — yesterday's pipeline and today's? Click Compare tables in the sidebar (or via ⌘K) and pick the two versions. Tablumo suggests the key column that identifies the same row in both files (it must be unique and non-blank in both — unusable keys are refused with the exact counts that disqualify them) and then shows you, before anything is created: how many rows were added, removed, changed and untouched, which columns changed most, and the net delta of every numeric column ("Amount +2.3M"). All exact database counts, never samples.
Create the comparison and you get a regular table of the differences: a Change column (added / removed / changed), a What changed column naming the edited fields, the old value next to the new one ("Close Date (was)"), and a signed (net change) column per numeric field whose sum is exactly the net delta — so you can chart "where did the pipeline move?" by any dimension, filter to "Stage changed", drill into rows, export. Your two originals stay untouched.
The differences table also reads like a diff: changed cells show the old value struck through with an arrow to the new one, numeric moves tint green when up and red when down, and the Change column wears Added / Removed / Changed badges — click one (or its chip above the table) to filter to just that kind of change. The "(was)" columns fold away by default to keep the table readable; the column count stays honest ("7 of 9 columns") and one toggle brings them back. All of this is display only — exports and charts see the same plain table as before.

Snapshot series — many versions of the same data

If you get the same export every day, you don't have to manage the versions yourself. Drop the new file while the old one is open and — when the columns match — Tablumo offers to keep it as a new version of that data. Say yes and it nests under the original in the sidebar with its date; say no and it stays an ordinary separate table. Versions are ordinary tables — filter them, chart them, export them — the series is just organization.
The date is taken from the file itself, honestly: a date in the filename wins (sales_2026-06-11.csv, 20260611, 11.06.2026), then the file's last-modified time, then plain import time — and the offer tells you which it used. Ambiguous filenames like 03-04-2026 are never guessed at. Wrong guess? Fix it right in the offer ("Change date") before accepting, or any time later via right-click → Change date… on the version. Versions always sort by date, so dropping yesterday's forgotten export after today's files it in the right place.
Comparing is two clicks: right-click a version → "Compare with previous version" (or the original → "Compare two newest versions") and the Compare dialog opens prefilled — the key column you confirmed last time is remembered for the series. With three or more versions, the menu also offers "Compare with…": pick any other version and the pair opens in date order — Monday vs Thursday, no manual picking.

A series with many versions doesn't crowd the sidebar: click the small arrow on the original table's row to fold the timeline behind an honest "N versions" badge, click again to bring it back. A freshly accepted snapshot auto-expands its timeline so it never lands out of sight, and your folded choices are remembered. And a series doesn't have to grow forever: right-click the original → "Versions to keep…" caps it. The dialog lists every version with its date, exact row count and — when Tablumo knows it — the original file's size ("50,000 rows · 13.5 MB"), and strikes through exactly which versions the chosen limit would close right now, before anything happens. From then on a new arrival closes the oldest version automatically, with the usual Undo. Closing is not deleting: files on your computer are never touched, and re-importing a file brings that version straight back. Automatic hot-folder import is on the roadmap.
The data grid

The Data view shows the first 100 rows of the current table with exact total counts in the meta bar. Click a column header to sort ascending, again for descending, a third time to switch sorting off. Shift-click adds secondary sort columns — numbered badges show the priority. Sorting happens on the full table by real value (numbers as numbers, dates as dates), with empty values always last.
Arrange columns your way: drag a column header sideways to move it — a highlighted edge shows where it will land. Hover a header and click the small ✕ to hide a column, or open the Columns button in the meta bar to tick and untick columns in bulk ("show all" and "reset" undo everything). Hiding is purely visual: filters, charts and CSV exports still see every column, and the meta bar reads e.g. "21 of 23 columns" so nothing disappears silently. Your arrangement is remembered per table.
Resize columns: every header has a slim handle on its right edge — it lights up when you hover. Drag it to make the column exactly as wide as you like; the rest of the table keeps its layout instead of reshuffling. Double-click the handle to auto-fit the column to its visible content, header included. Long values simply trail off with an ellipsis (hover a cell to read the full value), and widths are remembered together with order and hiding — per table, per drill-down, per dashboard table tile.
Hide rows you don't want counted: the grid's left edge has a tick column — tick a few rows (Shift-click ticks the whole range, the header tick takes the page) and click Hide N selected rows. The rows disappear from everything: counts, charts, dashboards, exports, even AI answers. It's a mask, never a delete — an honest "N rows hidden" pill appears next to the row count with view (see exactly the hidden rows) and restore (one click brings them all back), and the mask survives reloads.
Tables close via the × that appears when you hover them in the sidebar — an Undo snackbar gives you eight seconds to change your mind.
Right-click menu

Right-click anywhere on the grid for the actions that make sense at that spot. On a cell: Filter to this value keeps only matching rows, Exclude this value hides those rows, and Copy value puts the cell text on your clipboard. It works on every column type — even on an empty (null) cell.
On a column header: sort ascending or descending (the direction already active is greyed out), clear sorting, Filter on this column… (opens the sidebar with the right control added), Group by this column (see below), Auto-fit column width (and Reset column width once you’ve set one), hide the column, or start a new ƒx calculated column. Date column headers additionally offer Display date by… (see below).
Excluding shows up as a chip like "Stage ≠ Negotiation" — right-click more values to exclude them too. The sidebar lists everything you excluded struck through; untick a value to bring its rows back.
Dates by month, quarter, year — in any table
Raw timestamps are precise but hard to scan. Right-click a date column's header and choose Display date by: Year, Half-year, Quarter, Month, Week or Day. The column then shows clean period labels — "Jun 2026", "2026 Q2" — while sorting stays truly chronological, and a small badge on the header reminds you a display unit is active (pick Exact date to go back). It's display-only: filters, charts and CSV exports keep working on the real dates.
With a display unit active, right-clicking a cell offers Filter to this period and Exclude this period — the same honest date-range filters the charts write, shown as ordinary chips. The setting is remembered per place, like column widths: the Data view, each drill-down and each dashboard table tile keep their own.
Show a column as currency
Numbers that are money should look like money. Right-click a numeric column's header and choose Format as currency…: pick one of 16 common currencies and the column renders as €1,234.50 or CHF 99.90 — with each currency's real rules, so yen shows no decimals (¥1,500). A coins badge on the header (plus "· EUR") reminds you the column is dressed up; Plain number puts it back.
If your data carries the currency per row — a column with codes like "EUR" and "USD" — choose Code from a column… instead and each row formats with its own currency. Codes Tablumo doesn't recognize still format honestly ("XDR 42.00"), and messy values simply fall back to the plain number for that row.
Like date display units, this is display-only: filters, sorts, charts and CSV exports keep the raw numbers, hovering a cell shows the original value, and the setting is remembered per table — in drill-downs and dashboard table tiles too.
Group by a column — a summary without leaving the grid
Right-click any column header and pick Group by this column: the grid becomes a live summary with one row per value and a count of rows per group. A bar above the table shows what's grouped: add a second or third level with + Add column, switch the measure between Count, Sum and Average of any numeric column, remove a level with its chip's ✕, or click Back to all rows to return — nothing is ever changed in your data.
Date columns group by their display unit (months, quarters, years — set it first via Display date by). Click a group row to see exactly those rows: Tablumo writes an ordinary filter chip for the group, so the path back is the same ✕ as for any filter. The grouping is remembered per table and survives reloads. Currency columns format their Sum/Average/Min/Max as money here too, with the same per-group honesty as summary tiles.
A bold Total row stays pinned at the bottom: the same measures computed by the database across all rows in view — correct even past the 500-group display cut, with Average, Min and Max looking at the rows themselves, never an average of averages (hover it for the explanation). Right-click any group row for View these rows — the same drill-down a chart click opens, with the exact rows behind that group ("Jun 2026" opens precisely that month) — or right-click the Total row for View all rows in view.
Grouping by two or more columns? Sort by the first one and a subtotal row closes out each of its blocks — "Germany total" under all the Germany rows — alongside the grand Total. Subtotals do honest math: every underlying row of the block counts (including sub-groups past the display limit; Average, Min and Max look at the rows, never at the rows above). Not in that sort? The Σ Subtotals button in the table's header bar gets you there in one click. Subtotal rows click to filter and right-click to drill, scoped to that block. This works on dashboard summary tiles and in the grid's group mode alike.
The totals footer
Below the plain Data grid, every numeric column shows its Sum in a pinned footer row — computed over all rows in view with your filters applied, never just the 100 previewed rows, so it always agrees with what a chart or summary of the same view would say. Columns you show as currency total as money (hover for the raw number; with per-row codes the symbol appears only when every row in view shares one currency). The footer also appears in every drill-down, so "what do these rows add up to?" answers itself. It steps aside when there's nothing to sum or only one row.
Sum is only the default: right-click any footer value to switch that column to Average, Min, Max or Count distinct — average deal size next to total revenue, in one footer. Switched cells wear a small tag ("avg 1,234") so a non-sum is never mistaken for one, money stays money for Average/Min/Max (a count never wears a currency symbol), and your choice is remembered per column, like widths.
Filtering
Click Filters in the sidebar to open the filter panel and add a filter on any column. The control matches the column type: checklists with search for categories, min–max fields for numbers, from–to pickers for dates, and a contains-search for free text. All filters combine, and every view — grid, charts, dashboards — updates live with an exact "X of Y rows match" count.
Every active filter also appears as a chip above the view in plain words ("Region: EMEA, APAC", "Amount ≥ 50,000") — the chips bar sits on the right side of the page, above the data. Click a chip's ✕ to remove that filter, click its label to edit it in the sidebar, or Clear all to start fresh — the chips stay visible even when the sidebar is hidden. On a column you show as currency, range chips read as money — "Amount ≥ €50,000" — with the digits exactly as you typed them.
Filters can say "not". A value-list filter flips between is and is not with the dropdown at the top of its card — your ticked values carry over, so "Stage is Closed Won" becomes "Stage is not Closed Won" in one click. Text filters offer contains and does not contain. Both keep rows with empty values honestly: a blank merchant doesn't "contain Hilton", so it stays when you exclude Hilton — plain SQL would silently drop it. And the + Add filter… list offers every column, including ones already filtered (labeled "(another)"), so one column can carry two different conditions at once.
Match all — or match any — or your own logic. With two or more chips, every connector between chips is a button: click one to flip just that AND↔OR and build things like (Region AND Amount) OR Stage chip by chip — AND binds tighter, and parentheses appear around the AND groups whenever you mix, so the grouping is visible, not implied. A chip's right-click menu stays honest in either mode: members of an AND group show the rows they remove, a chip alone on its OR branch shows the rows only it adds.
For anything the connector buttons can't say, click Logic… on the chips bar (it appears from two chips up): a Salesforce-style editor where the chips are numbered and you state the combination — "1 AND (2 OR 3)", any nesting. A live row count previews the result while you edit, plain-words validation explains anything broken (an invalid expression can never reach the view), and Apply stays disabled until the expression is sound. You don't have to type: click a numbered filter row to insert it, use the AND / OR / ( / ) buttons to build the rest, and the ⌫ button takes the last token back out — whole tokens at a time, spacing tidied for you. Active logic shows as a pill on the bar (click it to edit, ✕ to return to the connector buttons), chips wear their numbers, and charts, dashboards, exports and the AI assistant all follow the same expression. Adding a filter joins with AND; removing one renumbers the rest automatically.

Right-click a chip to ask it what it's doing: View kept rows opens exactly the rows that chip keeps in the view, View removed rows opens exactly the rows it's hiding right now — the same sortable, exportable drill-down a chart click opens, with the true database count in the header. Kept and removed always add up to the rows passing your other filters (rows with empty values count as removed — honestly), so "what am I excluding?" is one click to answer and one more to verify — and since v0.91 the menu shows both counts inline ("View removed rows (27,588)") the moment it opens, so often the number is answered before any click at all. The menu also offers Edit in sidebar… and Remove filter.
The min–max boxes on a number filter hint with your data's actual bounds before you type ("min 100 – max 9,995"), and on currency columns the hints read as money — "min €1.2K", "max €9.9M". Hover either box for the exact smallest or largest value, so you can set a precise bound without hunting for it first.
Charts

The Chart view turns the current table into a bar, line, area, pie, scatter, histogram, heatmap or box plot chart. New charts configure themselves with a sensible grouping and measure — change anything via the controls: group-by column, aggregation (sum, average, min, max, count, count distinct), measure, and a Top-N limit.
Working with dates
When the X column is a date, a Dates by selector rolls the data up by year, half-year, quarter, month, week or day — labeled naturally ("2026 Q2", "Jun 2026") and always showing every period, so a quiet recent month can't silently disappear.
Area & histogram charts

Area charts work everywhere line charts do — same date roll-ups, reference lines, drill-downs and sweeps. With a Split by column the areas stack, so the top edge reads as the per-category total. Area is available on dashboard tiles too ("Show as → Charts ▸ Area").
Histograms show how a numeric column is distributed. Pick the column and roughly how many bins (~10 to ~50) — Tablumo snaps the bin edges to clean round numbers so the axis reads "250 – 500", never "13.7 – 27.4", and a note tells you exactly what you got (e.g. "20 bins of 50"). Your global filters apply, and the bins recompute under them.
Each bar is a doorway, like everywhere in Tablumo: hover it for the range, the exact row count and what share of the rows in view it holds ("1,234 rows · 12.4% of rows in view" — never rounded to a misleading 0% or 100%); click it to open exactly the rows in that range; drag across several bins to combine them into one range. Right-click offers the same View-these-rows and PNG export as other charts.

The rows dialog a sweep opens carries a "Filter to this range" button: one click turns the swept range into an ordinary filter chip the whole app follows. Histogram bins exclude their upper edge, and the chip says so honestly — it reads "Amount: 100 – <200" and keeps exactly the dialog's rows (a sweep reaching the last bin keeps its top edge, like the histogram itself). Edit the bound in the sidebar later and it becomes a normal inclusive filter.
Histograms work as dashboard tiles too (Show as → Charts ▸ Histogram, with Column and Bins controls). Clicking a bin cross-filters the rest of the page to exactly that value range — the chip reads "Amount: 0 – 50" and every other tile shows precisely those rows; Shift-click adds bins, dragging sweeps a wider range, and right-click drills into the rows behind a bin.
Heatmaps
A heatmap puts two categories on a grid — say Region across, Stage down — and colors each cell by the measure: darker means more, no legend study required. Small matrices print the value inside each cell (the text picks black or white for contrast automatically); larger ones rely on the tooltip. Combinations with no data stay blank — absence isn't a zero, and Tablumo won't paint one.
Cells are doorways too: click one to open exactly its rows (both categories applied), or right-click to filter or exclude by that combination. The X axis groups like bar charts do (Top-N, date roll-ups); rows are capped at the top 20 with an honest note when more exist.
Box plots
A box plot shows how a number spreads within each category — where a bar chart says "Sales in EMEA total 4M", a box plot says "half the EMEA deals sit between 20K and 80K". Pick a category for the X axis and a numeric Values column: each box spans the middle half of that group's values (the quartiles), the bold bar marks the median, and the whiskers reach the true minimum and maximum. Everything is computed by the database over all rows in view — never a sample — and a note under the chart explains the parts the first time you need it.
The usual doorways apply: hover a box for its five numbers (as exact money on currency columns) and an honest count of the values inside; click it to open exactly that group's rows; drag across several to see them together; right-click to filter or exclude the group. Categories order by median, biggest first, so the highest-typical group reads first; date roll-ups stay chronological.
Currency on charts
A column you formatted as currency keeps its symbol when charted: the value axis reads €1.2M, tooltips show the exact €1,234,567.89 (with the currency's own decimal rules — yen shows whole units), KPI tiles display money as money, heatmap cells and scatter axes follow suit — in the Chart view and on every dashboard tile. ƒx conversion columns bring their currency along automatically.
Reference lines & goal lines
To judge bars against a benchmark, use the Ref. lines control in the chart toolbar (bar, line and area charts). Toggle Average, Median, Minimum or Maximum — in any combination — and dashed lines draw across the chart, each labeled with its value ("Avg 2.75B"). The menu stays open while you mix and match, and the button summarizes what's on ("Avg, Max").
The statistics are honest about what you see: they're computed over exactly the points the chart shows — after filters and Top-N. On a stacked (split) bar chart the lines reference the stack totals; on a multi-line chart they span every plotted point. The bars underneath stay fully clickable for drill-downs.
On dashboard tiles too: bar, line and area tiles have the same Ref. lines control in their settings row. The lines recompute live as filters and cross-filter clicks change what the tile shows, and they're saved with the board. Currency measures label their lines as money ("Avg €1.5M").
Tooltips read the distance: with lines on, hovering a bar or point adds one muted line per statistic — "vs Avg 1.2M: +12%" — computed over exactly the values the line is drawn from, so tooltip and line always agree.
Goal lines: the same menu has a Goal box. Type a target — plain numbers, "1,500.25", or shorthand like 50k / 1.2m — and press Enter: a solid, bold-labeled line draws at your target, visually distinct from the dashed statistics, and tooltips add "vs Goal 50K: −10%". If the goal sits beyond your data, the axis stretches so the line (and the gap to it) stays visible. Clear the box and press Enter to remove it. On tiles the goal is saved with the board.
Splitting by a second column
Bar and line charts can Split by a second category: bars stack, lines fan out into one per value, and a legend appears. The top 12 series are shown, with an explicit note when more exist. Clicking a segment targets exactly that combination — e.g. "New Business in AMER".
Scatter plots
Pick numeric X and Y columns and optionally a Color by category. Large tables are sampled fairly (the note below the chart tells you when), with filters applied before sampling so the picture is never biased.

Draw a box around any cluster of points and the rows inside it open instantly. The dialog's "Filter to this box" button converts the box into two ordinary range filter chips (X between, Y between) — every view follows, each bound edits or removes like any filter, and drawing a new box replaces the old bounds instead of stacking contradictions.
Dashboards

The Dashboard view holds boards of tiles: charts, big-number KPIs and row tables. Add tiles with + Add chart / + Add number / + Add table / + Add summary, configure each via its settings button, drag tiles by the grip handle and resize from the corner. Boards are organized into named pages — add, rename (double-click the tab), duplicate or delete pages (with undo) from the tab strip; each page also appears in the sidebar under Dashboard for one-click switching.
Cross-filtering
Click a bar, slice or point and every other tile filters to match, while the clicked chart highlights your selection. The click rules work like PowerPoint: plain click selects just that value, Shift/Ctrl-click adds or removes values, clicking the lone selected value clears it. Drag across several bars to box-select all of them at once. Selections appear as removable chips; View rows opens the raw rows behind the current combination.
Scatter tiles box-select too: drag a rectangle across a scatter and every other tile filters to exactly the points inside it, shown as one honest range chip per axis. The scatter keeps all of its points and draws your box as a dashed outline, so you can always draw a bigger one — a fresh box replaces the previous selection. Right-click the boxed scatter and pick "Show boxed rows as a table": a details table appears directly below it, pre-named after your axes, live-following every box you draw and honestly returning to all rows when the selection clears.
KPI tiles
Number tiles show one big aggregate — total, average, count and more — formatted compactly (2.3M) with the exact value in the tooltip. Currency measures show as money: €4.57M, exact value on hover. They react to every filter and click, and while filtered they keep the unfiltered baseline visible underneath, so a number is never quietly out of context.
KPI goals
Give a number tile a target: open its settings and type a value into Goal — "80", "1,500.25" or "1.5m" all work. A slim progress bar appears under the big number with an honest readout like "82% of 50K goal". The bar caps at full, but the percent doesn't — beat the goal and it says "128%". Currency measures read as money ("82% of €50K goal"), and the progress follows every filter and cross-filter click live. It's the same saved target as a chart goal line, so switching a tile between bar and KPI carries it along. The bar stays a neutral color on purpose: whether beating a goal is good depends on the metric — sales, yes; costs, no.
Table tiles

+ Add table puts the actual rows on the board, next to your charts. The table follows everything on the page: global filters apply, and clicking a bar or slice (or sweeping a box) instantly narrows the rows to that selection, with an exact "x of y rows (filtered)" count on top. Clear the selection and the full table is back.
Each table tile has its own column settings — the same controls as the Data view and drill-downs: drag a header sideways to reorder, hover it and click the ✕ to hide, or use the Columns button. Click a header to sort (Shift-click for a multi-column sort). One tile can show five focused columns while another shows everything — neither touches the Data view, and it all persists with the page. The tile's CSV button exports all matching rows with the page's filters and clicks applied, not just the 100 shown.
Grouped table tiles

+ Add summary puts a grouped, pivot-style table on the board: one row per group, with value columns computed per group. It starts meaningful immediately — Tablumo picks a readable grouping and a summable measure — and everything is changeable via the tile's settings button: Group by up to three columns ("Group by Region, then Stage"), and up to five Value columns with Sum, Average, Min, Max, Count or Count distinct. Date columns roll up just like charts do (month by default; switch to year, quarter, week or day). Any plain table tile can switch into grouped mode the same way — set "Group by" back to None (raw rows) to return.
The summary is a full citizen of cross-filtering, in both directions. Click a row to filter every other tile to that group — the usual PowerPoint rules apply (Shift-click adds more groups, clicking the row again clears it) — and clicks on other charts narrow the summary, with an honest "x groups (filtered)" count on top. When a selection elsewhere targets the summary’s own group columns, the matching rows highlight instead of disappearing, exactly like a chart highlights its bars.
Money shows as money: Sum, Average, Min or Max of a currency column formats like €1,234,567.89 (hover for the raw number; counts never format). Even per-row code columns work group by group: an all-EUR group reads €30.00, a mixed group honestly stays plain. Click a column header to sort — group columns sort A→Z (dates chronologically), value columns biggest-first. The tile’s CSV button exports all groups (not just the 500 shown) with proper column names like "Region, Stage, Sum of Amount", filters and clicks applied.
A bold Total row pins to the bottom whenever there's more than one group — computed by the database across all rows the tile sees (filters and clicks applied), so it stays correct past the 500-group display cut; Average, Min and Max look at the rows themselves, never an average of averages. Right-click any group row for View these rows (the exact raw rows behind that line, date roll-ups included) plus the row's click action under its honest name — and right-click the Total row for View all rows in view.
Tile right-click menu

Right-click any tile's header — works on charts, numbers, tables and summaries alike. Rename opens the same inline editor as the pencil button. Duplicate clones the tile onto the same page, keeping everything: the custom name, chart setup, a table's column arrangement and sorting, a summary's group-by — the copy lands below the existing tiles and is independent from then on. Duplicating is the quick way to make variants: copy "Sum of Amount by Region", switch the copy's measure to Average, done.
View rows answers "what is this tile actually showing?" — it opens the drill-down with exactly the rows that tile sees right now: the page's filters plus the clicks on the other charts, with the honest filtered count and its own CSV export. Remove (shown in red) deletes the tile, labeled by what it removes — "Remove summary", "Remove chart".
Show as switches what the tile is: Number (KPI) and Table (rows) sit at the top level, and all chart types live in a tidy Charts ▸ flyout — the current choice is check-marked, and the whole menu works with the keyboard (→ opens the flyout, ← comes back).
Right-click on bars & slices

The menu also works on the data itself. Right-click any bar, pie slice or line point on a dashboard chart and it opens headed by the value you hit — "Stage: Negotiation" — so you always know what you're acting on. Filter dashboard to this does exactly what clicking the bar does: every other tile narrows to that value, shown as a removable chip above the board. View these rows opens the drill-down with precisely the rows behind that bar — the page's filters and the clicks on other charts included. Export chart as PNG saves the whole chart as a crisp image.

The same menu is available in the Chart view, where Filter to this value turns the bar you hit into a real filter — the same one the grid's right-click writes: it appears as a chip above every view, is editable in the filter panel, and applies to the grid, charts, dashboards and exports alike. It's date-smart: on a month, quarter or year axis, filtering to "Jun 2026" writes a date-range filter covering exactly that month, which you can then widen or narrow like any other date filter. View these rows and Export chart as PNG are there too. Its sibling Exclude this value hides those rows instead — one click answers "everything except Closed Lost". The chip reads "Stage ≠ Closed Lost", more excluded values accumulate into the same chip as you click, and the filter stays editable in the filter panel like any other. Excluding works on date axes too: hide a whole month, quarter, year, week or day — the chip reads "Close Date ∉ Jun 2026", more periods accumulate as you click, and the filter panel lists every hidden period by name (hover shows the exact dates; untick one to bring it back). It composes with your other date filters — a Q2 range plus "∉ Jun 2026" means exactly "Q2 except June" — and rows with no date are never silently caught: hide those with the (no date) bucket’s own exclude.
On a chart split by a second column, the menu knows both values — right-clicking a segment reads "Close Date: Jun 2026 · Region: EMEA", drills into exactly that combination, and Filter to these values applies both filters at once. Date axes drill by the same month, quarter or year roll-up the chart shows, so the row count always matches the bar.
Renaming tiles
Every tile starts with an automatic name like "Sum of Amount by Region" — and you can change it. Double-click a tile's title (on a KPI tile, the label under the number works too), or click the tile's pencil button, type the name your team actually uses — "Total pipeline", "Win rate by region" — and press Enter. Esc cancels.
Drilling down
Numbers are only trustworthy if you can see behind them. In the Chart view, click any bar, slice or point to open the exact raw rows it represents — with a precise count, sortable columns and CSV export. Sweep across several bars to drill into all of them at once; on a scatter plot, drag a rectangle to inspect exactly the points inside it. Esc closes the panel with nothing lost. When the rows came from a scatter box or a histogram sweep, the dialog also offers "Filter to this box / range" — one click turns what you drew into ordinary filter chips.

Choosing the columns a drill-down shows
Drill-down tables have the same column controls as the Data view: drag a header sideways to reorder, hover a header and click the ✕ to hide it, or open the Columns button to tick and untick in bulk ("show all" and "reset" undo everything). The arrangement is remembered per place — the Chart view keeps one per table, and each dashboard page keeps its own for View rows — so a focused pipeline page can show five columns while your other pages and the Data view keep showing everything.
The right-click menus work inside drill-downs too: sort, filter, exclude or hide straight from a column header or cell in the "View rows" window — same menu, same chips, same undo as in the Data view.
Calculated columns
Click ƒx New column in the Data view to create a column from an expression — arithmetic like revenue / quantity, conditions like CASE WHEN margin > 0.3 THEN 'high' ELSE 'low' END, or date functions like year(close_date). The dialog previews the first computed values live as you type and explains problems in plain language. The result is a real column: sort it, filter it, chart it, export it. Formulas survive reloads and can be removed from the same dialog — or edited in place (see below).
Describe it in plain language (AI)
With the AI assistant turned on, the ƒx dialog gains a describe-it box: type the rule in plain words — "amount in EUR when the currency is USD, at rate 0.92, otherwise the original amount" — and the model writes one formula. Nothing opaque happens: the formula lands visible and editable in the ordinary formula box, the same live preview validates it against your real data, and only your Add column click creates anything. Rules that would require inventing data ("find each company's revenue") are honestly declined instead of guessed. With the AI toggle off, the dialog is exactly as it always was.
Group values into buckets
Messy category data — "West Germany", "Germany (Berlin)", "DE" — cleans up without formulas: right-click a text column's header → "Group values…". The dialog lists the column's distinct values with row counts; tick the ones that belong together, name the bucket ("Germany"), and repeat for the next group. The result is an ordinary calculated column ("Country (grouped)") — filter it, chart it, group by it, export it. Values you didn't group keep their original text (or take the label "Other", your choice), and empty values honestly stay empty unless you explicitly group them.
Editing a formula
Got the formula almost right? Right-click the ƒx column's header and choose Edit formula… — the dialog opens pre-filled with the column's name and formula, live preview and all. Rename it, rewrite the formula, or both; Save changes replaces the values in place. The column keeps its position, width and settings, and filters and sorts on it follow a rename. If the new formula turns a number column into text, filters that no longer make sense are removed honestly rather than left broken.
No dead ends: if the new formula fails on your real data, the original column comes back untouched and the dialog tells you what went wrong. The ƒx dialog's list of existing calculated columns has a small edit button per column too, and Create a new column instead backs out of edit mode without closing anything.
Currency conversion
To convert money between currencies, open Currency conversion inside the ƒx dialog: choose the column to convert (say, Amount), the target currency (USD, EUR, GBP, JPY, CHF and more) and type your exchange rate — then hit Use this formula. Tablumo writes the formula, names the column for you ("Amount (EUR)") and rounds to the currency's customary decimals (yen gets none). You can still edit anything before adding.
The converted column shows up as real money in the grid — €1,234.50, CHF 99.90 — marked with a coins badge in its header, and since v0.69 its symbol carries onto chart axes, tooltips and KPI tiles too. Hover any value to see the unformatted number. Under the hood the column stays numeric, so charts, KPIs, filters and CSV export all work on the actual values, not on text.

Exporting
CSV on the data grid and in every drill-down downloads all matching rows — current filters and sort applied, no row cap, correctly quoted. File names say what they contain ("sales_filtered_2026-06-11.csv"). PNG in the Chart view saves the current chart as a high-resolution image on a solid background, ready for a slide or an email.
Sessions & autosave
Tablumo autosaves continuously to your own device — there is no save button. Close the tab, restart the browser, come back tomorrow: your tables, filters, sorts, charts and all dashboard pages restore exactly as you left them (a brief "Restoring your last session…" bar shows progress). Closing a table frees its storage after the undo window passes.
Big tables survive reloads too (v0.67): tables above 150 MB live in Tablumo's on-disk database and re-attach after a reload in about a second — no re-import, calculated columns included. When big data lands on disk, Tablumo asks the browser to protect that storage from eviction and reports honestly (in the engine status hover) whether it agreed; if the browser ever did clear storage while Tablumo was closed, you get a plain note naming what was lost — and where a stored copy exists, the table is rebuilt from it automatically.
Updates & the stable channel
Tablumo ships new versions continuously — but it never pulls the rug out. On the stable channel, a new release shows a small popup bottom-left: "New version available (v0.64.0)! Reload?" with the new version's headline, so you know what you'd get. Reload now applies it — your tables, filters and dashboards come back exactly as they were. Not now parks a highlighted Relaunch to update button at the bottom of the sidebar, which waits as long as you like: Tablumo never reloads on its own, and a dismissed version never pops up again.
Saved analyses
Autosave keeps the one workspace you're in — saved analyses let you keep many. Click Analyses at the bottom of the sidebar, type a name ("Q3 pipeline review"), and hit Save analysis. Tablumo snapshots everything: the data itself, filters, sorts, dashboard pages, calculated columns and column layout. The copy is fully self-contained, so whatever you do in your workspace afterwards can't change it.
The same panel lists your library, newest first. Open brings a saved analysis back exactly as saved — if a workspace is currently open, Tablumo asks before replacing it (save the current one first if you want to keep it). Double-click a name (or click the pencil) to rename it, the copy button duplicates an analysis — handy for "same dashboards, next quarter" — and × deletes with a one-click Undo right there in the panel. The top bar always tells the truth about what you have open: deleting the analysis you're working in resets its label to Unsaved analysis (your loaded data stays put), renaming it updates the label immediately, and undoing the deletion brings the name back.
Save & open from the top bar
Once an analysis has a name, the everyday loop never needs the panel again. The top bar (top left, next to the sidebar toggle) always shows which analysis you're working in — or Unsaved analysis until you name one. Right beside it: the save button re-saves under the current name in one click and flashes a green check when done, and the open button takes you straight to your library.
A small dot next to the analysis name means your workspace has changed since the last save. It's honest about it: Tablumo compares your live workspace against the saved copy — so the dot survives a reload if you really do have unsaved work, and it disappears again if you undo your way back to the saved state.
Folders

As your library grows, organize it: click New folder, type a name, Enter. Folder rows appear above your analyses, each showing how many analyses it holds (including everything in its subfolders). Click a folder to open it — the breadcrumb at the top (All › Sales › Q3) always shows where you are, and clicking any part of it takes you back. Create folders inside folders for as much structure as you like.
To move an analysis, just drag it onto a folder — or onto a breadcrumb segment to move it up. Saving while you're inside a folder files the new analysis right there; overwriting an existing analysis keeps it wherever it already lives, and duplicates land next to their original. Folders rename like analyses do (the pencil button).
Move analyses between machines (.tablumo files)
A saved analysis doesn't have to stay in this browser. The download button on any analysis row exports it as a single .tablumo file — your data, filters, dashboards, calculated columns and table names, all in one self-contained file. Since v0.68 that includes big tables: a multi-hundred-megabyte table travels inside the .tablumo like everything else (in your library it's stored once and referenced, so saving big analyses stays instant and lean). Put the file on a USB stick, a network drive, or just in a folder you back up.
To bring one back, click Import analysis at the top of the Analyses home and pick the file — older exports with the legacy .lens extension open the same way, so nothing saved before the rename is left behind. It works on any machine running Tablumo — or on this one, after clearing your browser. The import is always added to your library, into the folder you're currently viewing: if the name is already taken you get "… (imported)", and nothing existing is ever overwritten. Open it like any other analysis and everything is back, down to renamed tables and the exact dashboard layout.
Appearance

As of v0.32.0 Tablumo wears the stock shadcn/ui zinc theme — the same design language as ui.shadcn.com — in both modes, set in the Inter typeface. The font ships inside the app, so nothing is fetched from the network and Tablumo keeps working offline. In light mode the page is a soft zinc gray with white cards on top; in dark mode, deep zinc surfaces with subtly lighter cards. Charts follow along with a matching palette: deep blue, green, orange, purple and pink in dark mode; terracotta, teal, slate and sand in light mode. The redesign is complete as of v0.37.0: zinc theme, Inter, sidebar navigation, the ⌘K command palette — and now the structural details too. Dashboard tiles and filter cards are real shadcn Cards (the stock surface, border and shadow), KPI tiles use the classic stat-card layout (muted label on top, big number below), and every glyph in the interface is a crisp vector icon — no emoji anywhere. Everything works the same — it just looks the way modern tools do.
The theme switch at the bottom of the sidebar ("Light mode" / "Dark mode") flips the entire app — including every chart — between light and dark. On first visit Tablumo follows your operating system; once you choose explicitly, that choice sticks. What's new next to it opens the changelog — every release shows exactly when it was published, in your local time, and Show full history reaches back to the very first version — and Feedback sends a suggestion straight into development, optionally with the exact screen context attached.
The AI assistant (optional)

Tablumo can use Claude to help with your analysis — but only if you ask it to. The assistant is off by default: while it's off, no AI interface exists, no AI code loads, and nothing is ever sent anywhere. Turn it on under AI assistant in the sidebar by pasting your own Anthropic API key — the key is stored only in this browser (masked on screen, never written into saved analyses or .tablumo files), and requests go directly from your browser to Anthropic. There is no middleman server, because Tablumo has no server.
You see what it sees: the settings dialog shows the exact payload any request will include — column names and types, summary statistics, and the first N sample rows, where you choose N (zero means schema only). Never your full dataset.
The first skill is filtering by asking: with the assistant on, the filter sidebar gains a ✨ box. Type "open EMEA deals above 100k" and the answer comes back as ordinary filter chips — validated against your real columns, each one visible and removable like any filter you'd add by hand. Nothing is applied silently, and every number you read in Tablumo is still computed by the local database, never by the model. Nothing is applied silently.
The assistant can also build dashboards. On the Dashboard view, the ✨ Build with AI button opens a dialog with two modes. In Describe mode you write what you want — "a sales overview with win rate by region and a monthly trend" — and the model returns a plan in Tablumo's own dashboard format, validated against your real columns before anything exists. In Guided mode the model writes up to five multiple-choice questions about your actual data (audience? focus? time grain?), each with a free-text "Other…" escape; your answers drive the same pipeline. Either way you see a readable plan preview first, the build is applied as ordinary named pages you can edit like any others, and Undo removes exactly the pages it added — one click, nothing else touched.
After a build is applied, a Refine last build tab takes change requests in plain words — "make page 2 monthly", "add a win-rate KPI" — and shows a readable diff of what would change (added / removed / changed, per tile) before anything moves. Update build swaps the AI's pages in one step and re-arms the undo; pages you built yourself are never touched.
You also see what it costs. Before any dashboard request, the dialog shows a live estimate — roughly how many tokens your request will send and an honest dollar range for the answer. Every reply reports the exact tokens the API billed and their ≈cost, and a running per-browser tally sits in the dialog and in AI settings (with a reset button). The figures are list-price estimates checked against Anthropic's published prices; your Anthropic console remains the authoritative bill.
Build with AI after import
With the assistant set up, every fresh import greets you with a simple choice: Create from scratch — the grid and views exactly as always — or ✨ Create with AI, which jumps straight into the guided interview and builds a first dashboard from your answers. The banner never blocks anything (✕, Esc or "Create from scratch" all dismiss it), appears once per new table, and never again — not after a dismissal, not after a reload. If the assistant is off, the AI option says so plainly and explains what enabling it means instead of pretending to work.
Ask your data — the chat dock

With the assistant on, an "Ask your data" pill sits in the bottom-right corner whenever a table is open. Ask in plain words — "total Amount by Region", "top 5 stages by deal count" — and the answer appears right there as a small table. The honesty rule is absolute: the model never states a number. It only chooses what to compute, the local database computes it, and every answer carries a "Computed by DuckDB: …" line saying exactly what ran, plus the exact cost of the exchange. Follow-ups work ("now only EMEA", "same but by quarter"), per table.
Since Tablumo 1.0 the chat also takes instructions: "filter everything to EMEA", "add a win-rate KPI", "turn that bar into a monthly line", "new page comparing regions", "go to page 2". The change is applied right on your board — validated against your real columns, pages and tiles first — and the exchange shows an honest "✓ Applied" line with a one-click Undo that restores exactly the state the action replaced. Computed answers offer "+ Add as tile", turning the answer into a dashboard tile without another AI call. And every exchange carries a small "What Tablumo told the model about your view" disclosure — click it to see the exact one-line state summary that was sent with your question.
The privacy rules never bend: the model sees column names, types, statistics and your chosen sample size (down to zero rows) — never the dataset, and every number on every tile is computed by the local database.
Privacy
Everything happens locally: the import, the database engine, the charts, the autosave. Tablumo has no server — your files are never uploaded anywhere, and the tool works with the network unplugged. The disk-backed engine's storage (OPFS) is the browser's origin-private file system: on your device, invisible to other sites, cleared with the browser's site data. What you analyze is nobody's business but yours.
The optional AI assistant keeps this promise: off by default (off = nothing runs, nothing sent), your own key stored only in this browser, direct browser-to-Anthropic calls with no server in between, and only schema, statistics and a sample size you control — never the full dataset.
Current limitations
- The grid previews the first 100 rows (full data is always used for sorting, filtering, charts and export).
- The live (unsaved) session is per-browser — save it as an analysis and export a .tablumo file to move it between machines.
- Excel: all non-empty sheets import (no sheet picker); .ods isn't supported yet.
- Calculated columns are per-table and row-by-row (no window functions yet).
- Combine tables supports two tables per step (chain combines for more) and keep-all or only-matches; refreshing is manual via the right-click menu — Tablumo never changes a combined table behind your back.
- Reference lines offer Average, Median, Min and Max plus a typed goal line (no percentiles or trend lines yet); on dashboard tiles they persist with the board, in the Chart view they last for the session.
- Heatmaps and box plots live in the Chart view only (no heatmap/box-plot dashboard tiles yet); combo charts and maps aren't built yet.
- Currency symbols show in tables, grouped summaries, on charts and on KPI tiles; a per-row currency-code column charts as plain numbers (deliberately — mixed currencies can't share one symbol).
- Big tables (over 150 MB) survive reloads on the disk-backed engine (v0.67) and travel in .tablumo files (v0.68) — but in the rare in-memory fallback (no OPFS, or a second Tablumo tab) they honestly don't restore, and Excel sheets always stay memory-bound.
- Numeric/date filters use typed bounds (sliders planned); the AND/OR switch flips the whole filter bar (per-chip grouping planned); column types can't be manually overridden yet.