Data table
A customers table with status filter tabs, search, row selection with select-all and paging. Works on any rows you pass.
Customers
9 accounts, 4 paying.
| Customer | Status | Plan | Joined | MRR | |
|---|---|---|---|---|---|
| KFKettle & Fernops@kettleandfern.com | Active | Growth | Mar 2024 | $490 | |
| FFieldnotehello@fieldnote.app | Trial | Starter | Nov 2025 | — | |
| HCHarbor & Cobilling@harbor.co | Past due | Growth | Jan 2025 | $490 | |
| QSQuill Studioteam@quill.studio | Cancelled | Starter | Jun 2024 | — | |
| PParallelfinance@parallel.dev | Active | Scale | Aug 2023 | $1,490 | |
| MSMoss & Stonehi@mossandstone.com | Active | Starter | Sep 2025 | $49 |
9 shown
Page 1 of 2
Installation
1. Install a design system if the project does not have one yet: Cueit, Skita or Folio.
2. Add the block. It installs to
components/satori-ui/blocks/with the shadcn/ui primitives it uses.npx shadcn@latest add @satoriui/data-table-013. Render it inside the system's scope. With the scope class on
<html>there is nothing more to do. To try another system, change the class.app/page.tsx12345import { DataTable01 } from "@/components/satori-ui/blocks/data-table-01";export default function Page() {return <DataTable01 />;}
How it adapts
It is built from shadcn/ui primitives, Avatar, Badge, Button, Card, Checkbox, Input, Table and Tabs, which every design system re-skins.
For what shadcn has no name for, it uses 2 of the shared contract utilities. Every system defines them identically and sets the variables they read.
ds-meta- Small values
ds-small- Secondary copy