# Overview

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

Source: https://legend.so/spark/overview/

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](https://legend.so/spark/overview/#how-the-pieces-fit)

![Layer diagram: Legend Spark on top of Expo Desktop, which builds on Expo, which builds on React Native](https://legend.so/assets/spark/spark-expo-desktop-react-native-stack.webp)

-   **[React Native](https://github.com/facebook/react-native)** renders native interfaces. Application JavaScript runs in Hermes.
-   **[Expo](https://github.com/expo/expo)** supplies mobile/web tooling and selected library backends.
-   **[Expo Desktop](https://github.com/shirakaba/expo-desktop)** creates projects and generates native desktop hosts.
-   **[Legend Spark](https://legend.so/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](https://legend.so/spark/overview/#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](https://legend.so/spark/development/#native-changes) instead. It works the same way, with your native code included.

## [Platform scope](https://legend.so/spark/overview/#platform-scope)

macOS 14+ on Apple Silicon is the primary target today. Windows and Intel Mac support are in progress; see [status and limitations](https://legend.so/spark/limitations/) for details.

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

## [Application architecture](https://legend.so/spark/overview/#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](https://legend.so/spark/integrations/) can host selected web content.

[Helper processes](https://legend.so/spark/integrations/) 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](https://legend.so/spark/overview/#explore)

-   [Getting started](https://legend.so/spark/getting-started/): create, run, and build a macOS app from npm.
-   [Development](https://legend.so/spark/development/) and [configuration](https://legend.so/spark/configuration/): Spark Runner, custom development builds, Expo integration, and native changes.
-   [API guide](https://legend.so/spark/reference/): every public capability and shared contracts.
-   [Native UI](https://legend.so/spark/ui/), [AI execution](https://legend.so/spark/ai/), and [examples](https://legend.so/spark/examples/).
-   [Packaging and updates](https://legend.so/spark/distribution/) and [migration](https://legend.so/spark/migration/).

[LLM documentation index](https://legend.so/spark/llms.txt) · [Complete LLM documentation](https://legend.so/spark/llms-full.txt)

[View Markdown](https://legend.so/spark/overview.md)[Report a documentation correction](https://github.com/LegendApp/legend-docs/issues/new?title=Docs%3A+Overview&body=Page%3A+https%3A%2F%2Flegend.so%2Fspark%2Foverview%0A%0AWhat+is+incorrect+or+missing%3F%0A%0AExpected+behavior+or+supporting+source%3A%0A)
