Andrew Forster
Product-minded software engineer
contact@andrewjf.com
contact@andrewjf.com

2026 All Rights Reserved
  1. Home
  2. Projects
  3. Hexis
Hexis project preview

Hexis

Java
Rust
C
Lua
TypeScript
Next.js
PostgreSQL
Stripe
<h2>Reconstructing a live 3D game session in the browser from compact state updates</h2><p>Hexis is a licensed Minecraft automation and scripting platform used by more than 300 registered users. It combines a Java desktop client, a sandboxed Lua API, native Rust and C modules, and a TypeScript web platform for accounts, releases, licenses, sessions, and administration.</p><p>I built the product across those systems. The newest part is a live browser viewer that reconstructs a running Minecraft session as a 3D scene instead of streaming recorded video.</p><img src="https://vivujyp67aiffgjd.public.blob.vercel-storage.com/projects/images/content-image-1788912232937-X4E8eZcxjri6EWTdzCnNQSslwMAjwC.png" alt="Hexis browser replay reconstructing a Minecraft world from recorded state"><p><em>A recorded session rendered inside the Hexis web app, with a playback timeline and speed controls. The browser reconstructs the scene from state updates.</em></p><h3>At a glance</h3><ul><li><p><strong>Role:</strong> Independent Software Engineer</p></li><li><p><strong>Timeline:</strong> 2026 to present</p></li><li><p><strong>Status:</strong> Active product development</p></li><li><p><strong>Focus:</strong> Cross-language architecture, real-time state, native performance, scripting, releases, licensing, and security</p></li></ul><h2>Why rebuild the scene instead of streaming video?</h2><p>A video stream sends finished pixels. Hexis already knows the underlying state: where the player is, which entities are nearby, how the camera is oriented, and what blocks make up the visible area. I built a pipeline that sends those compact state changes through a server at my home lab and a Cloudflare Tunnel, then reconstructs the scene in the browser.</p><p>In the measured prototype, five seconds of 480 by 270 JPEG frames required roughly 1.5 to 2.5 MB. The corresponding structured state record required about 12 to 36 KB, or 42 to 208 times less data. This is a comparison with that JPEG-frame prototype, not a claim about every video codec or scene.</p><p></p><img src="https://www.andrewjf.com/projects/case-studies/hexis-stream-path.svg" alt="State-streaming architecture from the Java client through a secure tunnel to the browser renderer." style="border-radius: 0.75rem;"><p><em>Compact state updates travel to the browser, which reconstructs the world as an interactive scene.</em></p><h2>The hard part</h2><p>The viewer has to make incomplete network updates look like a continuous world. The client sends state rather than frames, so the browser needs to apply incremental updates, preserve a coherent scene, and interpolate movement between packets. The design also has to control what data leaves the client and what a viewer is authorized to see.</p><p>This work connects several parts of the platform: the Java runtime captures game state, the transport moves compact updates, the TypeScript application manages sessions and access, and the browser renderer turns those updates back into a navigable 3D view.</p><h2>The wider platform</h2><p>The viewer sits on top of engineering work across several language boundaries:</p><ul><li><p>Java owns the client lifecycle and exposes the user-facing automation API.</p></li><li><p>Sandboxed Lua lets users build scripts without giving them unrestricted access to the host application.</p></li><li><p>Rust handles performance-sensitive 3D pathfinding through JNI.</p></li><li><p>Native C protects selected licensing and integrity operations.</p></li><li><p>The TypeScript web platform manages accounts, Stripe payments, signed releases, licenses, sessions, telemetry, and audit history.</p></li></ul><p>I keep these interfaces narrow because each boundary introduces a different failure model. The platform includes tests for signing, watermarking, tamper detection, replay attacks, and protocol behavior.</p><h2>Results</h2><ul><li><p>Built a commercial platform used by more than 300 registered users.</p></li><li><p>Reconstructed live sessions in a browser from structured state instead of image frames.</p></li><li><p>Reduced a comparable five-second prototype capture from 1.5 to 2.5 MB to 12 to 36 KB.</p></li><li><p>Implemented native Rust pathfinding for representative 3D routes under 50 milliseconds.</p></li><li><p>Built controlled scripting, signed releases, licensing, session management, telemetry, and security-focused tests across the desktop and web systems.</p></li></ul><h2>The tradeoff</h2><p>Structured state is dramatically smaller for this measured scenario and makes the scene interactive, but it is not a universal replacement for video. The browser must understand the world format and render it correctly, and every new visual feature requires data and renderer support. Video can show anything the client can display. State streaming earns its complexity when bandwidth, interactivity, and programmatic replay matter.</p><h2>What I learned</h2><p>Cross-language systems become manageable when each boundary has one job and a small contract. The impressive part is not using five languages. It is making the seams observable, testable, and difficult to misuse.</p>

More Projects

DinoQuote

TypeScript
React
Vite
Tailwind CSS
TanStack Query
+6

Walker & Homes Photography

Infomaniak
Next.js
PostgreSQL
Prisma
React
+5

Yeet or Keep

React Native
Expo
Next.js
Shadcn UI
Tailwind CSS
+1
View All Projects