One engine, native and web.
A single TypeScript-first 2D engine for animation, gamification, and interactive experiences — Skia via react-native-skia on native, CanvasKit WASM on the web. Write it once; the same API drives both surfaces.
React Native + Web · Skia / CanvasKit
One TypeScript source, Web and React Native. Hybrid ECS, Skia sprite batching, and zero-alloc hot paths drive animation, gamification, and interactive experiences — 40tree-shakeable packages on a strict downward-only graph. Not a Unity, Godot, or Unreal competitor: Flare lives inside your web and mobile apps. Pick the live demo above and it runs real engine packages in your browser via CanvasKit.
// Why Flare
A single TypeScript-first 2D engine for animation, gamification, and interactive experiences — Skia via react-native-skia on native, CanvasKit WASM on the web. Write it once; the same API drives both surfaces.
The renderer groups sprites by texture atlas and emits a single Skia Atlas call per atlas batch — one draw call per texture, not per sprite. Per-sprite transforms run in a useRSXformBuffer worklet on the UI thread.
40 layered packages across nine layer bands with strictly enforced dependency direction — lower layers never import higher ones — so you ship only what you use. Layer 0 has zero dependencies; debug code tree-shakes out via __DEV__.
Physics runs at a fixed rate (default 60 Hz) on an accumulator while rendering interpolates between states — reproducible, frame-rate-independent behavior. @flare-engine/testing adds a fake clock, scene-snapshot assertions, and a bench-session harness.
// Modular by design
Every system is its own package across nine layer bands. Lower layers never import higher ones, so the graph stays acyclic and your bundle stays as small as your game.
// One API
The umbrella @flare-engine/engine re-exports every layer. Mount aGameView, start the fixed-timestep loop, and the same source renders through Skia on native and CanvasKit on the web.
import { GameView, type GameContextValue } from "@flare-engine/engine";
import type React from "react";
import { StyleSheet, View } from "react-native";
function handleReady(ctx: GameContextValue): void {
ctx.loop.start();
}
export function App(): React.ReactElement {
return (
<View style={styles.root}>
<GameView onReady={handleReady} style={styles.game} />
</View>
);
}
const styles = StyleSheet.create({
root: { flex: 1, backgroundColor: "#000" },
game: { flex: 1 },
});// Built for real-time
Architecture facts + Bun microbench (median, reproducible in CI). On-device frame captures live in the engine's benchmark suite. Web performance is not yet benchmarked.
Modular, open source (Apache-2.0 at launch), and TypeScript-first. Start in the browser or drop it into your React Native app.
@flare-engine/* is restricted on npm until the October 2026 OSS launch.
Get notified at launch.
One email when Flare Engine goes open source. No spam, unsubscribe anytime.