A lightweight, MIT-licensed Angular data grid with the essentials other grids gate behind a
paid enterprise licence — row grouping, aggregates, inline editing and Excel-compatible (.xls)
export. Sorting, filtering, pagination, virtual scroll, i18n and theming come with it too, in a
deliberately small dependency footprint.
One core, three interfaces. Filtering, sorting, dates, parsing and export live in
@inandu-solutions/grid-core, shared with the
React and Vue grids, so a fix is made once and the three behave the same
(how it fits together).
Live free-text search on the demo grid. Try every feature →
ng add @inandu-solutions/grid-angularimport { InanduGridComponent, InanduColumnComponent } from '@inandu-solutions/grid-angular';
@Component({
standalone: true,
imports: [InanduGridComponent, InanduColumnComponent],
template: `
<inandu-grid [data]="rows" filter="true">
<inandu-column field="name" title="Name" sortable="true" />
<inandu-column field="age" title="Age" type="number" sortable="true" />
</inandu-grid>
`,
})
export class DemoComponent {
rows = [{ name: 'Ada', age: 36 }, { name: 'Alan', age: 41 }];
}▶️ Live demo — try every feature in the browser.- ⚡ Edit in StackBlitz — the grid in a bare Angular app; edit
src/app/app.component.tsand it updates live (source). - 📘 User manual — every feature with examples + a full API reference.
- CRUD / business apps that need a sortable, filterable, editable table without pulling in a full enterprise grid framework.
- Admin dashboards that need grouping, aggregates and CSV/Excel/PDF export out of the box.
- Data-heavy Angular apps that need virtual scroll or server-side paging for large datasets, including a first-class ASP.NET Core / EF Core story — see Server-side data below.
When not to use it: if you need pivot tables or integrated charting built into the grid itself, this isn't that — see Not included below.
Most full-featured Angular grids are either heavy, or gate the genuinely useful parts —
row grouping, Excel export, cell-range selection, aggregation — behind a paid enterprise
licence. inandu-grid is MIT in full: every feature on this page is free. It also keeps
a small dependency footprint and a modern Angular-native design — standalone
components, signal inputs/outputs, no NgModules.
| inandu-grid | AG Grid | PrimeNG Table | |
|---|---|---|---|
| Licence | MIT, all features | MIT core + paid Enterprise (grouping, Excel, range selection, pivot, tree data…) | MIT |
| Footprint | deliberately minimal (@angular/cdk, @ngx-translate, jspdf lazy-loaded) |
large | ships as part of the full PrimeNG library |
| Frameworks | Angular only (signals, standalone) | Angular / React / Vue / vanilla | Angular only |
| Row grouping & aggregates | ✅ free | Enterprise | ✅ |
| Excel-compatible / CSV / PDF export | ✅ free (.xls + CSV + PDF) |
CSV free; Excel is Enterprise | CSV free |
| Pivoting, integrated charts | ❌ | Enterprise | ❌ |
| Server-side paging / sorting / filtering | ✅ serverSide mode + inandu-grid-extensions (.NET / EF Core companion) |
Enterprise | bring-your-own |
Orientation, not a scorecard — check each project's own docs for the current details. Coming from AG Grid or PrimeNG? There are migration guides for both.
Deliberately not a kitchen sink: no pivoting and no integrated charts — those stay out of scope
so the core stays small and auditable. If you need pivot tables or built-in charts, AG Grid
Enterprise is the right tool. Server-side paging, sorting and filtering are supported — put
the grid in serverSide mode and wire it to any backend, or drop in the official .NET companion
below. If you want a solid, free, lightweight grid, this is it.
inandu-grid-extensions is the
official .NET / EF Core companion. Put <inandu-grid serverSide> against your API and a single
ToInanduGrid() call turns each sort / filter / page request into one paged SQL query (paging,
sorting, filtering, grouping, aggregates, keyset cursors). MIT, on NuGet — see the
ASP.NET Core tutorial for a full walkthrough.
- React version:
inandu-grid-react— covers the core feature set (see the feature matrix for what is Angular-only), published as@inandu-solutions/grid-react. Its core (sorting, filtering, aggregation, export, i18n) is the same@inandu-solutions/grid-corepackage this one uses. Has its own StackBlitz example. - Vue version:
inandu-grid-vue— the Vue 3 port, published as@inandu-solutions/grid-vue, sharing the same@inandu-solutions/grid-coreand the React one's feature set (matrix). Has its own live demo and StackBlitz example. - Commercial add-ons:
@inandu-solutions/grid-pro(proprietary, separate package) — React and Vue ports,@inandu-solutions/grid-pro-reactand@inandu-solutions/grid-pro-vue, are also in progress (private). The bare@inandu-solutions/gridname is intentionally reserved for a future framework-neutral umbrella.
Row grouping, inline editing and virtual scroll — the parts other grids gate behind an enterprise licence — running in the demo.
| Group by a column | Edit a cell in place |
|---|---|
![]() |
![]() |
More: tree data · multi-column sort · row selection — all in the demo.
This is an Angular CLI multi-project workspace:
| Project | Path | What it is |
|---|---|---|
inandu-grid |
projects/inandu-grid/ |
The library — the distributable, published to npm as @inandu-solutions/grid-angular. Built with ng-packagr. |
grid-app |
src/ |
The demo / test harness app. Not published; it only exists to exercise the library. |
To use @inandu-solutions/grid-angular in your app:
| Angular | `^21.2.0 |
| Node | whatever your Angular 21 app needs — ^20.19.0 || ^22.12.0 || >=24 |
| Browsers | current Chrome / Firefox / Safari (Safari 16+ for fully correct sticky columns); no IE |
@angular/cdk, @ngx-translate/core, jspdf and tslib are pulled in automatically —
nothing to configure. See projects/inandu-grid/README.md.
To develop this repo:
| Node | ^20.19.0 || ^22.12.0 || >=24 — .nvmrc pins 22 |
| npm | 10+ |
| Unit tests | a Chrome / Chromium install (Karma ChromeHeadless); optionally Firefox for --browsers=FirefoxHeadless |
| e2e | Playwright browsers (npx playwright install) — run under Node 22; Playwright's test runner currently fails to load under Node 24 |
ng add @inandu-solutions/grid-angularInstalls it and drops in a runnable GridDemoComponent (--skip-example to skip). Or install
plain with npm install @inandu-solutions/grid-angular and add the two standalone components
(InanduGridComponent, InanduColumnComponent) to a component's imports. ng generate @inandu-solutions/grid-angular:grid <name> scaffolds an example into an existing app any time.
See projects/inandu-grid/README.md for the full
component API, inputs/outputs, and examples.
npm install # install dependencies
npm start # build the library, then ng serve — http://localhost:4200
npm run build:lib # build the library only (dist/inandu-grid) — includes the schematics
npm run build # build library + demo app
npm run lint # lint both projects
npm run test:lib # unit tests for the library (Karma/Jasmine, headless Chrome)
npm run test:schematics # ng-add / generate schematics (node:test)
npm test # unit tests for the demo app
npm run e2e # Playwright end-to-end tests against the built demoWorkflow gotcha: the demo app resolves
@inandu-solutions/grid-angularfrom the built output indist/inandu-grid, not from the library's TS source. After changing anything underprojects/inandu-grid/src/, runnpm run build:libbefore serving/testing the app, or you'll be looking at stale behavior.npm start,npm run buildand the e2e config all build the library first for you.
For a single headless unit-test run without watch mode:
npx ng test inandu-grid --watch=false --browsers=ChromeHeadlessMore detail — cross-browser testing, focusing a single spec, architecture — in
CONTRIBUTING.md.
Issues and PRs welcome. Please read CONTRIBUTING.md first, and
note the Code of Conduct. Security reports:
.github/SECURITY.md.
Maintainers: see PUBLISHING.md.



