22 features · roadmap through v1.0

Every feature,
anchored to the pipeline.

The full list of what flexStats does at v1.0 — and what it's on the way to doing from today's v0.1. Each entry anchors to a specific pipeline stage or block in the open file format. If it's on this page, it has a use case, not a slogan.

01

Import

Where files come in. CSV and XLSX through Apple's own frameworks, drag-and-drop onto anywhere, structure and type detection that reports confidence rather than faking certainty.

CSV and XLSX import

CSV via Apple's TabularData — mixed quoting, escaping, and null detection handled correctly. XLSX via CoreXLSX (pure Swift, read-only). `.xls` is rejected with a helpful message asking you to resave as `.xlsx`; we don't pretend to handle file formats Microsoft itself has moved on from.

The spreadsheet Apple can read, flexStats can read.

Drag-and-drop onto anywhere

Drop a `.csv`, `.tsv`, `.xls`, or `.xlsx` onto the app icon, onto an open dashboard, or onto an empty-state view. flexStats picks the right import pipeline and surfaces the cleaner for you.

The drop target is wherever you're pointing.

Structure detection

A composable detector framework looks at your file and finds the header row, the data rows, the footnotes, the subtotals, and any blank-row-separated second table on the same sheet. Each detector reports a confidence score; ambiguity surfaces as a choice, not a guess.

The messy top and bottom of a spreadsheet stop being the user's problem.

Type inference with confidence

Every column is typed as string, number, date, currency, percent, or boolean with a confidence score. Mixed-type columns get flagged. Currency symbols are recognised. Date columns match common patterns. Dates-as-text get promoted automatically when the pattern is unambiguous.

The data arrives as data, not as strings you have to rescue later.

02

Cleaning

Where you fix the file without a formula bar. Highlighted issues, one-click suggestions, and a cleaner that asks when it's unsure.

Visual cleaning UI

A table view with highlighted issues and inline suggestions. "This column looks like dates stored as text — fix?" "This row looks like a footnote — remove?" Every suggestion is a one-click accept or reject; "I don't know" is a valid answer and the cleaner asks rather than guesses.

Fix the file the way you'd fix it in your head.

Original preserved alongside cleaned data

When you import, the original file is copied into the bundle at `data/<name>-original.<ext>` and the cleaned version is written to `data/<name>-clean.csv`. Rerun the pipeline any time — your cleaning isn't a one-way transform.

You can always get back to the data you started with.

Never shows you a formula

No formula bar, no column expression language, no "let's write a small DSL to fix your dates." The cleaning UI is a table with buttons. Advanced users get power features behind a toggle; first-time users never see them.

Nothing between you and the fix.

03

Charts

What you draw with. A small chart DSL, a form-based editor that edits the Markdown, and eleven chart types — three of them in real 3D on macOS 26.

Eleven chart types

bar, line, area, scatter, pie, donut, heatmap, waterfall — plus three 3D types on macOS 26 (scatter3d, bar3d, surface) via Chart3D. Waterfall draws running totals with colour-coded positive and negative bars. Donut takes a configurable inner radius.

Enough chart types to cover 90% of dashboards; not so many you forget which one you want.

A small chart DSL you control

`flexchart` blocks are YAML: `type`, `data`, `x`, `y`, optional `color`, `size`, `filter`, `sort`, `format`, `aggregate`, `height`. Field expressions can be bare column names (`revenue`) or aggregates (`sum(revenue)`, `mean(price)`). No JavaScript, no formula language — every addition needs a documented use case.

A language small enough to learn in one sitting, precise enough to not surprise you.

Form-based chart editor

Non-technical users don't type YAML. The visual editor exposes encodings, filters, sorts, and formats through pickers and sliders — and edits the underlying Markdown in place. The Markdown is always the source of truth; the form is a different lens on it.

Build charts by clicking; ship charts that a human can diff.

Chart palettes

Six built-in palettes — vibrant, ocean, sunset, forest, monochrome, pastel. Palettes are separate from themes, so you can run a muted theme with vivid data colours, or a vivid theme with subtle data colours. Pick what the room needs.

Recoloring a dashboard doesn't mean restyling it.

04

Layout

How the dashboard holds itself together. KPI cards, flexible grid blocks, and eight themes that carry the whole look in one setting.

KPI cards

`flexkpi` blocks render a single computed number with a label and an optional comparison value for delta display. Formats lock to currency, percent, compact, integer, or decimal. A small card. A big number. No further decoration.

The number you keep hearing in the meeting, on the page.

Flexible grid layout

`flexgrid` blocks group the next run of blocks into a columnar layout (2–4 columns) that wraps cleanly in print and PDF. Mix with headings, paragraphs, and standalone charts in any order.

Dashboards that look like documents, not like forms.

Eight themes

minimal (default), bold, print, executive (navy/gold, serif headings), startup (vibrant, rounded), academic (muted, serif), dark, ocean. The theme drives typography and chart defaults together, so changing it restyles the whole document at once.

The room you're presenting in has a name. Pick it.

Liquid Glass on macOS 26

Toolbar, sheets, buttons, and tooltips use Liquid Glass surfaces with graceful fallback to solid materials on earlier systems. Typography is load-bearing: proper small caps, old-style numerals where appropriate, hanging punctuation.

A dashboard tool that looks like it belongs on the Mac you're running.

05

Export

How work leaves flexStats. Print-ready PDF via PDFKit, vector where possible. A Quick Look extension for Finder and Spotlight.

Print-quality PDF export

Rendering uses PDFKit + ImageRenderer at print resolution, not screen resolution. Charts stay vector where possible through CGPDFContext. Cover page, page breaks, headers and footers come in v0.6 of the roadmap; the shape of the output is already informing the app.

A PDF that prints at any size without looking like a screenshot of a web app.

Quick Look extension

A Quick Look preview renders a `.flexstats` file's title and first chart in Finder or Spotlight — small binary, fast to generate, no full app launch required.

Tap space on a dashboard bundle. See the thing.

06

Format

Why the app is the author and the file is the deliverable. Open spec under CC BY 4.0. Round-trip tested. Original data preserved next to cleaned data.

Open file format

`.flexstats` is a macOS package with `dashboard.md` as the source of truth and CSV data under `data/`. The full spec is published under CC BY 4.0 — any tool can read or write the format. No proprietary container, no lock-in, no "sorry, you can only open it in flexStats."

A file format you could rewrite in another language if you wanted to.

Round-trip Markdown

Parse → AST → serialize → parse yields an identical AST. Every block type, every unknown fenced language, every frontmatter key round-trips byte-for-byte. This is tested on every PR.

Your dashboards survive version bumps because the format is stable.

Data refresh

The original file stays in the bundle alongside the cleaned CSV. "Refresh from original" re-runs the import pipeline — and surfaces schema diffs when your source column names change, so you can fix the chart, not the app.

Last month's dashboard still works against this month's data.

07

Intelligence

The quiet AI surfaces. Foundation Models on-device, a heuristic fallback, and a single toggle that turns the whole thing off.

On-device chart suggestions

Apple's Foundation Models framework powers "Suggest a chart" in the editor, column label hints during import, and plain-language descriptions of what a chart is showing. A heuristic fallback covers Macs without Apple Intelligence. All inference is on-device; nothing leaves the machine.

Help that doesn't send your data anywhere.

Intelligence, fully opt-out

Settings → Intelligence carries a single toggle that disables every AI-assisted surface. No phone-home, no analytics fallback, no "cloud if local is slow."

Turn it off once. It stays off.

What we don't do

A dashboard tool is only as portable as the file it writes.

Local-first
Nothing in your dashboard leaves your Mac. Intelligence runs on-device via Apple's Foundation Models framework.
Open format
The .flexstats spec is published under CC BY 4.0. Any tool can read or write it.
No subscription
One-time purchase for the whole app. Matches the rest of the pixeLantern line.
No lock-in
dashboard.md is plain Markdown; data is plain CSV. If you ever leave flexStats, you don't leave anything behind.

Want to know when the next pipeline stage lands?

The roadmap lays out every version from today's skeleton through v1.0. Send a note and we'll add you to the list — you'll hear from us when the stage you care about goes in.