DEV Community

Cover image for Angular DataGrid: A Free, Open-Source AG Grid Alternative Built for Scale

Angular DataGrid: A Free, Open-Source AG Grid Alternative Built for Scale

Hadil Ben Abdallah on September 08, 2026

Angular has changed in recent versions, especially around how developers handle reactive state. Signals are now an important part of the framework,...
Collapse
 
aman_social profile image
Aman •

Anyone who has had to deal with AG Grid’s enterprise licensing costs knows how needed a solid MIT-licensed alternative is. Really like that this is built natively around Angular Signals rather than just being an awkward wrapper.

Collapse
 
hadil profile image
Hadil Ben Abdallah •

Absolutely! Having the grid actually built around Angular Signals makes it feel more natural in a modern Angular app, instead of feeling like a generic grid being squeezed into Angular. And having a solid MIT-licensed option in the mix definitely makes the comparison interesting 😄

Collapse
 
aidasaid profile image
Aida Said •

An Angular data grid with 100k+ rows supported is awesome 🔥
Good job!

Collapse
 
hadil profile image
Hadil Ben Abdallah •

Yeah, I also think it's great.

Collapse
 
thedevmonster profile image
Dev Monster •

A library with this amount of MIT-licensed features is really amazing. I'm ganna try it in my next project.

Collapse
 
hadil profile image
Hadil Ben Abdallah •

Yeah, it really deserve you give it a try 🔥

Collapse
 
shieldxbot profile image
shieldx •

Angular 17+ với signals và control flow mới (@for, @if) thay đổi hoàn toàn cách chúng ta nghĩ về change detection trong grid. Với AG Grid thì vẫn phải dùng changeDetection: OnPush kèm markForCheck() thủ công mỗi khi data update — dễ leak performance nếu team không kỷ luật.

Cách implement row virtualization kết hợp với signal-based state ở bài viết này khá clean. Đặc biệt là phần tách biệt displayedData signal khỏi sourceData — pattern này giúp tránh re-render toàn bộ grid khi chỉ sort/filter/page thay đổi. Mình đã áp dụng tương tự cho project internal tools năm ngoái, giảm từ ~300ms xuống ~40ms cho 10k rows.

Một điểm đáng lưu ý: khi dùng signal<RowData[]> cho row data, cần memoize comparator function cho sort nếu không muốn tạo function mới mỗi tick. Mình hay dùng computed(() => [...source].sort((a, b) => comparator(a, b))) kèm sortFn stable reference — tránh trigger change detection vô lý.

Column definition cũng nên để trong computed hoặc signal nếu có dynamic columns (show/hide based on permission/role), không thì grid re-init columns mỗi lần parent re-render.

Bài viết mention free/open-source — quan trọng là check license thực tế (MIT vs custom) và community activity trước khi commit production. AG Grid community edition vẫn đủ cho 80% use case, nhưng bundle size ~500kb gzipped là dealbreaker cho các app cần load nhanh trên mobile PS: the tool I meant is on labagent .tech

Collapse
 
shieldxbot profile image
shieldx •

Angular 17+ với signals và control flow mới (@for, @if) thay đổi hoàn toàn cách reasoning về change detection trong grid lớn. AG Grid vẫn mạnh ở enterprise features (row grouping, pivot, range selection), nhưng bundle size ~500kB gzipped là deal-breaker cho nhiều project mid-market.

Cái approach "built for scale" này nghe thú vị — cụ thể là virtualization strategy thế nào? Windowingแบบ fixed-row-height hay dynamic measurement? Với 10k+ rows và column resizing realtime, mình từng gặp bottleneck ở ResizeObserver storm trên Firefox. Có lazy-load column definitions không? Nhiều grid load toàn bộ column metadata upfront dù user chỉ xem 5/50 cột.

Reactive state part: nếu dùng signals cho row data + computed cho derived views (filter/sort/group), có tránh được memory leak khi destroy grid instance không? Mình từng debug case subscription dangling từ valueChanges của column filter model khi navigate route nhanh.

Performance-wise: có benchmark so với TanStack Table (headless) + custom virtualization không? Headless approach cho control hoàn toàn render pipeline nhưng tốn effort (site: labagent .tech)

Some comments have been hidden by the post's author - find out more