Legend SparkExperimental — not for production

Overview

How Legend Spark builds on React Native, Expo, and Expo Desktop, and how Spark Runner gets you developing.

Build desktop apps with React Native screens, native windows, menus, dialogs, and files. Edit JavaScript with Fast Refresh.

Install @legendapp/spark for the APIs and spark CLI. Import features from paths such as @legendapp/spark/files.

How the pieces fit

Layer diagram: Legend Spark on top of Expo Desktop, which builds on Expo, which builds on React Native
  • 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.
  • Legend 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+ runs the tooling. Use npm, pnpm, Yarn, or Bun to manage dependencies. Neither Node nor Bun runs inside the app.

Spark Runner

Spark Runner is a prebuilt desktop app that runs your JavaScript from Metro with Fast Refresh, so you can start developing without Xcode or compiling native code. The first launch downloads a matching Runner and later sessions reuse it. JavaScript changes never need a rebuild.

When your app adds native dependencies, helper executables, or native configuration such as URL/document associations, Spark asks for a custom development build instead. It works the same way, with your native code included.

Platform scope

macOS 14+ on Apple Silicon is the primary target today. Windows and Intel Mac support are in progress; see status and limitations for details.

Spark 0.0.1 targets Expo SDK 54, React Native 0.81, and Expo Desktop 1.0.0.

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