toolbarStyle, frameAutosaveName, and density shape the macOS unified toolbar and window chrome; see Windows & Chrome for what each one does on each platform. The dialog and tab commands are covered in Dialogs and Native Tabs.
Automation role: group. Text source: none. Children: multi.
Prop
Type
Default
Applied
orientation
vertical | horizontal
vertical
create
spacing
int
-1
createAndUpdate
enabled
bool
true
createAndUpdate
tooltip
string
none
createAndUpdate
draggable
bool
false
createAndUpdate
dragPayload
string
none
createAndUpdate
dropTarget
bool
false
createAndUpdate
testID
string
none
meta
Event
Handler
Payload
hoverChanged
onHoverChanged
checked
dragStarted
onDragStarted
text
dragEnded
onDragEnded
none
dragOver
onDragOver
dragPoint
dropped
onDropped
dragPoint
spacing’s default, -1, is the “platform standard” sentinel: 6 on the GTK backend (the Adwaita gutter), 8 on the AppKit backend. Any non-negative value is used verbatim. See Spacing scale for Spacing/ContentMargin, the typed export built on the same platform-standard numbers.
Both backends keep a child with a natural cross-axis size at that size: buttons, switches, segmented controls, steppers, date pickers, color wells, and sliders and progress bars on their thickness axis. A control stretched to the window width is native on neither platform. Containers, scroll shapes, editable or bezeled text fields, image views, and labels still fill, because filling is their native form (a wrapping label needs the width). Checkboxes and radios also fill on GTK, where Adwaita gives the whole row the hit area. To stretch one of the others, set style.halign (or valign, in a horizontal box) to "fill", or set the cross-axis expand flag, which fills its axis when no explicit align is given.
variant is the typography scale: title1 to title4, heading, body, caption, captionHeading, and monospace. GTK applies the matching Adwaita style class (.title-1, .heading, .caption-heading, …); AppKit applies the matching system text style (large title, title 1 to 3, headline, caption). Use it instead of cssClasses or style.fontSize for hierarchy, so the size follows each platform’s scale.
Automation role: button. Text source: label. Children: none.
Prop
Type
Default
Applied
label
string
createAndUpdate
testID
string
none
meta
iconName
string
none
createAndUpdate
iconData
string
none
createAndUpdate
labelAlign
start | center | end
center
create
ellipsize
bool
false
create
enabled
bool
true
createAndUpdate
tooltip
string
none
createAndUpdate
draggable
bool
false
createAndUpdate
dragPayload
string
none
createAndUpdate
dropTarget
bool
false
createAndUpdate
prominent
bool
false
createAndUpdate
destructive
bool
false
createAndUpdate
badge
string
none
createAndUpdate
size
small | regular | large
regular
createAndUpdate
Event
Handler
Payload
clicked
onClick
none
hoverChanged
onHoverChanged
checked
dragStarted
onDragStarted
text
dragEnded
onDragEnded
none
dragOver
onDragOver
dragPoint
dropped
onDropped
dragPoint
Imperative commands (via sendCommand(ref.current, …) from @nativedesktop/react): focus.
prominent, destructive, badge, and size render natively on both backends (.suggested-action / .destructive-action on GTK, the accent bezel and hasDestructiveAction on AppKit); see Styling & Design Language for how they map onto each platform’s controls. Both flags belong to the one action they describe, never to every button in a row.
Automation role: textbox. Text source: text. Children: none.
Prop
Type
Default
Applied
text
string
createAndUpdate
minContentHeight
int
120
create
enabled
bool
true
createAndUpdate
tooltip
string
none
createAndUpdate
draggable
bool
false
createAndUpdate
dragPayload
string
none
createAndUpdate
dropTarget
bool
false
createAndUpdate
testID
string
none
meta
Event
Handler
Payload
changed
onChanged
text
dragStarted
onDragStarted
text
dragEnded
onDragEnded
none
dragOver
onDragOver
dragPoint
dropped
onDropped
dragPoint
Imperative commands (via sendCommand(ref.current, …) from @nativedesktop/react): focus.
minContentHeight is a floor, not a fixed height. Both backends wrap the text view in a scroller and hold it at least that tall, so an empty <textarea> still occupies the default instead of collapsing to nothing and failing the automation actionability check. Pass 0 to opt out. See Automation Socket.
Automation role: slider. Text source: none. Children: none.
Prop
Type
Default
Applied
min
float
0
create
max
float
100
create
step
float
1
create
value
float
0
createAndUpdate
orientation
horizontal | vertical
horizontal
create
enabled
bool
true
createAndUpdate
tooltip
string
none
createAndUpdate
draggable
bool
false
createAndUpdate
dragPayload
string
none
createAndUpdate
dropTarget
bool
false
createAndUpdate
testID
string
none
meta
Event
Handler
Payload
valueChanged
onValueChanged
value
dragStarted
onDragStarted
text
dragEnded
onDragEnded
none
dragOver
onDragOver
dragPoint
dropped
onDropped
dragPoint
step snaps the value on both backends. GTK snaps to it without drawing anything; AppKit’s only stepping lever is tick marks, so there an explicit step yielding 50 stops or fewer both snaps and draws marks below the track. Anything else stays continuous on AppKit, including the default 1 over the default 0 to 100 range, which would be 101 marks.
Automation role: tablist. Text source: none. Children: multi.
Prop
Type
Default
Applied
selectedIndex
int
0
createAndUpdate
enabled
bool
true
createAndUpdate
tooltip
string
none
createAndUpdate
draggable
bool
false
createAndUpdate
dragPayload
string
none
createAndUpdate
dropTarget
bool
false
createAndUpdate
testID
string
none
meta
Event
Handler
Payload
selectionChanged
onSelectionChanged
index
dragStarted
onDragStarted
text
dragEnded
onDragEnded
none
dragOver
onDragOver
dragPoint
dropped
onDropped
dragPoint
Attached props (set on children):
Prop
Type
Default
tabLabel
string
tabIcon
string
Attached props apply at attach time only. Changing one after mount is a no-op.
selectedIndex takes effect on update; initial page is 0.
On Linux this renders as a switcher over an AdwViewStack (the modern in-window view switcher): an AdwInlineViewSwitcher in a horizontal scroller, upgraded to a full AdwViewSwitcher once a page declares a tabIcon. The switcher scrolls instead of shrinking, so a many-page tab view keeps readable labels rather than one ellipsis per page. On macOS it is an NSTabViewController with a segmented control on top, which sizes and centers the segments and gives them a common minimum width. One documented asymmetry: AdwViewStack cannot insert a page at an index, so inserting a page between existing siblings lands it at the END on Linux (insertBefore degenerates to append); macOS honors the position. tabIcon names the page icon shown in the switcher on Linux; document-style tabs remain the <window tabGroup> path.
Automation role: list. Text source: none. Children: none.
Prop
Type
Default
Applied
items
stringList
none
createAndUpdate
selectedIndex
int
-1
createAndUpdate
emptyIconName
string
none
createAndUpdate
emptyTitle
string
none
createAndUpdate
emptyDescription
string
none
createAndUpdate
enabled
bool
true
createAndUpdate
tooltip
string
none
createAndUpdate
draggable
bool
false
createAndUpdate
dragPayload
string
none
createAndUpdate
dropTarget
bool
false
createAndUpdate
testID
string
none
meta
Event
Handler
Payload
rowActivated
onRowActivated
index
dragStarted
onDragStarted
text
dragEnded
onDragEnded
none
dragOver
onDragOver
dragPoint
dropped
onDropped
dragPoint
The three empty* props swap in platform empty-state chrome when items is empty; see Native empty states.
itemCount (reported by getTree) is the row count, never a walk of GTK’s recycled row widgets. React item-template components, rendering arbitrary JSX per row, are not implemented. Today <listview> renders native string rows only.
Automation role: custom. Text source: none. Children: none.
Prop
Type
Default
Applied
viewKind
string
none
create
props
string
{}
createAndUpdate
enabled
bool
true
createAndUpdate
tooltip
string
none
createAndUpdate
draggable
bool
false
createAndUpdate
dragPayload
string
none
createAndUpdate
dropTarget
bool
false
createAndUpdate
testID
string
none
meta
Event
Handler
Payload
nativeEvent
onNativeEvent
data
dragStarted
onDragStarted
text
dragEnded
onDragEnded
none
dragOver
onDragOver
dragPoint
dropped
onDropped
dragPoint
The generic host for an app-owned native plugin widget. Apps use defineNativeComponent rather than this intrinsic directly. See Native Modules for the plugin ABI, build config, and a working example.
Automation role: toolbar. Text source: title. Children: multi.
Prop
Type
Default
Applied
title
string
createAndUpdate
subtitle
string
none
createAndUpdate
showTitleButtons
bool
true
create
canGoBack
bool
false
createAndUpdate
canGoForward
bool
false
createAndUpdate
enabled
bool
true
createAndUpdate
tooltip
string
none
createAndUpdate
draggable
bool
false
createAndUpdate
dragPayload
string
none
createAndUpdate
dropTarget
bool
false
createAndUpdate
testID
string
none
meta
Event
Handler
Payload
back
onBack
none
forward
onForward
none
dragStarted
onDragStarted
text
dragEnded
onDragEnded
none
dragOver
onDragOver
dragPoint
dropped
onDropped
dragPoint
Attached props (set on children):
Prop
Type
Default
slot
enum
start
Attached props apply at attach time only. Changing one after mount is a no-op.
Setting either canGoBack or canGoForward opts a headerbar into a pair of native back/forward buttons (a header with neither prop set gets none); each prop only enables/disables its own button, and back/forward fire when the user clicks one.
title and subtitle both update in place, so a header whose title tracks the selected item needs no key.
Automation role: group. Text source: none. Children: multi.
Prop
Type
Default
Applied
topBarStyle
flat | raised | raised-border
flat
create
bottomBarStyle
flat | raised | raised-border
flat
create
extendContentToTopEdge
bool
false
create
enabled
bool
true
createAndUpdate
tooltip
string
none
createAndUpdate
draggable
bool
false
createAndUpdate
dragPayload
string
none
createAndUpdate
dropTarget
bool
false
createAndUpdate
testID
string
none
meta
Event
Handler
Payload
dragStarted
onDragStarted
text
dragEnded
onDragEnded
none
dragOver
onDragOver
dragPoint
dropped
onDropped
dragPoint
Attached props (set on children):
Prop
Type
Default
slot
enum
content
Attached props apply at attach time only. Changing one after mount is a no-op.
On macOS a slot="top" or slot="bottom" bar in a split pane becomes a real NSSplitViewItemAccessoryViewController, which is what earns the macOS 26 scroll edge effect under the bar.
Automation role: menubar. Text source: none. Children: multi.
Prop
Type
Default
Applied
defaults
bool
true
create
enabled
bool
true
createAndUpdate
tooltip
string
none
createAndUpdate
draggable
bool
false
createAndUpdate
dragPayload
string
none
createAndUpdate
dropTarget
bool
false
createAndUpdate
testID
string
none
meta
Event
Handler
Payload
dragStarted
onDragStarted
text
dragEnded
onDragEnded
none
dragOver
onDragOver
dragPoint
dropped
onDropped
dragPoint
<menubar> is a child of <window>, alongside the content child. See Menu Bar for platform rendering (real NSApp.mainMenu on macOS, primary hamburger menu on GNOME).
palette carries the terminal’s 16- or 256-color palette as a comma-separated list of #rrggbb hex colors, either 16 or 256 entries in ANSI index order (entry 0 is black, 1 red, up to 15 bright white for the 16-color form). Leave it unset for the backend’s built-in default palette. foreground and background are the default text and cell colors, also #rrggbb, and are distinct from the background and colorstyle props, which paint the widget’s own view chrome rather than the terminal’s cells.
Automation role: dialog. Text source: none. Children: none.
Prop
Type
Default
Applied
open
bool
false
createAndUpdate
placeholder
string
none
createAndUpdate
query
string
createAndUpdate
items
objectList
none
createAndUpdate
enabled
bool
true
createAndUpdate
tooltip
string
none
createAndUpdate
draggable
bool
false
createAndUpdate
dragPayload
string
none
createAndUpdate
dropTarget
bool
false
createAndUpdate
testID
string
none
meta
Event
Handler
Payload
queryChanged
onQueryChanged
text
activate
onActivate
text
submit
onSubmit
text
cancel
onCancel
none
dragStarted
onDragStarted
text
dragEnded
onDragEnded
none
dragOver
onDragOver
dragPoint
dropped
onDropped
dragPoint
A controlled Cmd-K style overlay: the app owns query/items and does all filtering and ranking, the widget only renders rows and reports interaction. See Command Palette for the full pattern, platform presentation, and automation notes.
Automation role: custom. Text source: none. Children: none.
Prop
Type
Default
Applied
type
line | area | bar | pie | scatter | candlestick
line
createAndUpdate
series
objectList
none
createAndUpdate
xLabel
string
createAndUpdate
yLabel
string
createAndUpdate
showLegend
bool
true
createAndUpdate
showGrid
bool
true
createAndUpdate
animated
bool
true
createAndUpdate
minContentHeight
int
160
create
enabled
bool
true
createAndUpdate
tooltip
string
none
createAndUpdate
draggable
bool
false
createAndUpdate
dragPayload
string
none
createAndUpdate
dropTarget
bool
false
createAndUpdate
testID
string
none
meta
Event
Handler
Payload
pointSelected
onPointSelected
data
dragStarted
onDragStarted
text
dragEnded
onDragEnded
none
dragOver
onDragOver
dragPoint
dropped
onDropped
dragPoint
minContentHeight is the sizing floor <chart> needs for the same reason <textarea> does: the drawing surface fills what it is given, so in a scrolled parent it would measure zero. See Charts.