Simple Table vs Angular Material Table (mat-table): Beyond MDC Primitives

ComparisonMaterial UIDecision Guide

Angular Material's mat-table is composable but you build virtualization, pinning, grouping, and inline editing yourself. Simple Table for Angular ships all of that—and still themes against Material via CSS variables.

For Angular developers comparing data grid options in 2026.

Angular Material's mat-table is a great primitive: composable, well-documented, and integrated tightly with the rest of Material's MDC components. The catch is that it's deliberately minimal. Sort, paginate, and basic filtering ship as MatSort / MatPaginator helpers, but virtualization, column pinning, row grouping with aggregations, and inline editing are all things you build yourself.

Simple Table for Angular is a complementary alternative. It's MIT-licensed, ships virtualization, pinning, grouping, and editing as first-class features, and themes against Material design tokens via CSS variables—so you can keep your Material look-and-feel without writing a renderer pipeline.

If you've ever tried to wire mat-table + CDK virtual scroll + manual sticky columns + custom sort/group code together, this comparison will save you a lot of plumbing.

Quick comparison

FeatureAngular Material mat-tableSimple Table for Angular
LicenseMITMIT
Standalone componentsYesYes
Out-of-the-box renderingComposable primitiveBatteries-included grid
Row virtualizationVia CDK virtual scroll (manual)Built-in
Column pinning (sticky columns)ManualBuilt-in
Row grouping with aggregationsBuild yourselfBuilt-in
Inline cell editingBuild yourselfBuilt-in
Theme via Material tokensNative MaterialCSS variables (Material-compatible)
Bundle size (gzipped)~50 kB (excludes virtualization, sort, paginate helpers)~70 kB (everything included)

Stay with mat-table when…

  • Your needs are basic: sort, paginate, custom cells. No grouping, no pinning, no virtualization.
  • You want maximum DOM control with mat-table's directive composition.
  • Your team is comfortable wiring CDK virtual scroll and sticky columns by hand.
  • Material design system fidelity is non-negotiable.

Switch to Simple Table for Angular when…

  • You want virtualization, pinning, grouping, and editing without writing them yourself.
  • You've spent more than a sprint maintaining custom mat-table extensions.
  • You want Material-compatible theming via CSS variables.
  • You also build React / Vue / Svelte / Solid surfaces and want a shared engine.
  • You want grouping with aggregations as a declarative prop, not custom Angular code.

Real-world scenarios

Basic admin tables, sort + paginate

Two screens, ~500 rows each, mat-table + MatSort works fine.

Stay with mat-table—you're using it well within its sweet spot.

Reporting view with grouping + aggregations

Need expanded/collapsed groups with sum and avg footers across thousands of rows.

Switch to Simple Table—grouping with aggregations is built-in.

Wide table with sticky columns + virtualization

30+ columns, 100k+ rows, frozen first 3 columns. Currently held together with CDK virtual scroll + manual sticky CSS.

Switch to Simple Table—pinning and virtualization are first-class.

Strict Material design fidelity

Every component has to feel native Material, including ripples and elevation.

Stay with mat-table for native Material fidelity—or use Simple Table with Material-tuned CSS variables.

Frequently asked questions

Can Simple Table look like a Material table?
Yes. Theming is via CSS variables (row height, header color, hover color, density). Map your Material design tokens onto Simple Table's variables for a Material-feeling grid.
Will I lose mat-table's directive composition flexibility?
You give up directive-level composition for declarative props. In return, virtualization / pinning / grouping / editing are built in.
Does Simple Table integrate with MatPaginator?
Simple Table has its own pagination component, but you can wire MatPaginator if you prefer—the table accepts external pagination state via props.

The verdict

mat-table is a great primitive when your needs match its scope: composable, Material-native, MIT. The moment you need virtualization + pinning + grouping + editing as a coherent package, you're better off swapping the table layer.

Simple Table for Angular gives you those features in one MIT package and still themes against Material via CSS variables. You keep your design system, you stop building data-grid plumbing.

Stop building grid plumbing on top of mat-table

Simple Table for Angular ships virtualization, pinning, grouping, and inline editing—Material-compatible theming via CSS variables, ~70 kB gzipped, MIT.