{"id":49827283,"url":"https://github.com/orneryd/uiGrid","last_synced_at":"2026-05-15T20:01:13.592Z","repository":{"id":354258040,"uuid":"1222822756","full_name":"orneryd/uiGrid","owner":"orneryd","description":"modern multi-platform datagrid. Remaster of the original angularjs ui-grid. Now built for rust eGui, angular 21+, react 18+, and vanilla web components","archived":false,"fork":false,"pushed_at":"2026-05-11T16:54:35.000Z","size":4691,"stargazers_count":105,"open_issues_count":0,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-05-11T17:10:26.014Z","etag":null,"topics":["angular","custom-elements","data-grid","grid","rust","typescript","ui-grid","wasm","wasm-pack","webcomponents"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/orneryd.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-27T18:37:23.000Z","updated_at":"2026-05-11T16:54:40.000Z","dependencies_parsed_at":null,"dependency_job_id":"5d34494f-1298-41c5-8801-ec1a39430407","html_url":"https://github.com/orneryd/uiGrid","commit_stats":null,"previous_names":["orneryd/uigrid"],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/orneryd/uiGrid","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orneryd%2FuiGrid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orneryd%2FuiGrid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orneryd%2FuiGrid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orneryd%2FuiGrid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/orneryd","download_url":"https://codeload.github.com/orneryd/uiGrid/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orneryd%2FuiGrid/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33077917,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T11:35:32.926Z","status":"ssl_error","status_checked_at":"2026-05-15T11:35:31.362Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","custom-elements","data-grid","grid","rust","typescript","ui-grid","wasm","wasm-pack","webcomponents"],"created_at":"2026-05-13T18:00:54.895Z","updated_at":"2026-05-15T20:01:13.582Z","avatar_url":"https://github.com/orneryd.png","language":"TypeScript","funding_links":[],"categories":["Third Party Components"],"sub_categories":["Data Grids"],"readme":"[![CI](https://github.com/orneryd/uiGrid/actions/workflows/ci.yml/badge.svg)](https://github.com/orneryd/uiGrid/actions/workflows/ci.yml)\n[![Coverage Status](https://coveralls.io/repos/github/orneryd/uiGrid/badge.svg?branch=main)](https://coveralls.io/github/orneryd/uiGrid?branch=main)\n[![npm](https://img.shields.io/npm/v/@ornery/ui-grid)](https://www.npmjs.com/package/@ornery/ui-grid)\n[![crates.io](https://img.shields.io/crates/v/ui-grid-egui)](https://crates.io/crates/ui-grid-egui)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE.md)\n\n#### [Discord Community](https://discord.gg/Baz4w8ZWN)\n\n# UI Grid — Remastered\n\n**The modern multi-platform data grid. Every feature free and open source. Built for Angular, Web-Components, React, native Rust/egui, and native C/LVGL.**\n\nA from-scratch rewrite of the original [AngularJS ui-grid](https://github.com/angular-ui/ui-grid) — by the original author. Same `gridOptions` / `columnDefs` / `onRegisterApi` api surface, modern Angular signals internals, and zero legacy baggage. \n\nJust like the original grid, it will **NEVER** be monetized. This is purely my contribution to the greater community. \n\nIt proves that the datagrid cabal wants you to think it's hard to write a data grid. Well, it's not, and nobody should be paying to group data.\n\n**[Live Demo \u0026 Docs](https://orneryd.github.io/uiGrid/)** | **[npm](https://www.npmjs.com/package/@ornery/ui-grid)** | **[crates.io](https://crates.io/crates/ui-grid-egui)** | **[Used by NornicDB](https://orneryd.github.io/NornicDB/)**\n\n---\n\n## Why Remastered?\n\n- **Original authorship** — built by the same engineer who created AngularJS ui-grid, with a decade of hindsight on what worked and what didn't\n- **Familiar API** — if you used the original ui-grid, you already know this one: `gridOptions`, `columnDefs`, `onRegisterApi`, `gridApi.core.*`\n- **Modern internals** — shared vanilla web component core with Shadow DOM encapsulation; Angular and React wrappers are thin bridges that project framework templates into the vanilla element via slot-based portals\n- **No legacy** — no `$scope`, no Bower, no Grunt, no jQuery, no module system from 2013\n\n---\n\n## Feature Comparison\n\nEverything below ships free and MIT-licensed. No enterprise tier, no license keys, no per-developer fees.\n\n| Feature                    | UI Grid  | ag-Grid Community | ag-Grid Enterprise |    Vaadin Grid     |  Kendo UI   |   Syncfusion    |\n| -------------------------- | :------: | :---------------: | :----------------: | :----------------: | :---------: | :-------------: |\n| Sorting                    | **Free** |       Free        |         —          |        Free        |    Paid     |   Community\\*   |\n| Filtering                  | **Free** |       Free        |         —          |        Free        |    Paid     |   Community\\*   |\n| **Row Grouping**           | **Free** |         —         |    ~$999/dev/yr    |         —          |    Paid     |   Community\\*   |\n| **Tree Data**              | **Free** |         —         |    ~$999/dev/yr    |        Free        |    Paid     |   Community\\*   |\n| **Master/Detail Rows**     | **Free** |         —         |    ~$999/dev/yr    |         —          |    Paid     |   Community\\*   |\n| **Inline Cell Editing**    | **Free** |       Free        |         —          | Pro ~$159/dev/mo   |    Paid     |   Community\\*   |\n| Row Selection              | **Free** |       Free        |         —          |        Free        |    Paid     |   Community\\*   |\n| Column Resizing            | **Free** |       Free        |         —          |        Free        |    Paid     |   Community\\*   |\n| CSV Export                 | **Free** |       Free        |         —          |         —          |    Paid     |   Community\\*   |\n| **Excel Export**           | **Free** |         —         |    ~$999/dev/yr    |         —          |    Paid     |   Community\\*   |\n| **PDF Export**             | **Free** |         —         |    ~$999/dev/yr    |         —          |    Paid     |   Community\\*   |\n| Virtual Scrolling          | **Free** |       Free        |         —          |        Free        |    Paid     |   Community\\*   |\n| Pagination                 | **Free** |       Free        |         —          |        Free        |    Paid     |   Community\\*   |\n| Column Pinning             | **Free** |       Free        |         —          |        Free        |    Paid     |   Community\\*   |\n| Column Reordering          | **Free** |       Free        |         —          |        Free        |    Paid     |   Community\\*   |\n| **Save/Restore State**     | **Free** |       Free        |         —          |         —          |    Paid     |        —        |\n| Infinite Scroll            | **Free** |       Free        |         —          |        Free        |    Paid     |   Community\\*   |\n| **Keyboard Cell Nav**      | **Free** |       Free        |         —          |         —          |    Paid     |   Community\\*   |\n| **Row Edit (dirty/save)**  | **Free** |         —         |         —          |         —          |     —       |        —        |\n| **Cell Validation**        | **Free** |         —         |         —          |         —          |     —       |        —        |\n| **CSV/JSON Import**        | **Free** |         —         |         —          |         —          |     —       |        —        |\n| **Shadow DOM**             | **Free** |         —         |         —          |         —          |     —       |        —        |\n| **Web Component Build**    | **Free** |         —         |         —          |       Native       |     —       |        —        |\n| **Feature Tree-Shaking**   | **Free** |         —         |         —          |         —          |     —       |        —        |\n| **SSR Support**            | **Free** |         —         |    ~$999/dev/yr    |         —          |     —       |        —        |\n| i18n (6 locales built-in)  | **Free** |       Free        |         —          |        Free        |    Paid     |   Community\\*   |\n| React                      | **Yes**  |      Wrapper      |      Wrapper       |         No         |   Wrapper   |     Wrapper     |\n| Rust/egui Native           | **Yes**  |        No         |         No         |         No         |     No      |       No        |\n| C/LVGL Native              | **Yes**  |        No         |         No         |         No         |     No      |       No        |\n| Angular                    | **Yes**  |      Wrapper      |      Wrapper       |         No         |   Wrapper   |     Wrapper     |\n| **License**                | **MIT**  |        MIT        |     Commercial     |   Apache/Comm.     | Commercial  | Comm./Community |\n| **Price**                  | **$0**   |       $0          |   ~$999/dev/yr     | $159/dev/mo (Pro)  | ~$799/dev/yr |    See below   |\n\n\u003e **Bold** = features where UI Grid gives you for free what competitors charge for or don't offer at all.\n\u003e\n\u003e _Syncfusion Community license is free for companies with \u003c$1M annual revenue, ≤5 developers, and ≤$3M outside capital. Their paid tier requires a custom quote. Kendo UI ranges $799–$1,299/dev/yr depending on support level. Prices are approximate and subject to change._\n\n---\n\n## Quick Start\n\n```bash\nnpm install @ornery/ui-grid\n```\n\n### Angular Component\n\n```typescript\nimport { Component } from '@angular/core';\nimport { GridOptions, UiGridComponent } from '@ornery/ui-grid';\n\n@Component({\n  selector: 'app-my-grid',\n  imports: [UiGridComponent],\n  template: `\u003capp-ui-grid [options]=\"gridOptions\" /\u003e`,\n})\nexport class MyGridComponent {\n  gridOptions: GridOptions = {\n    id: 'my-grid',\n    data: [\n      { name: 'Alice', role: 'Engineer', salary: 120000 },\n      { name: 'Bob', role: 'Designer', salary: 95000 },\n    ],\n    columnDefs: [\n      { name: 'name' },\n      { name: 'role' },\n      { name: 'salary', type: 'number', align: 'end' },\n    ],\n    onRegisterApi: (api) =\u003e {\n      this.gridApi = api;\n    },\n  };\n}\n```\n\n### React\n\n```bash\nnpm install @ornery/ui-grid-react @ornery/ui-grid-core @ornery/ui-grid-vanilla\n```\n\n```tsx\nimport { UiGrid } from '@ornery/ui-grid-react';\nimport type { GridOptions } from '@ornery/ui-grid-core';\n\nfunction MyGrid() {\n  const options: GridOptions = {\n    id: 'my-grid',\n    data: [\n      { name: 'Alice', role: 'Engineer', salary: 120000 },\n      { name: 'Bob', role: 'Designer', salary: 95000 },\n    ],\n    columnDefs: [\n      { name: 'name' },\n      { name: 'role' },\n      { name: 'salary', type: 'number', align: 'end' },\n    ],\n  };\n\n  return \u003cUiGrid options={options} /\u003e;\n}\n```\n\n### Web Components (Vanilla)\n\nThe grid's rendering engine is a framework-free custom element (`\u003cui-grid-element\u003e`) built on `@ornery/ui-grid-core` with pure DOM rendering and Shadow DOM encapsulation. Both the Angular and React wrappers are thin bridges around this same element — they mount `\u003cui-grid-element\u003e`, pass options, and project framework-specific templates into it via a slot-based portal system.\n\n```bash\nnpm install @ornery/ui-grid-vanilla @ornery/ui-grid-core\n```\n\nDeclarative HTML usage:\n\n```html\n\u003cui-grid-element\n  grid-id=\"vanilla-demo\"\n  title=\"Team Roster\"\n  enable-sorting\n  enable-filtering\n  column-defs='[\n    { \"name\": \"name\" },\n    { \"name\": \"role\" },\n    { \"name\": \"salary\", \"type\": \"number\", \"align\": \"end\" }\n  ]'\n  data='[\n    { \"name\": \"Alice\", \"role\": \"Engineer\", \"salary\": 120000 },\n    { \"name\": \"Bob\", \"role\": \"Designer\", \"salary\": 95000 }\n  ]'\u003e\n\u003c/ui-grid-element\u003e\n\n\u003cscript type=\"module\"\u003e\n  import { defineStandaloneUiGridElement } from '@ornery/ui-grid-vanilla';\n\n  await defineStandaloneUiGridElement(); // registers \u003cui-grid-element\u003e\n\u003c/script\u003e\n```\n\nSupported declarative inputs include boolean flags (`enable-sorting`, `enable-filtering`), scalar attributes (`grid-id`, `title`, `row-height`), and JSON attributes (`column-defs`, `data`).\n\nFor callbacks, function-valued column definitions, or high-frequency updates, use the `options` property:\n\n```typescript\nimport { mountVanillaUiGrid } from '@ornery/ui-grid-vanilla';\n\nawait mountVanillaUiGrid(document.getElementById('app'), {\n  id: 'mounted-grid',\n  data: [{ name: 'Alice', role: 'Engineer' }],\n  columnDefs: [{ name: 'name' }, { name: 'role' }],\n});\n```\n\n### Native Rust / egui\n\n```toml\n[dependencies]\nui-grid-egui = \"0.1\"\nui-grid-core = \"0.1\"\n```\n\n```rust\nuse ui_grid_egui::{EguiColumnExt, EguiGrid, GridThemePreset};\nuse ui_grid_core::models::{GridColumnDef, GridOptions};\n\nlet mut grid = EguiGrid::new();\nlet theme = GridThemePreset::DefaultDark.build();\nlet mut column_ext: Vec\u003cEguiColumnExt\u003e = vec![];\n\n// Each frame, inside your egui UI:\ngrid.show(ui, \u0026mut options, \u0026columns, \u0026mut column_ext, \u0026theme);\n```\n\nTo run the interactive demo app locally:\n\n```bash\ngit clone https://github.com/orneryd/uiGrid.git\ncd uiGrid\ncargo run -p ui-grid-egui --example demo --release\n```\n\nSee [docs/rust-egui.md](./docs/rust-egui.md) for pinning, CSV export, save/restore state, and custom column extensions.\n\n### Native C / LVGL\n\nThe C adapter sits on top of the same Rust core and C ABI contract used by the other foreign bindings. The current demo uses LVGL with the SDL desktop backend.\n\nPrerequisites:\n\n- Rust 1.95+\n- CMake 3.20+\n- SDL2\n\n```bash\nbrew install sdl2\ncargo build -p ui-grid-c-abi\ncmake -S crates/ui-grid-lvgl -B target/ui-grid-lvgl\ncmake --build target/ui-grid-lvgl -j4\n./target/ui-grid-lvgl/ui-grid-lvgl-demo\n```\n\nThe LVGL demo currently exercises the native C grid shell with sorting, grouping, pinning, state save/restore, theme presets, live trading-row updates, and the shared projection/command contract.\n\n---\n\n## Features\n\n- **Sorting** — click column headers to cycle asc/desc/none, custom comparators, programmatic API\n- **Filtering** — per-column inputs with conditions: contains, exact, startsWith, endsWith, greaterThan, regex, custom predicates\n- **Row Grouping** — nested multi-column grouping with collapsible group headers\n- **Tree View** — hierarchical data with expand/collapse per node, arbitrary nesting depth\n- **Expandable Rows** — master/detail pattern with custom templates (Angular `ng-template`, React render prop, or vanilla `\u003ctemplate\u003e` slot)\n- **Cell Editing** — inline spreadsheet-style editing with full keyboard navigation (Tab, Enter, Escape), edit-on-focus, Enter/Tab commit+move across editable columns\n- **Keyboard Cell Navigation** — Arrow/Tab/Home/End navigation with wrap/clamp modes, focus persistence across re-renders, `keyDownOverrides` for custom key handling, full `gridApi.cellNav` surface\n- **Row Selection** — click/shift/ctrl/drag-paint mouse selection, keyboard (Space, Ctrl+A), row-header checkbox column, select-all header, `isRowSelectable` hook, 13 options, 18 API methods, 3 events\n- **Column Resizing** — drag column borders to resize, programmatic API, persisted via save/restore state\n- **Row Edit** — dirty/saving/error row lifecycle with `rowEditWaitInterval` debounce, `setSavePromise` pattern, auto-retry on error, visual row state indicators\n- **Cell Validation** — declarative per-column `validators` (built-in `required`, `minLength`, `maxLength` + custom), async validator support, invalid cell markers with error messages, `gridApi.validate` surface\n- **Pagination** — client-side or external pagination with configurable page sizes\n- **Infinite Scroll** — bi-directional infinite scrolling with loading state management, `needLoadMoreData`/`needLoadMoreDataTop` events, full public API\n- **Column Pinning** — freeze columns left or right with CSS `position: sticky`, programmatic API, save/restore state\n- **Column Moving** — HTML5 native drag-and-drop column reordering\n- **CSV Export** — download visible/selected/all rows with formula-injection protection, full option matrix (separator, header filter, field callbacks, BOM compatibility)\n- **Excel Export** — ExcelBuilder-compatible sheet data with native numeric/boolean types preserved, configurable filename/sheet/header/custom formatters\n- **PDF Export** — pdfMake-ready document definition with orientation/page size/styles/header/footer/custom formatter, auto-download when pdfMake is available\n- **CSV/JSON Import** — file picker or programmatic import, full CSV parser (quoted values, escaped quotes, CRLF), header-to-column mapping, integrates with row-edit for dirty marking\n- **Export/Import Menu** — `buildGridExporterMenuItems()` with per-format and per-scope flags, i18n-driven menu labels\n- **Virtual Scrolling** — virtual scroll viewport, auto-enabled at 40+ rows\n- **Save/Restore State** — serialize and restore sort, filters, grouping, collapsed groups, pinning, column order, column widths, pagination, selection, focused cell, tree/expandable expansion, and scroll position (per-field opt-in flags)\n- **Native Rust and C Grids** — shared Rust core with native Rust/egui and native C/LVGL adapters driven by the same projection and command contract\n- **Auto Resize** — ResizeObserver-driven viewport height recalculation\n- **Custom Cell Templates** — Angular `ng-template`, React `cellRenderers` map (per-column render functions), vanilla `\u003ctemplate\u003e` slots with slot-based portal projection\n- **Shadow DOM** — encapsulated styles with CSS custom property and `::part()` hooks\n- **Web Component** — ships as `\u003cui-grid-element\u003e`, a framework-free vanilla custom element (`@ornery/ui-grid-vanilla`); Angular and React wrappers mount this same element and project templates into it\n- **Feature-Flag Builds** — compile-time tree-shaking of unused features\n- **i18n** — 6 locales built-in (English, Spanish, French, German, Japanese, Simplified Chinese), runtime `gridApi.i18n` for language switching, fallback chain (`options.labels` → current locale → en-US), register additional locales via `gridApi.i18n.add()`\n- **SSR Support** — server-side rendering with platform-safe guards\n\n---\n\n## Theming\n\nThe grid renders inside Shadow DOM. Customize it via the public `--ui-grid-*` CSS custom properties:\n\n```css\n.my-app {\n  --ui-grid-surface: #1e1b2e;\n  --ui-grid-accent: #8b5cf6;\n  --ui-grid-header-background: #2d2640;\n  --ui-grid-cell-color: #e2e0f0;\n  --ui-grid-border-color: rgba(139, 92, 246, 0.2);\n  --ui-grid-row-hover: #322e4a;\n}\n```\n\nLegacy `--app-ui-grid-*` aliases remain supported as a fallback for older app themes, but new consumer theming should target only `--ui-grid-*`.\n\nTarget structural elements with `::part()`:\n\n```css\napp-ui-grid::part(header) {\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n}\n```\n\nSee [docs/theming.md](./docs/theming.md) for the full CSS variable reference grouped by grid section, `::part()` hooks, and the demo app's 4-mode theme system.\n\n---\n\n## Custom Builds\n\nShip only the features you use:\n\n```bash\n# Only sorting and filtering — everything else is tree-shaken\nnode scripts/build-grid.mjs --features sorting,filtering\n\n# Bake in a locale at build time\nnode scripts/build-grid.mjs --features sorting,filtering,pagination --locale i18n/fr-FR.json\n\n# See all available flags\nnode scripts/build-grid.mjs --list\n```\n\nSee [docs/custom-builds.md](./docs/custom-builds.md) for the full feature flag table and build presets.\n\n---\n\n## Documentation\n\n| Guide                                        | Description                                            |\n| -------------------------------------------- | ------------------------------------------------------ |\n| [Getting Started](./docs/getting-started.md) | Install, minimal setup, run the demo                   |\n| [Features](./docs/features.md)               | Overview of all features with code examples            |\n| [Theming](./docs/theming.md)                 | CSS custom properties, `::part()` hooks, sample themes |\n| [API Reference](./docs/api-reference.md)     | GridOptions, GridColumnDef, UiGridApi                  |\n| [Cell Editing](./docs/cell-editing.md)       | Keyboard navigation, conditional editing, API          |\n| [Tree View](./docs/tree-view.md)             | Hierarchical data, options, API                        |\n| [Expandable Rows](./docs/expandable-rows.md) | Master/detail, template context, API                   |\n| [Custom Builds](./docs/custom-builds.md)     | Feature flags, build presets, locale baking            |\n| [Web Component](./docs/web-component.md)     | Vanilla `\u003cui-grid-element\u003e` custom element usage       |\n| [Internationalization](./docs/i18n.md)       | Runtime overrides, build-time locales                  |\n| [Accessibility](./docs/accessibility.md)     | ARIA roles, keyboard navigation, screen reader support |\n| [Rust / WASM](./docs/rust.md)                | Rust pipeline in Angular, React, and vanilla hosts     |\n| [Rust / egui](./docs/rust-egui.md)           | Native egui adapter with pinning, export, save/restore |\n| `README native C / LVGL section`             | Native C/LVGL build and demo run instructions          |\n\nInteractive versions of all documentation are also available in the [live demo](https://orneryd.github.io/uiGrid/).\n\n---\n\n## Development\n\n```bash\nnpm start          # Dev server at localhost:4200\nnpm test           # Run tests (Vitest)\nnpm run build      # Production build\nnpm run build:library   # Build the library (ng-packagr)\nnpm run build:rust:web  # Build the browser-native Rust/WASM artifact\nnpm run start:vanilla   # Run the Rust-backed browser demo at 127.0.0.1:4174\n```\n\n### Rust / egui\n\nRequires [Rust 1.95+](https://rustup.rs/).\n\n```bash\ncargo test --workspace                                    # Run all Rust tests\ncargo clippy --workspace --all-targets -- -D warnings     # Lint\ncargo run -p ui-grid-egui --example demo --release        # Run the native egui demo app\n```\n\n### C / LVGL\n\nRequires SDL2 plus the Rust/C ABI build.\n\n```bash\nbrew install sdl2\ncargo build -p ui-grid-c-abi\ncmake -S crates/ui-grid-lvgl -B target/ui-grid-lvgl\ncmake --build target/ui-grid-lvgl -j4\n./target/ui-grid-lvgl/ui-grid-lvgl-demo                  # Run the native C/LVGL demo app\n```\n\n---\n\n## Compatibility\n\n| Dependency  | Version |\n| ----------- | ------- |\n| Angular     | 21.2    |\n| TypeScript  | 5.9     |\n| RxJS        | 7.8     |\n| Node        | 22.20   |\n| npm         | 11.11   |\n| Rust        | 1.95+   |\n| egui        | 0.34    |\n\n---\n\n## Contributing\n\nContributions are welcome. Please open an issue first to discuss what you'd like to change.\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/my-feature`)\n3. Run `npm test` to ensure all tests pass\n4. Submit a pull request\n\n---\n\n## License\n\n[MIT](./LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forneryd%2FuiGrid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Forneryd%2FuiGrid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forneryd%2FuiGrid/lists"}