Examples

Every example is a standalone Elm application, compiled and deployed at elm-table-examples.pages.dev. Each one ports the TanStack Table example of the same name, and each page shows the running table above its full Elm source.

The feature guides embed the matching example at the bottom of the page, so you can read the guide and watch the thing it describes in the same place.

Basic Examples

Example What it shows Guide
Basic The smallest possible table: four rows, six columns, no state. Quick Start
Basic (External State) The table state lives in your model and you can inspect, reset, and replace it. Table State
Basic (Dynamic Columns) Columns built at runtime from the data's own keys. Column Definitions
Header Groups Nested column groups rendered as multi-row headers and footers. Header Groups

Feature Examples

Example What it shows Guide
Kitchen Sink (All Features) Every feature on one table: sorting, filtering, grouping, expanding, selection, pinning, visibility, ordering, sizing, pagination. Features
Cell Selection Rectangular cell ranges with click, shift-click, ctrl-click, and keyboard movement. Cell Selection
Cell Spanning Merge adjacent cells with row and column spans. Cell Spanning
Column Filters Per-column text and range filters plus a global filter. Column Filtering
Column Filters (Faceted) Filter inputs driven by faceted unique values and min/max. Faceting
Bucketed Faceted Filters Faceted values grouped into buckets for numeric and date columns. Faceting
Fuzzy Search Filters A custom fuzzy filter function with match ranking. Fuzzy Filtering
Column Ordering Reorder columns through state. Column Ordering
Column Ordering (DnD) Drag headers to reorder columns using HTML5 drag events. Column Ordering
Column Pinning Pin columns to the left or right edge. Column Pinning
Column Pinning (Split) Pinned regions rendered as three separate tables. Column Pinning
Sticky Column Pinning Pinned columns stay put with position: sticky while the rest scroll. Column Pinning
Column Sizing Column widths from state with min and max clamping. Column Sizing
Column Visibility Show and hide columns with checkboxes. Column Visibility
Expanding Nested sub-rows with expand and collapse. Expanding
Expanding Sub Components Expand a row to reveal arbitrary content instead of sub-rows. Expanding
Grouping Group rows by one or more columns. Grouping
Aggregation Aggregated values on group rows and in footers. Aggregation
Grouped Aggregation Nested groups with merged aggregates at every level. Aggregation
Pagination Client-side pages with page size, page jump, and counts. Pagination
Row DnD Drag rows to reorder the underlying data using HTML5 drag events. Rows
Row Pinning Pin rows to the top or bottom of the table. Row Pinning
Row Selection Checkbox selection with all, some, and per-row state. Row Selection
Sorting Click and shift-click headers for single and multi-column sorting. Sorting

Specialized Examples

Example What it shows Guide
Realtime Trading Prices updating on a timer while sorting and filtering stay live. Data

Not ported

Some TanStack examples exist only because of the JavaScript API and have no Elm counterpart.

TanStack example Why not
Basic (useAppTable), Basic (useLegacyTable), Basic (Subscribe), Basic (External Atoms) Four ways to construct a React table instance. There is one way here: build a Config and hold a State.
Composable Tables, Custom Plugin Both extend the table instance. See Features.
Column Resizing, Performant Column Resizing Drag interactions against the DOM. See Column Resizing for the sizing state and how to drive it yourself.
Experimental Web Workers Plugin, Experimental Spreadsheet Experimental TanStack plugins.
With TanStack Virtual (rows, columns, infinite scrolling) See Virtualization.
With TanStack Form, Query, Router Integrations with other JavaScript libraries.
Every component-library example (Shadcn, Material UI, Mantine, Chakra, Hero UI, React Aria) React component libraries. You write the Html here.

Running them yourself

The sources live in examples-site/src/ in the repository. Build the whole set with make examples-site from the repository root, or one at a time with bun run build.ts <slug> inside examples-site/.