// Angular 22 · Signals-native · Zero deps

One grid. A million rows.
Zero compromises.

Virtual scroll, sorting, filtering, and inline editing — in one zero-dependency Angular library. No bloat. No dependencies. Just signals.

Get started
Rows, constant DOM
Dependencies
Theme tokens
Live Not a video — a real grid. Scroll it, sort it, filter it, export it.
Runs on
SignalsStandaloneZoneless-readyOnPushTypeScript strictSSR-safeWCAG AA
Why GridCraft

You've fought this fight before.

Grids that fight your framework

Ported reactivity models, zone hacks, and change-detection taxes on every cell.

GridCraft is signals-native: OnPush everywhere, zoneless-ready, component-scoped DI. It feels like Angular because it is Angular.

Paywalls around table stakes

Per-feature add-ons, per-seat audits, and pricing pages that need a sales call.

Nothing to buy and nothing to negotiate. Everything documented on this site is MIT licensed and in the package you install — no add-on modules, no seat audits, no sales call.

Dependency piles

One grid, fifteen transitive packages, and an export feature that needs three more.

Zero runtime dependencies. CSV export is written from scratch. Nothing ships but your code and Angular.

Batteries included

Zeroruntimedeps.
MITlicensed.Fullyyours.

Infinite scroll, filtering, sorting, inline editing, CSV export and theming — every one of them in the package you install, under MIT.

0Runtime dependencies
1M+Rows virtualized
20+Built-in features
MITLicensed
Philosophy

BuilttheAngular way.

Every decision — from signals to CSS variables to component-scoped DI — was made to feel native to Angular, not ported from another framework.

Signals, not subscriptions

Every state change is a signal update. No BehaviorSubject, no manual teardown, no async pipe.

Fully typed, top to bottom

GridColumn<T> is generic. CellContext carries the typed row. No casting, no any, no surprises.

No hidden magic

Column order is an array. Sort direction is a signal. Nothing happens unless you ask for it.

Styles you own

52 CSS custom properties. Override exactly what you need — header height, flash duration, everything.

One grid, one injector

Services are component-scoped. Two grids on one page share nothing — no state leaks, no conflicts.

MIT licensed

Free for everyone, commercial products included. No key to register, no watermark, and no feature held back behind an edition.

Performance

OnlyvisiblerowsintheDOM.

Binary-search scroll positioning. State is pure Angular signals — no BehaviorSubject, no zone traversal. Nothing runs in the background.

Rows virtualized
Sustained scroll
Runtime dependencies
Gzipped (full library)

Window rendering

Only visible rows enter the DOM. Binary-search scroll positioning. No layout thrash at any scroll speed.

Signals-first · Zoneless

Internal state is pure Angular signals. No BehaviorSubject. Works with Zone.js disabled out of the box.

Zero runtime deps

CSV export written from scratch, byte by byte. Nothing ships but your code and Angular.

Component-scoped DI

Each grid instance has its own injector. Fully isolated state. Multiple grids on one page never conflict.

CSS-variable theming

52 CSS custom properties. No hardcoded colours in components. Swap the visual style at runtime, per-grid.

CSS Grid rows

Rows use display:grid — not flex. Column widths are pixel-perfect across header, body, filter, and summary.

Theming

52 tokens. Any brand.

Every colour, radius, and spacing value is a CSS custom property. Tap a swatch — the same swap works at runtime, per grid.

Slate
Open the Theme Builder
Open source · MIT licensed

Startbuildingtoday.

npm install @gridcraft/angular — that's it. No signup, no API key, no cloud.

We're here to help

Need help with GridCraft?

Browse solved tickets, search the FAQ, or open a support ticket — we respond fast.