Changelog

Faster previews and native motion

Sep 29, 2026·11 min read

Previews move closer to iOS 27 and Android: transitions, context menus, glass and scrolling follow measured values, and Swift and Kotlin apps build and run in the simulator. Underneath, the compositor draws only damaged regions natively, and small commits and auth skip the slow path.

Platform

Motion, glass and gestures match iOS 27

Navigation transitions follow iOS 27 physics and styling. An edge swipe begun mid-push catches the card on the fitted spring, and trailing capsules morph into neighboring glass without doubled outlines. Home page settle follows SpringBoard’s measured spring, carrying the release velocity.

Context menus lift their trigger with a custom preview and anchor to it. Tab bars stay expanded when the scroll view has less than 96 points of available scroll range.

Swift and UIKit apps run in previews

Swift previews compile real app codebases and run UIKit screens. Auto Layout, stack views, labels and buttons, and navigation and tab controllers with animated push and pop all run, and Apple’s Food Truck sample builds 72 of its 74 source files. SpriteKit scenes with Box2D physics, measured cryptography, keychain storage, audio playback, and UICollectionView grids with compositional layouts are available too.

Apps can ship local Swift Expo modules through the autolinker, with native views mapped in peach.config.

Android, Kotlin and Expo packages run natively

peach kotlin cold-starts a standalone Android module in the tenant. Compose reads touch slop, fling velocities and long-press timeout from ViewConfiguration, back dispatch runs through OnBackPressedDispatcher and BackHandler, and Kotlin windows paint their theme’s status bar color.

Expo DOM components, React Native WebViews and One’s Swift WebView run in the same preview pipeline, alongside SQLite, secure storage, Firebase messaging and analytics, WebRTC and LiveKit calls, and in-app purchase paywalls.

Tech

Native compositor, damage and pipeline warming

CanvasKit’s compositor runs frame invalidation, host composites and damage calculation natively. Host-composite records grow in native vectors to fit, and a native damage accumulator tracks invalidations from layout, glass, animations and source updates. During a native settle, host-miss composites compare against prior frames and capture the settled state without crossing back into JavaScript. Scene-table traversals union descendant bounds, clip them against overflow and cache results by layout generation.

Scene table bounds andclipsNative damage accumulatorHost composite comparisonSettled frame without aJavaScript round trip

Stacking now matches Fabric: z-index sorts globally at the nearest stacking host. Continuously rotating nodes are promoted to host compositor layers. Graphite deduplicates pixel-identical paint variants, cutting Home’s active pipeline set from 73 to 64.

Pipeline warming is adaptive. Home’s pipelines compile before its first frame, and background slices grow to 8 records only while frames stay on time, returning to one on any late frame. A first-visit Chrome Home paints in about 2 seconds instead of 8.

Cold-cache Chrome HomeBefore8 sAfter2 sTime until Home paints on a cold cache, before and after pipeline warming

Skottie, the ICU text dictionaries and the GIF decoder load on demand through the shared lazy resource protocol.

Simulator transport, runtime and memory

Large remote scene updates stay atomic and within wire bounds, so viewers never paint a partial scene. Native maps and video frames render in remote viewers over acknowledged channels.

Locally bridged browser previews load images and fonts over a loopback TLS HTTP/2 connection separate from the WebSocket control channel. A 96-image grid loaded in 600 ms, down from 5,252 ms, with peak concurrent image responses rising from 6 to 96 while one control command completed in 0.37 ms. Shell and tenant workers talk over a direct port, so the page relays none of their messages, and a host-owned broker keeps named worklet runtimes isolated.

Text alias accessors live once on shared node prototypes. Image decodes reuse prepared pixels across prefetch and size reads, and discarded requests are cancelled.

Workspace commits and auth

Small text commits store in the project database with no R2 on the write path. Login routing and verification SQL drop remote transaction sessions.

Native iOS fidelity

  • Segmented lenses keep gliding when pressed on an unselected segment
  • Scroll indicators fade by real elapsed time and request frames only while fading
  • Nested touchables route taps through React Native responder negotiation
  • Apps stay inactive while a system permission sheet is open
  • The share sheet presents and dismisses on UIKit’s measured springs

React Native and SwiftUI

  • Expo Sharing and System UI run through native-exact seams
  • Expo Font rasterizes styled text into images
  • Expo Print writes PDFs to its cache directory
  • Expo Notifications and TaskManager enforce native authorization behavior
  • Firebase messaging runs through a native seam with a paired library case
  • Firebase analytics runs its published JS over a native seam
  • One’s VideoPlayer plays over a native seam, and videos seek
  • The clipboard returns images in the requested native format with usable data URIs
  • Expo Image keeps loading after native view remounts
  • The GIF decoder loads through the shared lazy resource protocol
  • SwiftUI strokes preserve inset borders
  • Aspect ratios resolve from string values
  • SQLite runs the app’s installed JS over native seams
  • Firestore caches stay isolated between simulator windows and keep offline writes through reloads
  • Firestore returns authenticated data with native listeners and transactions
  • QuickCrypto streams ciphers with caller buffers and imported keys
  • MP4 durations read through the published video duration API
  • Expo AV follows iOS status and pitch algorithm qualities
  • Speech voices run through the host page following AVSpeechSynthesizer
  • Hoisted vector-icon fonts resolve under either Metro root
  • Google Mobile Ads runs over native no-fill seams
  • Firebase remote config, perf and installations run over native seams
  • The Facebook SDK supports browser login, sharing, Graph requests and event flushing
  • Nitro hybrid views run with wrapped callback references
  • An imported package’s catalog colors and symbols travel with it
  • react-native-purchases-ui runs over native paywall seams
  • Accelerate vImage box convolution matches iOS 27 for Kingfisher’s blur
  • Swift targets declaring resources get SwiftPM’s Bundle.module
  • PassKit answers availability as the iOS 27 simulator does, and GameplayKit runs state transitions with native callback ordering

Android and Kotlin

  • Compose reads touch slop, fling velocities and long-press timeout from ViewConfiguration, and drags are measured against Android
  • Screen content pans or resizes above the keyboard according to the app’s window configuration
  • Kotlin apps resolve plurals and string arrays
  • Compose date, time and range pickers render
  • Android native menus open through the popup surface
  • Surfaces compute Android elevation and apply shadow tinting
  • Vector drawables render for Kotlin apps
  • Compose semantics appear in inspect, find, tap and accessibility trees
  • Android Back hides a visible keyboard first and keeps the input’s focus
  • Night mode changes relaunch the activity from saved state with its view model kept
  • Kotlin apps handle predictive back, pause, stop, save and restore, with view models built by the default factory

Peach CLI

  • Metro assets and HMR proxy through the bridge on tunneled pages
  • Peach tap commands name the —text form when given visible text
  • Peach setup honors the global —port and keeps install output off its spinner
  • Skill install works from the standalone binary
  • Shell integration carries a remote iOS close command
  • Owner approval gates support asks after an account’s first five

Projects, editor and templates

  • The web editor renames, moves and deletes whole folders
  • Creating a project lands on the default template in one step, and the first build moves it onto the template your direction needs

Examples

  • Home Designer adds a teahouse style with tatami floors and warmer lamplight
  • New homes start as a two-storey terrace
  • The night race reads moonlit instead of pitch dark
  • Home Rally lamps light rooms after dark
  • Home Rally splits from the game template and draws with WebGPU on every platform
  • Rally adds a handbrake for drifts, pickup boxes, rematches and bots that resume at gates
  • The Todo list keeps selected Android filters visible with proven contrast
  • The RPG class picker scrolls with native pixel line heights
  • The website starter adds full-width photo bands with scrims and dark theme support

AI building and chat

  • The assistant stops its starter narration after a refused project creation
  • Provider streams that close early retry inside the active turn
  • Retrying a stalled turn keeps your directions attached
  • Request status rows show the assistant’s latest note, and the desktop assistant mascot stays above open DevTools panels
  • Starter model choices carry into the opening Design handoff
  • Free and paid plans run the same models

Accounts, billing and reliability

  • Credit invite uses survive a refused recipient funding
  • Anonymous setup stays stable after a failure until you retry
  • A live local redeploy is no longer marked failed
  • Red screens file sanitized crash reports, deduped daily; crash reports and bounded diagnostics are on by default
  • Support responses point you to the runtime release that contains a fix
  • Account directories list up to 200 projects
  • Prepaid top-ups check out as Prepaid balance

Deployment and publishing

  • Peach build and share uploads cost $0.02, down from $0.10
  • Deploys preserve authored social metadata in published app tags
  • The production pane names a building or failed first deploy
  • Production web and iOS chips present the merged production pane

Preview and developer tools

  • Covered web previews defer boot until their first visible settled presentation
  • On React 19, inspector names the app files that built a node
  • Native app identity reads the Xcode application target
  • Remote images and fonts load through their backend proxy owner
  • Why-did-you-render runs from the bundle without changing the simulator’s own React
  • Guest iOS permissions wait until their app is frontmost
  • Settings can draw the preview through the native compositor on iOS 18+
  • Share diagnostics carries the compositor’s work per tick, presented intervals and footprint

Fixes and polish

2078 fixes and 188 performance improvements landed this week.

Ready?

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