Performance Benchmarks

All estimates on this page are based on code structure analysis and architectural reasoning, not synthetic benchmarks run in a controlled environment. Actual performance varies significantly based on column complexity, cell renderer cost, browser, device hardware, and React version.

Render Cost

Approximate render times for a table with default feature flags enabled (sorting, filtering, pagination, column visibility).

Dataset
Initial Render
Re-render
100 rows, 6 columns
~5–8 ms
~2–4 ms
500 rows, 6 columns
~15–25 ms
~8–12 ms
1,000 rows, 10 columns
~30–50 ms
~15–25 ms
5,000 rows, 10 columns
~150–250 ms
~80–120 ms

Bundle Impact

Approximate minified and gzipped sizes for each module. Peer dependencies (React, TanStack Table, Radix UI, etc.) are excluded from these figures.

Module
Size (min+gz)
Core (DataTable + deps)
~6–8 KB
Config system
~1–2 KB
Toolbar + Filters
~3–4 KB
Pagination
~1–2 KB
Advanced filter
~2–3 KB
Card view
~1 KB
Total (all modules)
~15–20 KB

Peer dependencies — including React, @tanstack/react-table, Radix UI primitives, and next-intl — are not included in the figures above. Bundle size in practice will depend on which peer packages your application already uses.

Memory Model

  • Config object — approximately 500 bytes; frozen at creation time via Object.freeze, preventing accidental mutation.
  • Table instance — lightweight; TanStack Table stores minimal bookkeeping state and delegates heavy lifting to derived computations.
  • Row models — filtered, sorted, and paginated row models share references to original row data objects; no deep copies are made.
  • URL sync — a single URLSearchParams instance is created per navigation event; no continuous polling.

Scaling Recommendations

  • Under 500 rows — client-side filtering, sorting, and pagination work well with default settings.
  • 500–5,000 rows — client-side remains viable but monitor re-render cost, especially with complex cell renderers. Disable unused features.
  • 5,000–50,000 rows — move to server-side pagination. Send only the current page of data; let the server handle filtering and sorting.
  • 50,000+ rows — full server-side mode required. Consider row virtualization (planned feature) for cases where all rows must be visible simultaneously.