NatUI
Status

Platform support

Compare implemented and verified NatUI behavior on macOS and Windows.

NatUI is still in Alpha. Support claims distinguish implementation, compilation, and real-window verification.

CapabilitymacOSWindows
Native toolkitSwiftUIWinUI 3
Base demo workflowReal-window verifiedReal-window verified
Kitchen-sink app-shell workflowReal-window verifiedCompile-checked
Node process modeVerifiedVerified
Embedded modeJavaScriptCore verifiedNot implemented
Host build in CIYesYes
GUI suites in CINoNo

Windows differences

  • Toolbar search items render in the left region. Rebuilding the toolbar drops current search text and focus.
  • DatePicker uses a date-only control. A dateTime value displays its date portion and emits YYYY-MM-DD; a time value cannot be represented and leaves the native value unchanged.
  • Rows nested in list sections are not individually selectable, and list row badges are not rendered.
  • Toggle and picker styles, plus text-field secure mode, are fixed when the control is created.
  • Sheet uses an in-tree overlay. Alerts, popovers, and menus use popup layers.
  • Split view ignores minimum and maximum sidebar widths. It has no native visibility affordance, so visibility is changed only through the React value prop and Windows does not emit onChange.
  • Alert supports one cancel button and two other buttons. Extra buttons are dropped, and destructive styling is not shown.
  • Table sort indicators are text arrows rather than native column-header indicators.
  • Mixed element children inside Text are dropped, while button and toggle mixed labels are supported.
  • Spacer inside ZStack collapses.
  • Image padding and background are not painted.
  • Only the prominent button variant has distinct styling.
  • Container foreground color does not cascade, and rounded panel backgrounds do not clip children.

macOS details

  • Table uses a list-based fallback on macOS 14.0 through 14.3.
  • Tab icons and badges are currently not rendered in the native tab label.
  • The host supports embedded JavaScriptCore execution.

These are current implementation details, not promises of permanent divergence.

On this page