Skip to main content

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.

245KLines of Rust
143KLines of TypeScript
0Physics dependencies
120FPS in WASM

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.

Live at kanvon.comRustWebAssemblyWebGL2TypeScriptLuaAxumPostgres

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 glam and hecs. 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.
kanvon.com / editor

Run the editor here

The WebAssembly engine loads on request rather than on page load, so it does not affect this page's load time.

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.