FRAMEWORKExperimental — not for production

Overview

How React Native, Expo Desktop, and Spark runtimes fit together.

Legend Spark adds native desktop capabilities and a managed development workflow to React Native and Expo Desktop. Build React Native screens, use native windows, menus, dialogs, and files, and edit JavaScript with Fast Refresh.

The public package is @legendapp/spark; the CLI is spark. The single package includes its private implementation modules. Application code imports capability paths such as @legendapp/spark/files rather than installing internal @legendapp/spark-* packages.

How the pieces fit

  • React Native renders native interfaces. Application JavaScript runs in Hermes.
  • Expo supplies mobile/web tooling and selected library backends.
  • Expo Desktop creates projects and generates native desktop hosts.
  • Spark supplies desktop APIs, native compatibility checks, runtime selection, and build/packaging orchestration. Expo CLI owns Metro and the development terminal.

Node 24.19.0 or newer runs the tooling. For app consumers, npm, pnpm, Yarn, and Bun are package-manager choices; Bun is optional. The source checkout requires the pinned Bun version; see source setup. Neither Node nor Bun is embedded in the application.

Three runtime choices

RuntimeNative contentsJavaScript
Spark RunnerShared SDK development profileMetro / Fast Refresh
Custom development buildSDK plus app-specific native dependencies/configurationMetro / Fast Refresh
Standalone macOS applicationProduction-selected native modulesEmbedded bundle

Start with a compatible Runner. Adding native dependencies, helper executables, or native configuration can require a custom build. Compatibility checks include SDK, architecture, and native signatures. JavaScript-only changes do not require rebuilding.

Platform scope

TargetAvailable workflowLimits
macOS 14+, Apple SiliconRunner, custom development, standalone builds and packagingPrimary target; experimental
macOS 14+, Intel x64Architecture selection across builds, Runner registration/downloads and packagingNative builds and runtime behavior still need validation; published Runner is ARM64 only
Windows 11, x64/ARM64Local Runner and custom development buildsNative builds and runtime behavior still need validation; no production packaging or hosted Windows Runner
iOS / Android / webExpo workflows and selected shared API/UI adaptersDesktop APIs do not imply mobile/web support
Linux / Mac App StoreOutside the supported workflowNo support claim

The source targets Expo SDK 54, React Native 0.81, and Expo Desktop 1.0.0. See status and limitations for platform and feature restrictions.

Application architecture

For Electron migrations, replace DOM/CSS screens with React Native screens and browser/main-process integrations with supported capabilities. Spark has no Electron compatibility layer. An optional WebView can host selected web content.

Helper processes run app-supplied executables. Independent background Hermes heaps use @react-native-runtimes/core directly; they remain inside the app process and end when it quits.

Explore

LLM documentation index · Complete LLM documentation