The React you know.
State, effects, context and reusable components. Four primitives become the building blocks of your visual language.
An interface layer for your next world
Build menus, inventories and HUDs with familiar components. Let Yoga handle layout and WebGL handle the pixels.
TypeScript first. Engine independent. Yours to style.
A working interface, not a screenshot
Every panel below is rendered by the library.
Click the canvas, or Tab into its controls.
Loading the renderer…
State, effects, context and reusable components. Four primitives become the building blocks of your visual language.
Supply image URLs or an asset catalog. Register your own font atlases, change theme tokens, and drive frames from your game loop.
Your simulation owns game state. The interface reads snapshots and calls actions. Use a transparent canvas overlay or draw into a WebGL 1 context.
From a canvas to an interface
Start with the included font and layout module. Add your game’s identity through composition, assets and style.
Read the integration guide →import { createUI, View, Text } from 'ludic-canvas';
const ui = await createUI({ canvas });
ui.render(
<View style={{ padding: 24, gap: 12 }}>
<Text style={{ fontSize: 28 }}>Ready to play</Text>
<View onPress={() => startGame()} label="Start game"
style={{ padding: 16, background: '#526dff', borderRadius: 8 }}>
<Text>Start game</Text>
</View>
</View>,
);
// When leaving the scene:
ui.destroy();Version 0.1.0 targets browser games with React 19.3.1 and WebGL 1. It supports menus, HUDs and inventories. Text uses pre-baked glyph atlases and greedy wrapping; complex-script shaping, editable text, controller navigation and native engine bindings are future work. The accessibility mirror covers pressable controls and live announcements, not full document semantics.