Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
5bd086d
chore: upgrade to Expo SDK 55 and React Native 0.83
jmeistrich Oct 26, 2026
1e157da
fix: keep React Native Windows 0.83 out of macOS autolinking
jmeistrich Oct 26, 2026
d46964d
fix: keep Spark's AppKit host on the Expo Desktop 55 template
jmeistrich Oct 26, 2026
973862a
fix: remove Expo's duplicate UIApplication alias before fingerprinting
jmeistrich Oct 26, 2026
edced14
fix: use desktop UI controls for macOS on Expo SDK 55
jmeistrich Oct 26, 2026
bf24b9c
fix: preserve desktop package entries on macOS with Expo SDK 55
jmeistrich Oct 26, 2026
ddb98bb
fix: use string paths in the macOS entry guard
jmeistrich Oct 26, 2026
4bb8a0e
fix: keep Windows workspace config parseable by Expo
jmeistrich Oct 26, 2026
9305ab2
fix: keep spark dev --localhost reachable on 127.0.0.1 with Expo SDK 55
jmeistrich Oct 26, 2026
d492be5
fix: prefer IPv4 localhost in Metro test harnesses
jmeistrich Oct 27, 2026
f3bd11a
fix: route macOS main window options to the host setter
jmeistrich Oct 27, 2026
8fcf7d5
fix(ui): keep radio semantics on Android Select
jmeistrich Oct 31, 2026
a149345
feat: store react-native-mmkv data in the app's folder on macOS
jmeistrich Oct 27, 2026
02103a0
feat: run react-native-unistyles on macOS
jmeistrich Oct 27, 2026
391bd04
feat: build react-native-quick-crypto on macOS
jmeistrich Oct 27, 2026
dd7965f
feat: run react-native-nitro-fetch on macOS
jmeistrich Oct 27, 2026
520c07b
feat: render @react-native-community/blur on macOS
jmeistrich Oct 27, 2026
f70db78
feat: build react-native-worklets-core on macOS
jmeistrich Oct 27, 2026
98ab581
fix: keep libraries without a macOS pod out of macOS codegen
jmeistrich Oct 27, 2026
497376f
feat: show react-native-fast-image on macOS with an Image stand-in
jmeistrich Oct 27, 2026
f21c924
feat: profile with react-native-release-profiler on macOS
jmeistrich Oct 27, 2026
e68c715
fix: leave skipped optional patches out of prepared packages
jmeistrich Oct 27, 2026
29a8dd7
feat: read App Tracking Transparency on macOS
jmeistrich Oct 27, 2026
9cd7aec
test: run @shopify/react-native-skia in the macOS Kitchen Sink
jmeistrich Oct 27, 2026
1ec1f2a
fix: patch tab-indented package.json files consistently
jmeistrich Oct 27, 2026
1a83a1b
feat: render react-native-blurhash on macOS
jmeistrich Oct 27, 2026
50f2b7a
fix: import react-native-screen-corner-radius on macOS
jmeistrich Oct 27, 2026
32d6bcf
test: run react-native-nitro-sqlite in the macOS Kitchen Sink
jmeistrich Oct 27, 2026
c8d7cef
feat: read app logs with react-native-app-logs on macOS
jmeistrich Oct 27, 2026
a11af70
feat: scan barcodes with react-native-nitro-zxing on macOS
jmeistrich Oct 27, 2026
681c0ba
test: run react-native-safe-area-context in the macOS Kitchen Sink
jmeistrich Oct 27, 2026
7cf5b3f
feat: keep the Mac awake with expo-keep-awake
jmeistrich Oct 27, 2026
1394dfb
feat: render react-native-screens on macOS with its web views
jmeistrich Oct 27, 2026
ef146ee
test: run react-native-reanimated in the macOS Kitchen Sink
jmeistrich Oct 27, 2026
dde7aa2
test: run react-native-gesture-handler in the macOS Kitchen Sink
jmeistrich Oct 27, 2026
9189185
feat: show native-stack headers with React Navigation on macOS
jmeistrich Oct 27, 2026
c30be2b
fix: build react-native-quick-crypto for Intel Macs
jmeistrich Oct 27, 2026
4682480
fix: scope Nitro Fetch's prefetch queue and key to the app on macOS
jmeistrich Oct 27, 2026
c5fb55d
fix: drop the react-native-tracking-transparency macOS patch
jmeistrich Oct 27, 2026
8427236
fix: load Kitchen Sink library demos lazily and scope their Babel plu…
jmeistrich Oct 27, 2026
37bdc2f
test: run expo-crypto in the macOS Kitchen Sink
jmeistrich Oct 27, 2026
0db45cc
test: run expo-linear-gradient in the macOS Kitchen Sink
jmeistrich Oct 27, 2026
c6ac8ae
fix: resolve expo-web-browser's dismiss as dismiss on macOS
jmeistrich Oct 27, 2026
9bc6e25
feat: run expo-application on macOS
jmeistrich Oct 27, 2026
13d4b6b
feat: report Mac device details with expo-device
jmeistrich Oct 27, 2026
6f70ef9
feat: run expo-localization on macOS
jmeistrich Oct 27, 2026
0a2e195
fix: read the Mac's computer name without a host lookup in expo-device
jmeistrich Oct 27, 2026
b792d7a
feat: play expo-haptics feedback on Mac trackpads
jmeistrich Oct 27, 2026
efaf564
fix: draw react-native-svg on macOS
jmeistrich Oct 27, 2026
51e5706
test: run @react-native-community/netinfo in the macOS Kitchen Sink
jmeistrich Oct 27, 2026
4b91836
fix: serve assets from the e2e driver's Kitchen Sink bundle server
jmeistrich Oct 27, 2026
44c8f65
fix: resolve expo-font family aliases on macOS
jmeistrich Oct 27, 2026
f07ed32
test: run @expo/vector-icons in the macOS Kitchen Sink
jmeistrich Oct 27, 2026
7129469
fix: contain a failing Kitchen Sink library screen to its own error
jmeistrich Oct 27, 2026
04e6335
test: run drawer layout, bottom sheet, pressable opacity and expo-sta…
jmeistrich Oct 27, 2026
0bde32a
feat: run expo-blur on macOS with NSVisualEffectView
jmeistrich Oct 27, 2026
3387067
fix: mount blur VibrancyView children inside the material on macOS
jmeistrich Oct 27, 2026
f57a342
fix: tighten the worklets-core and nitro-zxing macOS demos
jmeistrich Oct 27, 2026
2d0b5bc
feat: render expo-image on macOS with a React Native Image stand-in
jmeistrich Oct 27, 2026
1b055e0
fix: patch optional dependencies whose exports map hides package.json
jmeistrich Oct 27, 2026
2e2d51a
feat: draw expo-symbols SF Symbols with AppKit on macOS
jmeistrich Oct 27, 2026
66c324b
feat: mask views with @react-native-masked-view/masked-view on macOS
jmeistrich Oct 27, 2026
49dc125
feat: host expo-glass-effect in AppKit Liquid Glass on macOS
jmeistrich Oct 27, 2026
869c402
test: tighten the Skia, NetInfo, expo-crypto and gradient macOS checks
jmeistrich Oct 27, 2026
b69150b
test: run expo-splash-screen in the macOS Kitchen Sink
jmeistrich Oct 27, 2026
dc4248f
feat: set the main window background with expo-system-ui on macOS
jmeistrich Oct 27, 2026
91b2a62
feat: pick images and videos with expo-image-picker on macOS
jmeistrich Oct 27, 2026
0054054
feat: manipulate images with expo-image-manipulator on macOS
jmeistrich Oct 27, 2026
57c28b0
feat: build expo-location for macOS CoreLocation
jmeistrich Oct 27, 2026
7158760
feat: host @react-native-community/datetimepicker in NSDatePicker on …
jmeistrich Oct 27, 2026
41a767e
feat: run react-native-keyboard-controller on macOS with its web bind…
jmeistrich Oct 27, 2026
1719ebd
fix: keep @sentry/react-native's replay mask views on macOS
jmeistrich Oct 28, 2026
0c1b284
test: run expo-router in the macOS Kitchen Sink
jmeistrich Oct 28, 2026
04cf0e4
feat: build react-native-graph paths with Skia 2's PathBuilder
jmeistrich Oct 28, 2026
12af3d6
test: harden the keep-awake, drawer, bottom sheet and pressable demos
jmeistrich Oct 28, 2026
b88a6e8
test: re-approve the Kitchen Sink catalog goldens
jmeistrich Oct 28, 2026
71f4043
fix: settle expo-image sources macOS cannot draw, and keep asset scale
jmeistrich Oct 28, 2026
fe0cf94
fix: keep FastImage source scale and uri placeholders on macOS
jmeistrich Oct 28, 2026
8ec2771
fix: keep the macOS date picker on its value when its limits change
jmeistrich Oct 28, 2026
75c4149
fix: report expo-location permission denied when its usage key is mis…
jmeistrich Oct 28, 2026
eb2bbdf
test: give the Kitchen Sink graph demo a gesture handler root view
jmeistrich Oct 28, 2026
7232b80
fix: build Spark's patched macOS pods for macOS 14
jmeistrich Oct 28, 2026
8d30a0f
fix: write macOS codegen autolinking input to the native directory
jmeistrich Oct 28, 2026
d69e506
fix: preserve macOS image sizing and background props
jmeistrich Oct 28, 2026
b609753
test: require native picker frames and exact library outcomes
jmeistrich Oct 28, 2026
a05f9bf
fix: clear missing macOS defaults domains in e2e runs
jmeistrich Oct 28, 2026
770acca
[KS] Add real macOS pointer input to the e2e driver
jmeistrich Oct 28, 2026
cf3cba4
fix: pair macOS pointer events and restore window state
jmeistrich Oct 29, 2026
11ba543
fix: preflight pointer flows and reuse the mouse helper
jmeistrich Oct 29, 2026
7f0a01a
test: cover successive React Native Pressable pointer clicks
jmeistrich Oct 29, 2026
e59469b
fix: wait for mounted UI before preparing pointer taps
jmeistrich Oct 29, 2026
b4aab39
fix: validate pointer input before waiting for the UI to settle
jmeistrich Oct 30, 2026
2792438
fix: give pointer taps the step timeout and tap a screen that never s…
jmeistrich Oct 30, 2026
c9e35ac
fix(e2e): keep a pointer tap's target re-resolves within its step tim…
jmeistrich Oct 31, 2026
a253114
fix: let optional pins skipped for another version pass native prepar…
jmeistrich Oct 31, 2026
4c79640
feat(e2e): make the macOS library checks blocking and run pointer flo…
jmeistrich Oct 31, 2026
b8dfe10
fix(kitchen-sink): exclude the new desktop libraries on Windows
jmeistrich Oct 31, 2026
99c74c6
test(e2e): update the macOS dock goldens
jmeistrich Oct 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ The current distribution mechanism is local tarballs. `scripts/pack.ts` writes c

`~/.spark` is the default global registry; `SPARK_HOME` overrides it. SDK records are versioned. Runtime registration records a path rather than copying an application. The managed prebuilt build project is created under the spark home unless a project is supplied explicitly. App-local `.spark` data and the global spark home are different scopes.

The template manifests and `scripts/prepare-runtimes.ts` are the authoritative pins. We remain on Expo Desktop `1.0.0` and native template `54.81.1`, with Expo 54.0.37, React Native 0.81.6, React Native macOS 0.81.7, and React Native Windows 0.81.35. Creation uses a subprocess-scoped npm 11 executable because Expo Desktop misreads npm 12's local-tarball metadata. The selected package manager installs dependencies. This compatibility adapter does not patch upstream or change the host npm installation.
The template manifests and `scripts/prepare-runtimes.ts` are the authoritative pins. We use Expo Desktop `1.0.6` and native template `55.83.10`, with Expo 55.0.32, React Native 0.83.10, React Native macOS 0.83.0, and React Native Windows 0.83.2. Creation uses a subprocess-scoped npm 11 executable because Expo Desktop misreads npm 12's local-tarball metadata. The selected package manager installs dependencies. This compatibility adapter does not patch upstream or change the host npm installation.

Windows uses its own complete application template, with no runtime removal/replacement of macOS source files. SDK packing prepares the pinned Runtimes archive and Windows Nitro, OP-SQLite, and WebView adapters on either host OS. Patch application uses JavaScript; consumers receive ordinary dependency archives.

Expand Down Expand Up @@ -233,7 +233,7 @@ For a missing runtime, inspect SDK registration and binary metadata. For an inco

Windows support is part of the existing framework. `spark create --platform windows`, `spark sdk build-runner --platform windows`, `spark dev`, and `spark build --dev` share project discovery, runtime metadata, registry, compatibility policy, Metro gating, terminal actions, and build records with macOS. There is no second session implementation or external source kit. See the [Windows guide](docs/windows-slice.md) for commands and prerequisites.

The development targets are Windows 11 x64 and ARM64, RNW 0.81.35, New Architecture/Hermes, and the pinned Expo Desktop template. That RNW template uses MSVC v145 / Visual Studio 2026. The minimal starter provides the native host; the SDK prebuilt profile adds the desktop SDK and external libraries. Universal projects preserve configuration and generated projects across platform switches. Windows architecture defaults to the OS CPU (including ARM64 when the CLI is emulated) and can be overridden with `SPARK_WINDOWS_ARCH=x64|arm64`. It participates in the native fingerprint and product path. Build records retain the latest build per mode; registered binaries for the other architecture remain intact. Expo Desktop beta owns generation and RNW receives the corresponding `--arch x64` or `--arch ARM64`.
The development targets are Windows 11 x64 and ARM64, RNW 0.83.2, New Architecture/Hermes, and the pinned Expo Desktop template. That RNW template uses MSVC v145 / Visual Studio 2026. The minimal starter provides the native host; the SDK prebuilt profile adds the desktop SDK and external libraries. Universal projects preserve configuration and generated projects across platform switches. Windows architecture defaults to the OS CPU (including ARM64 when the CLI is emulated) and can be overridden with `SPARK_WINDOWS_ARCH=x64|arm64`. It participates in the native fingerprint and product path. Build records retain the latest build per mode; registered binaries for the other architecture remain intact. Expo Desktop beta owns generation and RNW receives the corresponding `--arch x64` or `--arch ARM64`.

Windows signatures include Windows native sources/project files and host/config integration; generated build outputs and NuGet lockfiles do not invalidate the source signature. Framework/runtime version changes participate in the mandatory host signature. Directly installed native packages without a Windows implementation fail clearly. This remains a constrained development graph, not acceptance of every third-party dependency arrangement or custom native project modification.

Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ Packaging requires signing credentials and a notarization profile. It signs a st

Windows uses the same CLI, starter, prebuilt registry, native compatibility checks, and managed Metro session. The Windows starter includes the native host; the SDK prebuilt profile includes the desktop modules and external integrations. Their Windows source implementations are ready for native acceptance. There is no separate source kit to install.

On Windows 11 x64 or ARM64 (including Parallels), install the prerequisites in the [Windows guide](docs/windows-slice.md), including Visual Studio 2026 / MSVC v145 for the pinned RNW 0.81.35 template. Then run from the framework checkout:
On Windows 11 x64 or ARM64 (including Parallels), install the prerequisites in the [Windows guide](docs/windows-slice.md), including Visual Studio 2026 / MSVC v145 for the pinned RNW 0.83.2 template. Then run from the framework checkout:

```powershell
bun install
Expand Down Expand Up @@ -316,7 +316,7 @@ macOS 14+ (Apple Silicon) supported; Windows preview, not yet verified

This is a prerelease; APIs and tooling may change. Intel macOS has architecture selection tooling but no verified native build/runtime support; see [Intel macOS](docs/macos-intel.md). Windows currently covers development builds, with details in the [Windows guide](docs/windows-slice.md). Linux and Mac App Store distribution are unsupported. Mobile/web development delegates to Expo.

The checkout uses Expo SDK 54, React Native 0.81, and Expo Desktop 1.0.0. See the [integration boundary](docs/expo-desktop-integration.md) for upstream requirements.
The checkout uses Expo SDK 55, React Native 0.83, and Expo Desktop 1.0.6. See the [integration boundary](docs/expo-desktop-integration.md) for upstream requirements.

Use the [Mac and Windows manual acceptance checklist](docs/desktop-manual-acceptance.md)
to validate a checkout on real machines, including runtime rebuilds and OS interactions.
Expand Down
Loading
Loading