Changelog

Native paint and iOS controls

Sep 22, 2026·8 min read

Tab bars, navigation, sheets and glass follow iOS 27 motion and materials. Swift and SwiftUI code runs directly in Peach. Underneath, drawing moved into the native compositor.

Platform

iOS 27 tabs, navigation and glass

Tab bars now carry a prominent circular action tab and an interactive glass lens. Hold a tab and the selected icon grows beneath your finger; drag and the lens stays under the touch, and a refused tab change hands the lens back as UIKit does. Interactive back gestures run the iOS 27 spring with your release velocity.

Glass now matches iOS 27 across backgrounds. Regular glass keeps the backdrop’s colour and contrast, clear glass shows coloured edges, and tab bars fold page content inward at their edges. Settings adds a Liquid Glass tint control.

Swift and SwiftUI apps in Peach

SwiftUI previews now compile #Preview, run onChange and .task effects, and handle searchable state. They render labelled containers, table select and sort, grids, and ZStack alignment. Swift projects can import StoreKit, WeatherKit, AuthenticationServices and os by name.

Contrast Mobile workspace

Build, Design, Deploy and Projects are native tabs.

Tech

One native paint walk for the compositor

Core 2D drawing moved into a paint walk compiled into CanvasKit. The walk draws text and image leaves, box shadows, gradients, masked views, liquid glass boxes, sticky headers and scroll indicators natively, with a generation-keyed bounds cache.

Liquid Glass crop caching and blur moved into native paint. Sharing the sharp backdrop crop cut glass-menu backdrop copies per frame from 7.91 to 4.31, with identical pixels in the measured captures.

Cold builds share work

Cold web and native builds overlap and share one compile-catalog download and the manifest pack. The browser bundler composes Sucrase’s transform from its internals, cutting worker gzip from 102.5 kB to 88.7 kB.

Factory runtime

The dedicated Pair role is gone; a deterministic watcher wakes the Manager. Mid-turn corrections steer into the active Manager turn at the next tool boundary, and stalled model streams recover in place.

Native iOS fidelity

  • Back swipes can start from anywhere, yielding touches to switches, sliders and scrollers
  • Navigation titles center from the first frame of a push
  • Large-title collapses settle at the nearer end
  • Lists and forms in a sheet paint the elevated grouped colors
  • Form sheet detents re-resolve when a fold or rotation changes the window
  • Width-only form sheets keep their preferred width
  • Zoom runs UIKit’s critically damped spring and grows into the sheet’s own corners
  • Modal covers present on the iOS 27 spring and dim ramp
  • Context menu submenus expand as a two-card morph
  • Expo UI ConfirmationDialog presents the native action sheet
  • Toolbar search displays as a glass capsule
  • Switch and slider thumb glass is fitted to the measured thumb cell
  • GlassContainer merges grouped glass controls, keeping the upstream spacing prop
  • iOS tab bar badges are 19.6pt pills with 13pt text
  • The status bar follows the selected tab and can be hidden by a screen
  • The status bar samples its backdrop every paint and fades its tint over 150 ms
  • Keyboard keys draw in SF Compact with iOS 27 glyphs, and insets keep the scroll offset
  • Text at 14, 16 and 18 pt keeps UIKit line endings and baselines, with dashed and double underlines at native positions
  • SafeAreaView pads only by its own overlap, so nested content gets no duplicate insets
  • Pinch and rotation gestures measure from touch-down like the UIKit natives
  • Scroll pan admission matches iOS, with nested gesture ownership
  • Dynamic Type, Bold Text, Increase Contrast, Reduce Transparency and Reduce Motion reach app previews, and text remeasures at once
  • Maps follow the app’s light or dark appearance on iOS
  • Map markers report taps with hit rects at the live zoom
  • Map markers use Apple balloon pins, and basemaps swap live
  • Charts match iOS axis labels, plot edges and category spacing
  • Continuous capsule corners and angular gradients render with native Oklab blending
  • Liquid glass keeps accent tints
  • The Photos viewer draws the iOS 27 one-up chrome
  • Compact date pickers show the selected date as a native pill
  • Dashed and dotted borders follow React Native, and inset continuous borders keep the native radius

Devices and previews

  • Frameless native previews fill the selected device screen
  • Switching a live preview between iOS and Android reloads on the target platform
  • iPhone landscape uses measured safe areas with rotation support
  • Dark appearance reaches every app and the keyboard
  • Android scroll views show fading edges and keep their scrollbars visible while scrolling
  • MP4 recording continues through device rotation

Simulator and tooling

  • MP4 capture picks the H.264 level that holds the canvas
  • Captures composite app windows in strict z-order and keep each card’s own corner radius
  • The Settings app shows Home icons for installed apps
  • Settings appearance card shows iOS’s two previews and Automatic
  • Simulator Settings groups notification styles and files non-letter app names under a trailing section
  • The simulator Settings search shows iOS’s empty state when nothing matches
  • Apps can use One widgets and Live Activities, and their state persists across reloads
  • Previewed apps get One native haptics, clipboard, crypto, network and app-info seams
  • Preview readiness follows the foreground app
  • Apps read Reduce Transparency and Increase Contrast through AccessibilityInfo

React Native and SwiftUI

  • Text honors writing direction in paragraph shaping
  • Expo UI gauges align labels and track to iOS 27
  • Compact DatePicker opens its iOS 27 calendar
  • The upstream Split component renders through the native split host
  • Speech recognition runs through a One native seam
  • Expo Location feeds background updates with geofencing parity
  • React Native WebSockets receive native events on Android and iOS
  • Native progress views, gauges, share links and content-unavailable screens compose inside SwiftUI trees
  • Titled buttons size at 28, 34.33 and 50.33 pt
  • TextInput’s clearButtonMode draws UIKit’s clear button
  • SwiftUI list rows appear and disappear with the scroll bounds
  • TimelineView modifiers reach their content
  • Task.sleep resumes on the tenant clock
  • SwiftUI gestures are recognized on the app’s gesture handler and settled by priority
  • SwiftUI Table adapts to size classes from the device window
  • SwiftData models, in-memory queries and @Entry environment values work in Swift previews

Design and capture

  • Capture refusals and failures show as a centered frosted card over a dimmed map
  • Mid-tone brand fills move to the nearest readable lightness

Projects, editor and templates

  • Multi-file hot updates apply changed dependencies before their readers
  • Standalone exports include the workspace packages the app uses
  • Starter templates mount the shared toast host
  • Deep links to a pushed screen seat the tabs under it

Examples

  • Apple Music’s Library tab is an album grid, with covers zooming into album routes and more albums in search and library
  • Apple Music plays stations with queue and position
  • Home Designer settings use the native grouped form, and profiles edit under a transparent header
  • Home Designer adds focal pinch, two-finger pan and twist, and a native catalog sheet header
  • Finance adds budget tiles with a wallet-style list and a native add sheet
  • Finance stores currency as integer cents, and budget and goal cards navigate through links

AI building and chat

  • Factory keeps parked QA findings in sync with resumed work, and project closeout waits on open blockers
  • Generated tab bars choose icons that match each screen’s purpose
  • The local Factory runs S, M, L or XL sizes, and Auto picks the largest that fits your machine’s memory and cores

Testing and CLI

  • The Contrast CLI refuses stale builds and rejects busy or unsafe dev ports
  • Contrast shot finds dev servers from project subdirectories and treats page errors as capture failures
  • New projects commit their lockfiles, so the first dev run leaves no unstaged diff
  • Contrast deploy picks the iOS build tier and prints a dev build’s install link
  • Long-press inspection accepts a duration after a named target

Accounts, billing and reliability

  • Hosted tests bill per minute at $0.005 instead of $0.15 per flow
  • Project access revocation takes effect in an open project without a reload
  • Account deletion is blocked while you still own an active project
  • Mobile sign-in tokens move into protected device storage

Contrast UI and Android

  • Toasts render through the shared glass toast
  • Native select presents a full-width menu
  • Android Back dismisses dialog and menu overlays

Fixes and polish

1719 fixes and 206 performance improvements landed this week.

Ready?

Create a web, iOS, and Android app in minutes with agents working alongside you.