< all projects

OpenUmbra

An open-source 1v1 silhouette fighter for the browser, with rollback netcode so online fights feel like local ones.

status
Playable locally
role
Builder
when
2026
kind
Browser game

Private code. Happy to walk through it on a call.

the TSPL2 that prints this label
SIZE 101.6 mm, 50.8 mm
GAP 3 mm, 0 mm
DIRECTION 1
CLS
TEXT 32,28,"4",0,1,1,"OpenUmbra"
TEXT 32,92,"2",0,1,1,"Browser game"
TEXT 32,124,"2",0,1,1,"2026"
BARCODE 32,196,"128",120,0,0,1,2,"https://ansh.bhalala.org/projects/openumbra"
PRINT 1,1

OpenUmbra is a 1v1 fighting game for the browser, in the style of the 2D silhouette fighters I grew up playing. I wanted one with committed attacks, blocking by standing still, and hits that feel heavy, and I wanted to play it online with friends.

How it's built

  • TypeScript, Vite, and PixiJS for rendering.
  • The fight runs as an integer simulation with hand-keyed 2D skeleton poses, so two machines always compute the same frame.
  • Rollback netcode over WebRTC: each side predicts the other's input and rewinds when it guessed wrong, so online fights feel local.
  • Matchmaking and rooms run on Cloudflare Workers with Durable Objects.

How it got here

The first version was a Godot mobile game. In September 2026 I decided the 3D rig and effects weren't giving the feel I wanted and rebuilt it for the web. The design came from a panel of AI agents that wrote 22 decision records.

It's playable end to end on my machine, including online play between two browsers. It isn't deployed yet.

Built with

  • TypeScript
  • Vite
  • PixiJS
  • WebRTC
  • Cloudflare Durable Objects