Source of truth: swiftui_overrides.yaml

SwiftUI Support — What Works

Honest, item-by-item map of every SwiftUI view and modifier MiniSwift recognises. Compiler emits UIIR JSON, the canvas renderer paints it. JS does no Swift parsing. Last updated 2026-04-28.

49
Views fully rendered
3
Views partial / placeholder
72
Modifiers fully rendered
3
Modifiers recognised, render TODO
Full — emit + render end-to-end · Partial — recognised, fidelity TODO · Not yet — outside the allow-list
Views (52) Modifiers (75) Special features Known limitations Not yet supported

SwiftUI Views

52 view types lowered to UIIR JSON by the compiler. 49 render end-to-end on canvas; 3 are recognised with a best-effort placeholder until the upstream infra lands.

Stacks & Layout15 items
VStack
Vertical stack with alignment + spacing.
HStack
Horizontal stack with alignment + spacing.
ZStack
Depth-aligned stack (z-axis layering).
LazyVStack
Same as VStack — lazy semantics not preview-relevant.
LazyHStack
Same as HStack.
LazyVGrid
Vertical grid with GridItem columns.
LazyHGrid
Horizontal grid with GridItem rows.
ScrollView
Scrollable container; axis & indicators recognised.
GeometryReader
Exposes parent size to the closure body.
Spacer
Flexible space within stacks; min length recognised.
Divider
Hairline separator that takes the cross-axis.
EmptyView
Zero-sized placeholder for conditional branches.
AnyView
Type-erased view wrapper.
Group
Logical grouping; flattens into the parent layout.
Section
Header + content block (List / Form sections).
Lists & Containers6 items
List
Vertical list of rows; sections + dividers.
Form
List variant styled for input controls.
TabView
Tab-paged container; only the selected tab is drawn.
Menu
Dropdown menu; items render under the trigger.
DisclosureGroup
Expandable section with chevron.
OutlineGroup
Recursive disclosure for tree data.
Navigation4 items
NavigationStack
Modern push-pop nav with title + toolbar slots.
NavigationView
Legacy nav container (alias of NavigationStack here).
NavigationSplitView
iPad split layout; falls back to stack on phone preview.
NavigationLink
Tappable row that navigates; rendered as Button.
Controls6 items
Button
Tap target; action source bound to click pipeline.
Toggle
Boolean switch wired to a state binding.
Slider
Continuous range control; bounds + step recognised.
Stepper
+/− incrementer with bounds.
Picker
Selection from a set of tagged options.
DatePicker
Date / time picker; styles recognised.
Input3 items
TextField
Single-line text entry bound to state.
SecureField
Masked password input.
TextEditor
Multi-line entry; degrades to TextField rendering.
Multi-line layout pending
Text & Labels4 items
Text
String literal + interpolation; honours all text mods.
Label
Icon + title pair (icon emoji-fallback only).
Link
URL-opening text; rendered as styled Text.
ShareLink
Share-sheet trigger; rendered as Button.
Shapes5 items
Rectangle
Filled rectangle obeying frame.
RoundedRectangle
Rectangle + corner radius.
Circle
Filled circle inscribed in the frame.
Ellipse
Filled ellipse inscribed in the frame.
Capsule
Pill shape; auto-rounded ends.
Drawing & Color3 items
Path
Closure body lowered to commands; replayed via Canvas2D (move / line / quad / cubic / arc / rect / close).
Canvas
GraphicsContext call sequence — fill / stroke / drawText / clip / xform.
Image blits + Path-arg fills not yet replayed
Color
Filled colour view.
Image & Media2 items
Image
Asset / system name; falls back to emoji glyph if unknown.
SF Symbols catalogue isn't bundled
AsyncImage
URL fetch with placeholder + spinner; success state cached.
Iteration & Status2 items
ForEach
Range / collection iteration; identity tracking via id key path.
ProgressView
Indeterminate spinner or determinate bar.
Specialty2 items
Map
Stylised non-tile preview — water/land split + grid + centre pin + coordinate caption.
No real OSM tiles, Markers not drawn from children
TimelineView
Static "now" frame of the schedule + recognition badge.
No rAF loop, context.date injection pending

SwiftUI Modifiers

75 modifiers in the compiler allow-list. 72 render end-to-end (style applied to canvas); 3 are recognised but await the animation engine.

Layout10 items
padding
Edge insets — uniform or per-edge.
frame
width / height / min-max / alignment.
offset
Translate without affecting layout.
position
Absolute placement inside parent.
ignoresSafeArea
Extend into the device safe areas.
edgesIgnoringSafeArea
Legacy alias of ignoresSafeArea.
fixedSize
Use ideal size instead of stretching.
layoutPriority
Stack distribution priority (higher = takes ideal first).
aspectRatio
Constrain w/h ratio.
zIndex
Sibling draw order in ZStack / overlays.
Visual style10 items
background
Solid colour or shape behind the view.
foregroundColor
Tint for content (text / icons).
foregroundStyle
Modern foregroundColor; accepts colours + materials.
tint
Accent colour for controls.
accentColor
Legacy alias of tint.
opacity
Multiplicative alpha 0–1.
shadow
Drop shadow with colour / radius / x / y.
cornerRadius
Rounded corners (clips background + border).
border
Stroke around the frame.
hidden
Skip rendering (still occupies layout slot).
Clipping & Overlay4 items
clipShape
Clip content to a shape (circle / capsule / rect).
clipped
Clip to the bounding rect.
mask
Mask using another view's alpha.
overlay
Draw a view on top of self.
Effects10 items
blur
Gaussian-like blur radius.
brightness
Additive brightness adjust.
contrast
Multiplicative contrast (1 = neutral).
saturation
Colour intensity (0 = grayscale).
hueRotation
Rotate hue in degrees.
colorInvert
Invert RGB channels.
scaleEffect
Uniform or x/y scale.
rotationEffect
Rotate by angle (degrees / radians).
drawingGroup
No-op — Canvas2D already flat-renders.
redacted
Skeleton placeholder rendering.
Text styling8 items
font
Apply a Font preset (.title, .body, .caption…).
fontWeight
Numeric weight (.regular → .black).
bold
Shortcut for .fontWeight(.bold).
italic
Italic font style.
underline
Underline text decoration.
strikethrough
Line-through text decoration.
lineLimit
Max line count (truncates with ellipsis).
multilineTextAlignment
leading / center / trailing for wrapped text.
Interaction10 items
onTapGesture
Tap handler — primary click pipeline.
onLongPressGesture
Long-press handler.
gesture
Generic gesture wrapper; tap / longPress / drag / magnify / rotate detected.
drag / magnify / rotate degrade to tap binding
simultaneousGesture
Same plumbing as gesture.
highPriorityGesture
Same plumbing as gesture.
allowsHitTesting
Disable click-through when false.
contentShape
Override hit-test region (recognised).
disabled
Lower opacity + ignore taps.
buttonStyle
.plain / .bordered / .borderedProminent / .destructive.
listStyle
.plain / .grouped / .insetGrouped / .sidebar.
Lifecycle6 items
onAppear
Recognised; preview renders the steady state.
onDisappear
Recognised.
task
Recognised; async body not invoked in preview.
onChange
Recognised; state-driven re-render covers most cases.
onSubmit
Recognised on TextField submit.
onReceive
Recognised; Combine publishers not in scope.
Accessibility3 items
accessibilityLabel
String stored on the node.
accessibilityHint
String stored on the node.
accessibilityHidden
Marks node hidden from a11y tree.
Navigation & Toolbar3 items
navigationTitle
Large title in the nav bar.
navigationBarHidden
Hide the nav chrome.
toolbar
ToolbarItems slotted by placement (leading / trailing / principal / bottomBar).
Buttons render as plain labels; tap dispatch pending
Presentation4 items
sheet
Slide-up modal; rebuilt subtree inherits modifiers.
No drag-to-dismiss / detents / tap-outside reset
fullScreenCover
Full-screen modal, same plumbing as sheet.
alert
Centred card with title + buttons (destructive=red, cancel=bold).
Button actionSrc not yet dispatched on click
confirmationDialog
Bottom-anchored action sheet variant of alert.
Animation3 items
animation
curve / duration / delay / value captured on node.
No tween engine — preview renders steady state
transition
transitionKind / edge / scale captured.
No appearance interpolation; combined transitions not decomposed
matchedGeometryEffect
id / namespace stashed on style.
Hero animation engine pending
Environment2 items
environment
KEY_PATH lowered to string; .colorScheme=dark flips palette.
Other keyPaths stored but not visually applied yet
environmentObject
Type name captured.
No observable engine — slot reserved for ObservableObject
Identity2 items
id
Stable identity for the diff engine.
tag
Selection identifier (Picker etc.).

Special Features

Cross-cutting capabilities the renderer ships beyond simple view dispatch.

@State live re-render

Buttons + Toggles + Sliders + TextFields write back into a JS state engine; affected subtrees re-build through the UIIR diff. Counter / form demos run without a server roundtrip.

UIIR diff engine

Identity-aware tree diff (Phase 3): only the changed subtree rebuilds, the rest stays in place. RootWrapper.child + Conditional._elseBranch covered.

Sheet / Cover / Alert overlays

renderer.js walks the post-render tree, collects nodes with active .presentations[], and paints the modal layer above the device frame. Sheet / fullScreenCover / alert / confirmationDialog all rendered.

Toolbar slots

NavigationContainerView reads ToolbarItem children and slots them by placement — navigationBarLeading, trailing, principal, bottomBar.

Path command replay

Compiler walks the Path { p in … } closure body and emits each method call as a child UINode. PathView replays via Canvas2D — moveTo / lineTo / quadraticCurveTo / bezierCurveTo / arc / rect / closePath.

iOS device frame

Pure-canvas iPhone bezel + Dynamic Island + home indicator + status bar (live time + battery). Three presets — iPhone 16 Pro, 15 Pro, SE.

Liquid Glass (iOS 26)

glassEffect() + material(.thin / .ultraThin / …) renderer extras — translucent surfaces with auto bg / border / shadow defaults that adapt to the active theme.

Animation infra

Curves, duration, delay captured on each node. The tween engine that interpolates style values across rAF frames is the next big piece — also unblocks transition and matchedGeometryEffect.

Known Limitations

Items marked Full work end-to-end but ship with these caveats.

Sheet — no drag-to-dismiss

Tap-outside doesn't reset the binding either. Use the state ref directly to dismiss.

Sheet — no detents

.presentationDetents([.medium, .large]) is parsed but not applied; sheet renders at a default height.

Alert / confirmDialog — buttons

Labels render but the click pipeline doesn't reach overlay layers yet, so the actionSrc doesn't fire on tap.

Alert message slot

Swift's named-trailing-closure (} message: { Text(...) }) confuses the parser when it follows other trailing closures.

Drag / Magnify / Rotate

Recognised, but currently degrade to a tap binding until interaction.js gets dedicated handlers.

Combined transitions

.slide.combined(with: .opacity) isn't decomposed into asymmetric legs.

environment keyPaths

Only .colorScheme=dark visually flips the palette. Other key paths are stored on the node but not consulted by the renderer.

environmentObject

Type name captured but no observable engine — children won't react to publish events.

SF Symbols

Image(systemName:) falls back to an emoji glyph when the symbol isn't recognised. The full SF catalogue isn't bundled.

TextEditor multi-line

Renders as a single-line TextField for now.

Map markers

Center pin + coordinate caption render, but Marker(...) / Annotation(...) children aren't drawn.

Canvas — image / Path-arg fills

Image blits and full Path-arg fills aren't replayed; unrecognised ops are silently skipped.

Not Yet Supported

Features outside the current allow-list. The compiler may parse some of them; the preview won't render them.

Swift Charts

Chart, BarMark, LineMark, AxisMarks, ChartProxy. Whole framework absent.

WidgetKit

Widget, WidgetConfiguration, StaticConfiguration, timeline providers.

StoreKit views

SubscriptionStoreView, ProductView, StoreView.

SwiftData

@Model, @Query, ModelContainer — needs schema runtime.

App lifecycle

@main App, WindowGroup, Scene, ScenePhase.

@Observable macro

iOS 17+ replacement for ObservableObject — macro expansion not in scope.

Combine publishers

onReceive recognised but no Publisher runtime.

Custom ViewModifier

User-defined struct: ViewModifier via .modifier(MyMod()).

PreferenceKey

Cross-tree value passing isn't wired.

GeometryEffect

Custom transforms via GeometryEffect / Transmission.

Anchor / coordinate spaces

Anchor preferences and named coordinate spaces aren't tracked.

Searchable / refreshable

.searchable(), .refreshable { }.

Focus management

@FocusState, .focused(), .focusable().

Drag & drop

.onDrag, .onDrop, DropDelegate.

Context menu

.contextMenu { }.

preferredColorScheme

Forces light/dark on a subtree — not yet honoured.

Modern scroll modifiers

.scrollIndicators, .scrollPosition, .scrollClipDisabled, .safeAreaInset.

TipKit

Tip popovers and triggers.

ContentTransition

.contentTransition(.numericText()) and friends.

MapKit beyond basics

Polylines, overlays, camera control, cluster annotations.