Giorgi Alvarez · New York City · Shipping Kanvon
I write rendering engines.
Kanvon is a 2D canvas editor that runs in the browser. I wrote its renderer, physics solver, layout engine and 3D importers from scratch: 245,000 lines of Rust compiled to WebAssembly, built without an underlying engine or physics library.
Kanvon
A vector design tool with a game engine underneath. Draw vectors, write GLSL, rig a character, drop it into a physics scene, script it in Lua, and export the result as a video or a standalone web player.
Orbit Bloom
A finished puzzle game. Shapes, shaders, HUD and game rules all authored in the editor and driven by Lua.
Marble Cascade
322 bodies spawned, 118 alive, resolved every frame by a rigid-body engine with zero dependencies.
Both scenes run the real engine. Select one to load it.
- Renderer
- Hand-written WebGL2: instanced batching, an effect pipeline, clipping, text and brush strokes, plus a node-graph GLSL compiler with a shader cache.
- Physics
- A 2D rigid-body engine built on nothing but
glamandhecs. Spatial-hash broadphase, SAT narrowphase with reference-face clipping, a soft-step TGS solver with warm starting, and union-find island sleeping. - ECS
- An entity-component world running one ordered pass per frame: animation first, then scripts, physics, layout, transforms, styles, and finally render.
- Layout
- The CSS box model — block, flex and grid — solved inside the engine, before transforms propagate to children.
- Scripting
- Lua per shape and per scene, with raycast and area queries running against a read-only snapshot of the physics world.
- Import
- glTF/GLB, FBX and Collada parsers written from scratch — including FBX's Objects/Connections graph, skinning clusters and animation stacks.
- Collision
- Colliders traced from what a shape looks like: silhouettes read from artwork alpha, concave outlines ear-clipped and convex-decomposed, and hulls re-skinned each frame to follow an animated pose.
- Collaboration
- Server-authoritative multi-user editing over a single WebSocket, with per-item operations and cursors drawn by the engine itself.
- Export
- PNG, GIF and video from the browser or a headless native CLI. Export to Web emits a standalone WASM player that runs anywhere.
Everything else
Earlier projects, kept here for reference.
About
I have been building software professionally for seventeen years, most of it for the web. Over the last two, my work has moved down the stack from application code to the systems that application code is built on.
Kanvon is the result. When the available physics behaviour was not precise enough, I implemented a solver. When artwork collided as a bounding box rather than as its actual shape, I implemented a silhouette tracer. The consistent thread is working a level deeper until the problem is genuinely solved.
I am based in New York and work best on low-level, performance-sensitive problems: renderers, engines, simulation, and the infrastructure that supports them.
- Systems
- Rust · WebAssembly · WebGL2 · GLSL · Lua
- Web
- TypeScript · React · Next.js · Node · SCSS
- Data
- PostgreSQL · MongoDB
- Infra
- Docker · Kubernetes · Nginx · AWS
Building something that needs an engine?
I am open to work involving graphics, simulation, WebAssembly, or a product that has outgrown the library it was built on. Please get in touch.