Skip to content

UI stack and design system ​

UI-001 records why the UI contracts are a separate, zero-dependency PHP package that describes UI and never renders it. UI-003 records that the first-party client that renders those contracts is React + TypeScript over Inertia, with ReUI (shadcn/ui, Radix UI and Tailwind CSS, MIT, copy-paste distribution) as the design system foundation. The PHP package middag-php-ui owns transport-neutral page and block contracts; @middag-io/react owns the React renderer and components. A Moodle or WordPress adapter connects those pieces to its host.

ConcernCurrent source
Package boundary decisionUI-001
First-party client decisionUI-003
PHP page and block contractsmiddag-php-ui/src
React components and renderermiddag-react/src
React setup and supported componentsmiddag-react/docs

At the 2026-11-04 review (middag-react/main@56f72c697f79da42c4b811f272053a5d1e668c17, package version 0.42.0), @middag-io/react declared React 19 and @inertiajs/react 3 as peer dependencies. Check the package version used by a product before selecting components or installation steps. Component inventory, bundle size, and third-party license terms belong to the current package and its dependencies; this page does not freeze those changing values.

Client stack rationale ​

Why the first-party client is React + TypeScript with ReUI, and what that choice costs, is explained in ui architecture. The wire contract does not depend on that choice: another renderer can consume the same JSON; see UI wire contract.

MIDDAG © 2015-2026