Skip to content
 
 

Repository files navigation

Material React Table V5

Quickly Create React Data Tables with Material Design

MRT

This is a fork of Material React Table maintained by Novastera. V5 is a from-scratch rewrite, not an incremental update — it moves the table engine onto TanStack Table v9 and rebuilds on Material UI v9 and React 19, so the library stops carrying forward v8-era workarounds and starts using what its own dependencies offer natively.

Still on React 18 or an older stack? The v4 branch remains available — V5 is not a drop-in upgrade, so stay on v4 until you're ready to move (see the Migration Guide).

Learn More

Credits

Material React Table was originally created by Kevin Van Cott. We are grateful for the foundation he built, which allows this fork to exist and serve the community.

Quick Examples

View additional storybook examples

Features

All features can easily be enabled/disabled

Fully Fleshed out Docs are available for all features

  • 30-56kb gzipped - Bundlephobia
  • Advanced TypeScript Generics Support (TypeScript Optional)
  • Aggregation and Grouping (Sum, Average, Count, etc.)
  • Cell Actions (Right-click Context Menu)
  • Click To Copy Cell Values
  • Column Action Dropdown Menu
  • Column Hiding
  • Column Ordering via Drag'n'Drop
  • Column Pinning (Freeze Columns)
  • Column Resizing
  • Customize Icons
  • Customize Styling of internal Mui Components
  • Data Editing and Creating (5 different editing modes)
  • Density Toggle
  • Detail Panels (Expansion)
  • Faceted Value Generation for Filter Options
  • Filtering (supports client-side and server-side)
  • Filter Match Highlighting
  • Full Screen Mode
  • Global Filtering (Search across all columns, rank by best match)
  • Header Groups & Footers
  • Localization (i18n) support
  • Manage your own state or let the table manage it internally for you
  • Pagination (supports client-side and server-side)
  • Row Actions (Your Custom Action Buttons)
  • Row Numbers
  • Row Ordering via Drag'n'Drop
  • Row Pinning
  • Row Selection (Checkboxes)
  • SSR compatible
  • Sorting (supports client-side and server-side)
  • Theming (Respects your Material UI Theme)
  • Toolbars (Add your own action buttons)
  • Tree Data / Expanding Sub-rows
  • Virtualization (@tanstack/react-virtual)

Getting Started

Installation

View the full Installation Docs

  1. Ensure that you have React 19 or later installed

  2. Install Peer Dependencies (Material UI V9)

npm install @mui/material @mui/x-date-pickers @mui/icons-material @emotion/react @emotion/styled
  1. Install @novastera-oss/material-react-table
npm install @novastera-oss/material-react-table

@tanstack/react-table, @tanstack/react-virtual, and @tanstack/match-sorter-utils are internal dependencies, so you do NOT need to install them yourself.

Usage

Read the full usage docs here

import { useMemo, useState, useEffect } from 'react';
import {
  MaterialReactTable,
  useMaterialReactTable,
} from '@novastera-oss/material-react-table';

//data must be stable reference (useState, useMemo, useQuery, defined outside of component, etc.)
const data = [
  {
    name: 'John',
    age: 30,
  },
  {
    name: 'Sara',
    age: 25,
  },
];

export default function App() {
  const columns = useMemo(
    () => [
      {
        accessorKey: 'name', //simple recommended way to define a column
        header: 'Name',
        muiTableHeadCellProps: { sx: { color: 'green' } }, //optional custom props
        Cell: ({ cell }) => <span>{cell.getValue()}</span>, //optional custom cell render
      },
      {
        accessorFn: (row) => row.age, //alternate way
        id: 'age', //id required if you use accessorFn instead of accessorKey
        header: 'Age',
        Header: () => <i>Age</i>, //optional custom header render
      },
    ],
    [],
  );

  //optionally, you can manage any/all of the table state yourself
  const [rowSelection, setRowSelection] = useState({});

  useEffect(() => {
    //do something when the row selection changes
  }, [rowSelection]);

  const table = useMaterialReactTable({
    columns,
    data,
    enableColumnOrdering: true, //enable some features
    enableRowSelection: true,
    enablePagination: false, //disable a default feature
    onRowSelectionChange: setRowSelection, //hoist internal state to your own state (optional)
    state: { rowSelection }, //manage your own state, pass it back to the table (optional)
  });

  const someEventHandler = () => {
    //read the table state during an event from the table instance
    console.log(table.getState().sorting);
  };

  return (
    <MaterialReactTable table={table} /> //other more lightweight MRT sub components also available
  );
}

Open in Code Sandbox

Contributors

PRs are Welcome! If you're looking to contribute, please check out the issues or start a discussion in this repository.

Read the Contributing Guide to learn how to run this project locally.

About Novastera

We're the folks who dusted off this table and gave it a React 19 engine. PRs, issues, and stars are the best kind of coffee but if what your company actually needs is to run your business and client relationships with AI without shipping your data off to feed someone else's model, that's the real thing we build. Come sign up at novastera.com.

About

A fully featured Material UI V9 implementation of TanStack React Table V9, written from the ground up in TypeScript

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages