PocketJS for games

Native where it must be fast. JavaScript where you iterate.

OpenStrike runs the classic maps with bots, lightmaps and recoil at a locked 60 fps on a 333 MHz PSP. The engine parts are Rust; the gameplay, HUD and menus stay JavaScript you can edit and rerun.

The split that ships

Pocket3D carries BSP worlds, visibility and a painter-sorted pipeline in the core. The HUD is a Solid app on the same native tree as every other PocketJS interface. OpenStrike, shipped →

A whole game in the guest

Pocket Voxel keeps world state, battles, scripts and saves in TypeScript inside QuickJS, while per-machine Rust renderers draw the diorama at a locked 30 fps. A creature-RPG from first principles →

Matches replay themselves

Input tapes make every run reproducible: the same tape gives the same frames, so a whole match replays frame for frame while you debug it.

OpenStrike gameplay: sunlit BSP geometry with the HUD showing 100 HP and 30/90 ammo.

OpenStrike on de_dust2: a locked 60 fps with bots on real PSP hardware.