pre-release · pre-alpha

An HTML/CSS/JS runtime for desktop apps and games.

Electron-shaped, but the rendering pipeline is ours — QuickJS, a custom layout engine, Skia, and SDL_GPU. So 3D, physics, audio, game networking, and on-device AI/ML wire straight into the DOM, in one process, no IPC to a Chromium renderer.

hello/index.html
<!-- a bro app is just a folder with an index.html -->
<h1 id="msg">Hello</h1>
<button id="btn">Click me</button>
<script>
  document.getElementById('btn').addEventListener('click', () => {
    document.getElementById('msg').textContent = 'Hello, bro';
  });
</script>
$ bro path/to/hello

Why it exists

The web platform is a great UI layer. The rest, we built in.

Coding agents build web UIs really well. Native UIs take more debugging to get right. Electron solves that — but only for what the web platform natively supports.

In bro, HTML/CSS/JS is the UI/app layer like Electron. But the rendering pipeline is ours, which means we can plug in whatever we want underneath. And we have: a 3D scene graph, Jolt physics, a real-time audio engine, mesh generation and CSG, navmesh pathfinding, game networking over GNS, and a full on-device AI/ML inference stack — all exposed to JS, all running in one process, no IPC to a Chromium renderer.

None of this is new. It's a reconfiguration that works better for coding agents.

Rendering parity vs Chromium

Bro draws its own pixels.

HTML and CSS are rendered by our own engine — not by embedding Chromium. Broparity is a side-by-side test suite that compares bro's output to Chromium, pixel-by-pixel and structurally, on a curated set of layout cases.

loading
fetching live numbers
View the live parity report →

What you get

A web runtime, plus everything a game and an AI app need.

Every surface below is exposed to JavaScript and documented in the reference.

</> Web platform

HTML5 parsing, CSS (flexbox, gradients, border-radius, overflow/scroll), SVG, Canvas 2D, WebGL 2.0, Web Components with Shadow DOM, Web Workers, Fetch, localStorage, and form controls with real text editing. three.js and jQuery work.

HTML5 + CSSCanvas 2DWebGL 2.0Shadow DOMWorkersFetch

Graphics & 3D

A 3D scene graph with mesh rendering and voxel terrain, PBR lighting, procedural mesh generation and CSG, SIMD noise, an ecosystem sim, and transform gizmos for editing.

bro.scenebro.meshbro.noisebro.florabro.gizmo

Physics & audio

Jolt rigid-body physics with contact events, wired into the scene graph. A real-time Web Audio engine with synthesis, effects, spatialization, and MIDI — plus live mic capture.

PhysicsAudioContextbro.mic

Game systems

Navmesh and A* pathfinding, steering, and perception for game agents. Peer-to-peer game networking over Valve's GameNetworkingSockets. Native file dialogs and menu bars.

bro.ai.gamebro.netdialogsbro.menu

On-device AI/ML inference

GPU-accelerated model inference wired into JS — CUDA / Metal with a CPU fallback (bro.gpu probes the live backend). A unified tensor type and op set underpins text generation, diffusion, speech, and vision — all running locally, no server.

bro.tensor bro.lm — Qwen3 bro.diffusion — SD U-Net/VAE/LoRA bro.tts — Kokoro · Qwen3-TTS bro.stt — Whisper bro.wake bro.vision — SAM · depth · normals · ControlNet bro.image triposplat — image → 3D

Built for development

Headless mode runs the full pipeline — GPU, real fonts, WebGL — without a window, driven by JS with virtual time for deterministic testing. A DOM inspector, settings system, and line-coverage reports round it out.

bro-headlessvirtual timeinspect()coverage

The launcher

Naked bro opens a built-in project manager. The launcher and a curated set of starter apps live in the sibling broworkshop repo — games, tools, demos, and AI/research apps you can clone and reshape.

gamestoolsdemosai

Architecture

One engine, layered cleanly.

HTML is parsed into a single DOM, CSS resolved by a cascade, layout computed, and the tree rasterized by Skia — then composited with the 3D scene layer through SDL_GPU. The subsystems stack:

util logging · strings (standalone) platform SDL3 window · event loop render Renderer · SkiaRenderer · RasterRenderer svg → layout → dom htmlayout adapters · draw traversal · tree canvas webgl scene physics tensor 2D · WebGL2 · 3D · Jolt · ML js QuickJS + qjsbind bindings for all of the above engine orchestrates every subsystem · main loop

Each piece lives in its own sibling repo so it can be used independently of bro:

Plus Jolt for physics, Skia for rasterization, SDL3 for windowing and GPU display, and QuickJS as the JS engine.

Read the reference

Every API surface — audio, scene, physics, mesh, networking, AI/ML, and the rest — is documented as an annotated .js file with JSDoc and usage examples. Guides cover headless mode, settings, the inspector, projects, and multi-repo workflow.

Browse the reference →