The React you already know
JSX, hooks, the Animated API and flexbox styles, exactly as you would write them for iOS or Android.
Open source · Apache-2.0 · Beta
React Native for embedded MCUs.
Write React, flash it, and the UI runs on the chip. No browser, no phone, no operating system.
npm create embedded-react@latest my-appimport {useState} from 'react';import {View, Text, Pressable} from 'embedded-react';export function App() {const [taps, setTaps] = useState(0);return (<View style={{flex: 1, padding: 20, backgroundColor: '#1a1a2e'}}><Text style={{color: '#fff', fontSize: 24}}>Hello from an ESP32.</Text><Pressable onPress={() => setTaps(taps + 1)}><Text style={{color: '#e94560', marginTop: 12}}>Tapped {taps} times</Text></Pressable></View>);}
Hello from an ESP32.
Tapped 0 times
Why Embedded React
JSX, hooks, the Animated API and flexbox styles, exactly as you would write them for iOS or Android.
Scene graph, Yoga-compatible flexbox layout, anti-aliased shapes, shadows, transforms and gradients, drawn straight into a framebuffer or SPI display.
Run a real React reconciler on QuickJS, or compile the same JSX ahead of time to a package. It is a build flag, not a rewrite.
The ahead-of-time flow leaves no JavaScript engine and no garbage collector on the device, so small MCUs are in reach.
The engine also compiles to WebAssembly. Develop in the browser with a device frame, then flash the same app.
Animations, multitouch hit-testing, scroll momentum and dial widgets run inside the engine, not in JavaScript.
Two ways to ship
Flow A · runtime
Full runtime dynamism: live state, anything JavaScript can express, and hot reload. Wants external RAM for the JavaScript heap: PSRAM on an ESP32-S3, or SDRAM on an STM32H7.
Flow B · ahead of time
State, handlers and animations are resolved at build time into a package a small runtime verifies and runs. Smaller, deterministic, and at home on MCUs with only internal RAM.
Hardware
npm create embedded-react@latest my-app