Skip to content

Compare

Three good alternatives, and when each one wins.

Oxygen UI compared to antd, TanStack, and building it yourself.

Every claim about another project below is a measurement against a named version, and each section says what they do well before it says what they do not.

Build it in-house

The components are the small part. The states are the work.

Choose it when You have a design system, an accessibility practice, and a team that can carry both.

A lab result is an afternoon. A lab result that renders a corrected value without hiding the number a clinician saw an hour ago, distinguishes “no reference range published” from “within range”, and says “restricted” rather than showing an em dash — that is the part that takes a quarter and gets cut when the quarter runs out. Oxygen ships 30 components carrying 352 documented states because those states are the reason the library exists.

A general-purpose React library

Excellent engineering, aimed at a different problem.

Choose it when Your product is not clinical, or clinical display is a small part of it.

Ant Design, MUI and their peers are better than anything we would write for the 80% of an application that is forms, layout and navigation — and Oxygen is deliberately API-compatible with antd v6 rather than competing with it. What they do not have is a vocabulary for absence: no component in a general-purpose library knows the difference between a result that is missing and a result you are not permitted to see, because no general-purpose product needs one.

A headless table library

You get the row model. You still own every cell and every keyboard interaction.

Choose it when You need a data grid and you have the design and accessibility capacity to finish it.

TanStack Table v9 went stable on 4 August 2026 at roughly 25 KB with a substantially leaner memory profile than v8, and its row-model pipeline is the best in the ecosystem — we read it closely while building our own grid and chose not to depend on it. The reason is narrow: our row carries disclosure, absence and coverage semantics that a general row model has no place for, and adapting one costs more than the pipeline saves.

What we measured, in the table everyone starts from.

@rc-component/table@1.11.1 is the engine under Ant Design v6’s Table, and the honest starting point for anyone building a clinical grid. These figures come from reading its published ES build.

Checkedrc-table + antdOxygen DataGrid 0.6.0
aria-* attributes in the published ES buildOne — aria-hidden.Full grid semantics, shipped.
role on the table elementNone emitted.role="grid" with 2-D keyboard navigation.
Keyboard handlersZero in the engine.Cell focus and roving tabindex.
aria-rowcount / rowindex / colindexEmitted by neither rc-table nor antd's layer.Required — a virtualised grid without them lies about its size.
scope on header cellsEmitted correctly.Same.
Shift-range selectionHandled by useSelection.Same behaviour, shipped.
Dynamic row heights when virtualisedMeasured properly, with ResizeObserver and a cache.No improvement claimed.

The last three rows matter as much as the first four. rc-table is careful, well-built software that was not written for a clinical grid, and the gaps above are a description of its scope rather than of its quality. Our grid ships at beta — the column names the version so the row can be checked against it.

When not to choose Oxygen.

  • You want components you can upgrade with a version bump. Source is copied into your repo, so fixes arrive as a diff you take deliberately — that is the trade, and for some teams it is the wrong one.
  • You need a component library for a general product. Most of Oxygen is clinical, and the parts that are not are better served by antd or MUI.
  • You need a general-purpose table. Ours is built for clinical worklists — a required coverage claim, five kinds of absence, model provenance on a derived column — and it does not generalise into a reporting grid.
  • You are looking for a compliance shortcut. Oxygen is not a compliance boundary and not a medical device, and using it changes nothing about your regulatory position.