Changelog

Selected SootSim runtime updates, grouped into readable digests.

v0.1.654

2026-07-22

Launch-ready gestures on mobile Safari and Reanimated at 95%

  • Make the public demo feel launch-ready on real mobile Safari: a pinch now holds the image-space point under the centroid instead of jumping, a stationary finger interrupts momentum in both directions while a second finger joining an active pan leaves it alone, Photos paging keeps vertical placement continuous so the next drag starts from the settled transform, and short home drags advance on every delivered frame instead of waiting on a host round trip.
  • Keep an evicted app covered through app-slot rotation until its exact surface generation paints, ending the full-screen black frame on opening a third app; a sampled Native UI to Photos to Clock run found no uncovered frame across 1,517 animation frames, and direct launch measured 0.56 ms average and 1.9 ms worst shell work with no jank.
  • Settle memory across a long session: the duplicated tenant and shell image caches in the Photos flow are gone, snapshots are bounded and dispose their paired ImageBitmap and SkImage together, and a trim generation stops old in-flight decodes from repopulating a cleared cache — a forced compositor trim took home and app GPU caches from roughly 82 MB down to 4.3 MB with no worker crash.
  • Raise verified Reanimated behavior from 80% to 95%: useScrollViewOffset is driven by real shell scroll offsets instead of returning a static zero, useReducedMotion is seeded before tenant boot (with a reduceMotion URL override), and useAnimatedKeyboard, useAnimatedSensor, and entering/exiting/layout transitions all report real values now.
  • Render satellite maps without a Mapbox token: official Mapbox satellite style URLs resolve to Esri World Imagery raster tiles, globe projection joins mercator, and public route styling and camera flights were aligned with the real package, taking rnmapbox coverage to 75%.
  • Grow the design canvas map into a real board: each project remembers its viewport, fit padding scales proportionally, pins counter-scale against zoom (with a floor at far zoom-out) so size and tap radius stay screen-constant, and pan yields to an active pinch so exactly one writer settles the transform instead of oscillating mid-zoom.
  • Polish native seams and delivery: react-native-screens retries transition tags once shell ownership arrives, pager startup aligns with mobile shell state, scaled device frames keep proportional corners in Safari, each runtime binds to its exact project branch, and agent-pool realms retire on the about:blank load commit rather than a timer so a torn-down realm can no longer stay pinned with no JS retainer.

v0.1.634

2026-07-17

Sharper iOS rendering, a first-class design canvas, and native-module parity

  • Tighten compositor rendering against real iOS: hairline borders now derive their width from React Native’s PixelRatio rounding (a third of a point on the 3x devices we simulate) instead of a hardcoded half-point that painted them 50% too heavy, orphaned image slots release without re-blanking so a drag no longer flashes blank cached images, the compositor keeps repainting while scroll indicators fade out, and the modern iPhone device frame geometry was refined.
  • Match UIKit paging exactly: a hard fling on a paged scroll view now settles to the single adjacent page from where the gesture began instead of racing across every boundary, mirroring UIPageViewController and pagingEnabled, while a programmatic setPage still animates across multiple pages.
  • Make the design canvas a first-class surface: a full-screen canvas destination on the phone with natural pinch-and-pan, rubber-band pan bounds so a flick or zoom can no longer strand the board out of reach (touch drags resist past the edge like an iOS scroll view and settle back inside bounds), an engine center-on-point command for readable zoom, and accurate tap hit-testing with comment pins rendered on the touch map.
  • Bring native-module parity forward: the Apple sign-in button style enum matches Expo’s WHITE / WHITE_OUTLINE / BLACK values so a black button stops rendering white, expo-modules-core now resolves so Expo native-module requires load instead of throwing, and expo-apple-authentication ships as a bundled runtime dependency.
  • Skip paragraph rebuilds when only the width constraint changes, so text-heavy screens relayout without re-shaping glyphs they already measured.

v0.1.622

2026-07-14

Compositor owns app pixels, plus native pickers and on-demand fonts

  • Move visible app painting off the tenant thread: the compositor worker now renders both app canvases in-worker by default, realizes each surface’s GL runtime on first bind and tears it down on unbind, purges idle GPU resource caches, and steps fling momentum and native-stack screen transitions on its own clock, so scrolling and transitions stay smooth while the guest app is busy.
  • Keep Reanimated and native Animated exact now that the shell and compositor own paint: keyboard, scroll, and sensor worklets execute at their shell event source, native animation ownership is generation-qualified across surface boundaries, frame-callback scheduling is consolidated, and Animated timing, interpolation, and reset semantics were realigned with React Native.
  • Render real UIPickerView and UIDatePicker wheels on the canvas for @react-native-picker/picker and the community datetime picker, retiring the dead HTML-input date stub so spinner selectors look and behave like iOS.
  • Load iOS system fonts for every writing system on demand from a font manifest, extended Latin through the remaining iOS scripts, and key the paint paragraph cache on the font-registration generation so freshly loaded glyphs repaint instead of showing tofu.
  • Grow the design canvas from viewing to editing: frozen render nodes now carry exact Tamagui token provenance, so you can edit theme tokens across captured screens, snap between fit and actual-size, and replay recorded Maestro states as theme-aware artboards through one renderer shared by design and preview traces.
  • Polish iOS chrome and gestures: squircles paint from per-corner radii instead of only the borderRadius shorthand, device frames draw with continuous corners, pinch-zoom stays coherent while suspending the underlying scroll, pager selection survives viewport and relayout changes, host-decoded Expo video frames stream into the compositor, and 3D device mode ships designer palettes at a higher default render quality.

v0.1.577

2026-07-07

Canvas workspace, truer iOS chrome, and a deep tracing kit

  • Prototype a canvas workspace that runs the app outside device chrome on a zoomable surface, backed by a 3D quality pass: depth of field, studio softbox lighting, resin and glass material fixes, de-banded gradients, and faster orbiting.
  • Match more real iOS: long-press context menus lift an undimmed cutout preview, sheets get the iOS 26 translucent backdrop with stacked layout, menus render titles and subtitles at system spacing, borderCurve maps to squircle corners, and edge-swipe-back properly pops its screen.
  • True up touch and gestures against upstream RNGH: seam touch events match the real GestureTouchEvent shape, cancelled touches propagate instead of firing taps, gestures survive a mid-press host-view remount, and shell scroll cleanly cancels press observers.
  • Speed up frames: tree sync bypasses the page thread over a direct port, the raster cache reaches scroll rows, per-surface rendering and a larger glyph budget smooth scrolling, vsync-demand hysteresis stops pump thrash, and discarded nodes release through a weak tag registry.
  • Ship a deep tracing kit: recordings capture React profiling, frame rows, and console logs into a trace timeline on preview shares, agent drive logs record per-tool timing, and a live memory sampler reports object counts per worker.
  • Park background webviews under the canvas behind tap-to-load placeholders with captured frames and an optional live mode, render custom map markers at their coordinates, and recover tenant chunks and stalled sync instead of wedging.

v0.1.531

2026-06-29

Preview sharing, native menus, and runtime performance

  • Add authenticated preview sharing controls, account billing routes, and usage metering for carbon preview uploads.
  • Make native context menus handle long-press scrubbing, keyboard-shifted triggers, submenu highlights, and nested menu rerenders more reliably.
  • Improve shell and app-surface performance with retained picture rasterization, tighter damage tracking, bounded shell vsync, and reused liquid-glass blur paint.
  • Expand the native seam surface for speech recognition, SwiftTerm, device info, rainbow storage, Expo view managers, glass materials, and RNGH / Reanimated swipeables.
  • Harden mobile preview, fullscreen iOS preview, screenshot editing, Safari touch routing, WebView overlays, keyboard handoff, and failure redbox reporting.

v0.1.163

2026-06-20

Inline runtime bundle deps + preview hardening

  • Add @hot-updater/react-native to the inline bundle deps so OTA-aware tenant bundles boot without a host-side stub.
  • Tighten preview / run-on-phone retry, ref ownership, and cancellation so the mobile preview no longer spins forever on disconnect.
  • Compress oversized template icon / bootsplash PNGs (~899 KB → ~83 KB) to cut first-paint payload on slow networks.

v0.1.162

2026-06-20

Mobile preview surfaces + screenshot capture

  • Ship the iOS run-on-phone fullscreen host and a web preview WebView surface backed by a live-deployment URL resolver.
  • Native glass bottom-tab project shell with a switcher header.
  • Raise the headless-CI screenshot capture timeout to 45 s so cold-boot branch builds reliably land a thumbnail.
  • Chat composer: fix the loose / nested-list markdown crash and trim streaming allocations.

v0.1.161

2026-06-19

Frameless shell + streaming-markdown chat

  • Frameless run-on-phone shell mode (?frameless=1) for embedding sootsim without the device chrome.
  • Flagship streaming-markdown chat with a list recipe, activity cards, and a glass composer.
  • Gentle breathing avatar while a chat turn streams.
  • Per-project Zero provider mount so threads / messages / files stay scoped to the active project.

v0.1.158

2026-06-19

Liquid glass polish + appearance toggle

  • Make the engine the source of truth for the appearance toggle so light / dark flips never desync from the host.
  • Adapt blur materials to dark mode via DynamicColorIOS so frosted surfaces stay readable in either theme.
  • Render liquid-glass icon buttons as true circles.
  • Magic-link sign-in establishes a real sootsim session on sootsim.com.

v0.1.155

2026-06-18

Splash conformance + floating tab bar

  • Paint the real configured splash with faithful conformance against the iOS oracle.
  • Settle the floating tab bar to a flat frosted selection and densify the bar frost.
  • Match the iOS SF Symbol stroke weight and add the newspaper glyph.
  • Bump record start timeout to 90 s for live / combined modes so long captures stop racing the budget.

Ready to build?

Run your React Native app in the browser. No simulators, no native toolchain, no waiting.

curl -fsSL https://sootsim.com/install.sh | sh