Installation
OGrid ships as separate packages for each design system. Pick the one that matches your project.
React
Choose one React UI package based on your design system:
Radix UI (Recommended)
Lightest option. Radix UI primitives are bundled as regular dependencies -- no peer deps beyond React.
npm install @alaarab/ogrid-react-radix
When to choose: New projects, or when you want minimal bundle size and no design system lock-in.
Fluent UI
Microsoft's design system. Requires Fluent UI v9 as a peer dependency.
npm install @alaarab/ogrid-react-fluent @fluentui/react-components
When to choose: SharePoint Framework (SPFx) apps, Microsoft 365 integrations, or projects already using Fluent UI.
Other adapters
OGrid is React-first (Radix or Fluent). Material UI, vanilla JS, Angular, and Vue adapters were published earlier and remain on npm for existing installs, but are no longer actively developed.
Core Only
If you want to build your own framework adapter on top of OGrid's types and utilities, install the core package directly.
npm install @alaarab/ogrid-core
You typically do not need to install @alaarab/ogrid-core separately. All React UI packages re-export everything from @alaarab/ogrid-react (which re-exports from core), so types like IColumnDef, IOGridApi, and hooks like useUndoRedo are available directly from your chosen UI package.
Requirements
| Dependency | Version |
|---|---|
| React | 17, 18, or 19 |
| TypeScript | 5.x or 6.x recommended (not required) |
| Node.js | >= 18 (for your build tooling) |
Verifying the Installation
After installing, confirm everything is working by rendering a minimal grid.
import { OGrid, type IColumnDef } from '@alaarab/ogrid-react-radix';
type Row = { id: number; name: string };
const columns: IColumnDef<Row>[] = [{ columnId: 'name', name: 'Name' }];
function App() {
return <OGrid<Row> columns={columns} data={[{ id: 1, name: 'Test' }]} getRowId={(row) => row.id} />;
}
If the grid renders with a single row showing "Test", your installation is correct.
Styles, SSR and tests
The kit packages import their own stylesheet, so a bundler (Vite, webpack, Next.js, esbuild) picks up the styles with no extra import. For plain Node, which has no CSS loader, the kits publish a node export condition with the same code minus the stylesheet import, so Vite SSR and Vitest work without configuration.
Jest under jsdom still resolves the styled entry. Transform the ESM packages and stub CSS:
// jest.config.js
module.exports = {
transformIgnorePatterns: ['node_modules/(?!@alaarab/)'],
moduleNameMapper: { '\\.css$': '<rootDir>/styleStub.js' }, // styleStub.js: module.exports = {};
};
Next Steps
- Quick Start -- build a working React grid