Compatibility Matrix

This matrix reports compile-time compatibility: for every component under ui/, whether compileJSX plus each adapter's generate() step produces diagnostics-free output. Compile-time compatibility (compileJSX + adapter generate() diagnostics). NOT render identity — rendered-output parity is owned by the adapter conformance suite and the eval vector corpus (spec/testing.md Layer 3).

62 components × 9 adapters — 558 / 558 cells compile clean

#Matrix

Component hono blade erb go-template jinja minijinja mojolicious twig xslate
accordion
alert
alert-dialog
aspect-ratio
avatar
badge
breadcrumb
button
button-group
calendar
card
carousel
chart
checkbox
collapsible
combobox
command
context-menu
data-table
date-picker
dialog
direction
drawer
dropdown-menu
empty
field
hover-card
icon
input
input-group
input-otp
item
kbd
label
menubar
native-select
navigation-menu
pagination
popover
portal
progress
radio-group
resizable
scroll-area
select
separator
sheet
sidebar
skeleton
slider
slot
spinner
switch
table
tabs
textarea
toast
toggle
toggle-group
tooltip
typography
xyflow

#Legend

Each diagnostic code below links to the known-limitation issue(s) tracking it. Codes with no linked issue fall back to the repo-wide known-limitation label.

No diagnostics were reported — every component compiles cleanly on every adapter.

#Render Conformance (fixture corpus)

The component matrix above is compile-time only. This section reports the render-level state honestly: the shared conformance corpus (packages/adapter-tests) is rendered through every adapter's real backend (Go, Ruby, Perl, PHP, Python, Rust) and byte-compared against the Hono reference. Fixtures listed here diverge on at least one adapter — either refused loudly at build time (conformancePins) or rendering differently from the reference (renderDivergences, skipped in that adapter's conformance suite until fixed). Fixtures absent from this table render to reference parity on every adapter.

246 / 251 fixtures render to reference parity on every adapter. The 5 below diverge on at least one:

Fixture hono blade erb go-template jinja minijinja mojolicious twig xslate
dangerous-inner-html-dynamic BF101 BF101 BF101 BF101 BF101 BF101 BF101 BF101
filter-nested-callback-predicate BF101 BF101 BF101 BF101 BF101 BF101
filter-nested-find-predicate BF101 BF101 BF101 BF101 BF101 BF101 BF101 BF101
static-array-from-props BF101 BF101 BF101 BF101 BF101 BF101 BF101 BF101
static-array-from-props-with-component BF101 BF101 BF101 BF101 BF101 BF101 BF101 BF101

renders to reference parity · compiles clean but the rendered output diverges (skipped in that adapter's conformance suite until fixed) · a diagnostic code means the adapter refuses the shape loudly at build time.

#Divergence details

  • dangerous-inner-html-dynamic
    • blade, erb, go-template, jinja, minijinja, mojolicious, twig, xslate — refused at build time with BF101
  • filter-nested-callback-predicate
    • blade, go-template, jinja, minijinja, twig, xslate — refused at build time with BF101
  • filter-nested-find-predicate
    • blade, erb, go-template, jinja, minijinja, mojolicious, twig, xslate — refused at build time with BF101
  • static-array-from-props
    • blade, erb, go-template, jinja, minijinja, mojolicious, twig, xslate — refused at build time with BF101
  • static-array-from-props-with-component
    • blade, erb, go-template, jinja, minijinja, mojolicious, twig, xslate — refused at build time with BF101

#Data Source

This table is generated from the committed ui/compat.lock.json, regenerated with bun run compat:lock and drift-checked in CI. Render-level divergences are declared per adapter in packages/adapter-*/src/render-divergences.ts (each adapter's conformance suite derives its skip list from the same declaration, so this page and the tests cannot drift apart). Tracked limitations carry the known-limitation label.