Features
Bug Fixes
- core: avoid stop propagation if ONLY pressStyle (natew)
- toast: strip react-native from web bundle via TAMAGUI_TARGET guard (natew)
- core: isBrowser checks document instead of window so it's false on native (natew)
- use-event: always use useInsertionEffect, drop broken SSR fallback (natew)
- core: restore Android RNGH press handling semantics (natew)
- core: preserve rngh nested press ownership by pointer (natew)
- core: remove responder claims from RNGH press path to fix startup freeze (natew)
- core: hoist rngh responder claim to outer display:contents wrapper (natew)
- core: fire orphan pressOut when rngh gesture loses ownership mid-drag (natew)
- core: move gestureState into objects to avoid workletization causing stale references (natew)
- core: stop clearing nextState before React commits so press-out in same JS task isn't bailed (natew)
- site: recover from stuck OAuth popup instead of alert+stranding #3994 (natew)
- site: bypass navigator.lock on /auth so OAuth never hangs on tab contention (natew)
- vite-plugin: auto-dedupe tamagui packages to prevent duplicate instances from split sub-entry bundles (natew)
- starters/expo-router: align deps with SDK 55 to fix "Couldn't find a LinkingContext" (#3991) (natew)
- plugin: cjs resolve #4009 (Henry Hobhouse)
- core: freeze native gesture mode after first render (natew)
- site: drop /auth timeout to 3s with auto-redirect, prevent popup login loop (natew)
- adapt: keep teleported subtree mounted across parent re-renders #3997 (Hirvesh)
- compiler: match monorepo disk paths and pass through whitelisted package internals in dynamic eval (natew)
- kitchen-sink: don't rewrite lineHeight on non-tamagui styles #4009 (natew)
- compiler: drive web/native resolution from platform arg, inline TAMAGUI_TARGET/EXPO_OS in bundled config #4009 (natew)
- compiler: drive web/native resolution from platform arg, inline TAMAGUI_TARGET/EXPO_OS in bundled config (natew)
- static: emit non-style props once and rename dynamic ones #4009 (Janic Duplessis)
- core: avoid display:contents wrapper on Fabric to prevent crash in mount transactions (natew)
- core: only attach RNGH press gesture for real user handlers, not synthesized pressStyle events (natew)
- core: use non-arbitrating Manual gesture for pressStyle-only components (natew)
- list-item: fix regression making spacing much smaller after icon (in february) (natew)
- popper: avoid hooks error when changing animatePosition value (natew)
- core: skip pressStyle Manual observer on Android to avoid JS freeze (natew)
- sheet: render Sheet.ScrollView with snapPointsMode="fit" (natew)
- core: lazy Platform.OS read in eventHandling.native so static extraction can load native bundle (natew)
- input: namespace placeholder/selection CSS vars to avoid self-reference with theme tokens (natew)
- core: release responder on termination + add Tap maxDistance so scrolling cancels press (natew)
- menu: only dismiss on scroll when the scroll moves the menu's anchor (natew)
- core: improve isBrowser check #4009 (natew)
- sheet: restore android gestures in portaled sheets #4009 (natew)
- vite-plugin: remove vite peer dependency #4009 (natew)
- static: rewrite dynamic testID props #4009 (natew)
- core: resolve media props in functional variants #4009 (natew)
- button: pass native text props safely #4009 (natew)
- select: hide closed native viewport contents #4009 (natew)
- adapt: preserve teleport subtree rerenders #4009 (natew)
- animations-reanimated: avoid fabric animated style guard crash #4009 (natew)
- core: avoid readonly prop overlay crash #4009 (natew)
- vite-plugin: keep rnw-lite aliases on esm #4009 (natew)
- vite-plugin: remove vite peer dependency #4009 (natew)
- site: use numeric line heights #4009 (natew)
- static: preserve imported component config during extraction #4009 (natew)
- site: update vitest tsconfig paths config #4009 (natew)
- site: avoid vitest plugin type mismatch #4009 (natew)
- vite-plugin: pre-bundle memoize-one with rnw-lite to avoid dev re-optimize reload #4009 (natew)
- animations-motion: render at resting position on first activation instead of springing from 0 Fixes #4011 (natew)
- core: preserve onPress/children types on user styled() components Fixes #4010 (natew)
- compiler: fix ternary inside pseudo style + regular style overlapping (natew)
Documentation
Performance Improvements
- core: replace O(categories) for-in scan in hot path for token resolution (natew)
Tests
- stabilize NestedPressExclusive, TabsOnInteraction, PressStyleScrollStuck for iOS Detox CI (natew)
- drop invalid justifyContent='stretch' from GroupPressTransitionMatrix (natew)
- dedupe react-native-web in kitchen-sink webpack so Sheet PanResponder fires on macOS (natew)
- format webpack alias addition with oxfmt (natew)
- sheet: add Sheet.ScrollView + snapPointsMode=fit usecase and playwright tests (natew)
- kitchen-sink: stabilize native detox coverage #4009 (natew)
Continuous Integration
- harden simulator app install with FrontBoard verification and retry (natew)
- bump Maestro driver timeout to 360s, fail fast on WarmUp failure (natew)
- fix maestro retry path doubling working directory (natew)
- format fix for vite-plugin plugin.ts #4009 (Henry Hobhouse)
- detox: default-disable KeyboardProvider in tests to fix sync hangs (natew)
- detox: add settle delays to avoid reload-after-launch hang (natew)
- detox: move metro to port 9034 to avoid foreign dev server collisions (natew)
- detox: drop android full-suite retry, fix detox NPE in 2 tests #4009 (natew)
- fix android detox launch hang and ios shard 3 hook timeouts #4002 (natew)
- detox: skip Expo SplashScreen registration under Detox to fix Android launch hang #4002 (natew)
- detox: retry safeLaunchApp on transient FBSOpenApplicationService errors #4003 (natew)
- detox: bump compiler-test hook timeouts and home-title wait for slow CI runners #4004 (natew)
- include new sheet detox tests in iOS shards #4009 (natew)
- split overloaded iOS Detox shard #4009 (natew)
- detox: scope jest haste to e2e, rebalance to 6 shards, add startup timing probe (natew)
- detox: transpile e2e via dedicated tsconfig (no type-check), revert to 4 shards (natew)
- detox: bump detox process timeout to 60min for margin, remove startup probe (natew)
Chores
- remove old v2 toast experiment (natew)
- remove all react-native peer dependencies from tamagui as pnpm is a massive headache (natew)
- remove more peerdeps, because pnpm is a bad bundler (natew)
- starters/expo-router: revert version range deviations to match monorepo common ranges, bump kitchen-sink expo-splash-screen to match (natew)
- oxfmt formatting (natew)
- update one and vite (natew)
- kitchen-sink: format merged main changes #4009 (natew)
- add otp entry to releases #4009 (natew)
- oxfmt styledNonStyleProps.test-d.ts (natew)
Commits
- 5273965: v2.0.0-rc.39 (natew)
- d76f350: v2.0.0-rc.40 (natew)
- 92700ea: canary2.0.0-rc.40-1776053246040 (natew)
- 15b12fa: canary2.0.0-rc.40-1776058939761 (natew)
- purge Cloudflare cache on server boot to fix stale HTML after deploy (natew)
- 40e5d35: improve skew protection (natew)
- 3005d6c: Add native menu radio group Detox coverage (natew)
- 4f684f4: canary2.0.0-rc.40-1776290502350 (natew)
- 6f91607: v2.0.0-rc.41 (natew)
- 4bf7515: canary2.0.0-rc.41-1776298929157 (natew)
- 3090bb3: canary2.0.0-rc.41-1776470906478 (natew)
- bc1f8bc: canary2.0.0-rc.41-1776501875026 (natew)
- bf683e1: canary2.0.0-rc.41-1776626066745 (natew)
- 31a88a0: canary2.0.0-rc.41-1776717758781 (natew)
- 9872e62: canary2.0.0-rc.41-1776739748773 (natew)
- 9881182: canary2.0.0-rc.41-1776811998898 (natew)
- 58be682: canary2.0.0-rc.41-1776813063972 (natew)
- 8cc8304: fix(button, input): add unstyled: true styling that resets browser default styles for button and input (natew)
- 2f6b5e6: improve detox shard (natew)
- 569a03a: update one (natew)
- d72304a: Implement v2 style compatibility modes (natew) #4009
- b5cc5e8: canary2.0.0-rc.41-1777345848979 (natew) #4009
- 9c86bcb: up one again (natew)
- 7a1ea4a: canary2.0.0-rc.41-1777420450440 (natew)
- f8e3353: canary2.0.0-rc.41-1778092764335 (natew)
- cb6fd05: canary2.0.0-rc.41-1778104426158 (natew)
- 4c48c33: upgrade one (natew)
- fe6f9ad: give detox more headroom (natew)
- 5eefe49: remove old main (natew)
- 3df55a9: v2.0.0-rc.42 (natew)
- 69f77cd: auto-cancel v1 on v2 purchase (natew)
- 5be132f: bump one (natew)
- cf617cf: canary2.0.0-rc.42-1778558431016 (natew)
- 87b8f62: canary2.0.0-rc.42-1778700387685 (natew)
- 19327fc: canary2.0.0-rc.42-1778704157866 (natew)
- regenerate css with namespaced input vars (natew)
- 9bed85c: canary2.0.0-rc.42-1778799071943 (natew)
- d61edfa: Merge remote-tracking branch 'refs/remotes/pr/4001' into review/pr-4001-3997-3995-issues (natew) #4009
- 1c32208: Merge remote-tracking branch 'refs/remotes/pr/3997' into review/pr-4001-3997-3995-issues (natew) #4009
- 8cfd298: Merge remote-tracking branch 'refs/remotes/pr/3995' into review/pr-4001-3997-3995-issues (natew) #3995
- 8cb1c60: merge main into issue integration branch (natew) #4009
- 645aea8: Merge branch 'v2-style-compat' (without lineHeight changes) (natew) #4009
- 9779677: canary2.0.0-rc.41-1779406554468 (natew) #4009
- 982e200: canary2.0.0-rc.41-1779421707144 (natew)
- 6d85991: v2.0.0 (natew)