HE

chloe

hi :)

a game engine that whispers, hi bestie, want to render something cute today?

seed.particle / flow-field
RD
render.preset / brushed-metal

webgpu first

a thin, modern path that doesn't apologise for itself. fall back to webgl2 only when the browser insists.

shader graph, no yaml

compose materials with a small node graph that compiles to wgsl in the background. no toolchain, no surprises.

hot reload, every layer

edit the shader, the script, the scene; the running game keeps its state. it just gets prettier.

SM

simulate

physics, but the rhinestones bounce. click anywhere in the sandbox to drop a gem; it will collide with the chamfered walls in real time, dispatched by the same broadphase that runs your shipped game.

  • 2D impulse-based
  • CCD for fast bodies
  • deterministic across platforms
click to drop a rhinestone
PL

playground

an early-2000s skinned IM client, except the friend on the other side is a compiler.

chloe::playground — untitled.lua
12345678910
local chloe = require("chloe")

function love.update(dt)
  scene.particles:step(dt)
  scene.rhinestones:drift(0.04)
end

function love.draw()
  chloe.gpu:clear("#F4E8DC")
  scene:render()
end
ok 60fps · open editor →
BM

benchmarks

draw calls / s
µs frame budget
mb resident
sprites @ 60fps
chloe9.6ms
engine-x14.1ms
engine-y18.7ms
engine-z23.4ms

* bench in browser, m2 air, release build, take it with a teaspoon of glitter

CT

code tour

use chloe::{Scene, Sprite, Color};

fn main() -> chloe::Result<()> {
    let mut scene = Scene::new(Color::hex("#F4E8DC"));
    scene.spawn(Sprite::rhinestone().at(240.0, 120.0));
    chloe::run(scene)
}
import { Scene, Sprite, Color } from "chloe";

const scene = new Scene(Color.hex("#F4E8DC"));
scene.spawn(Sprite.rhinestone().at(240, 120));
await chloe.run(scene);
local chloe = require("chloe")

local scene = chloe.scene("#F4E8DC")
scene:spawn(chloe.sprite.rhinestone():at(240, 120))
chloe:run(scene)
PF

ships everywhere

platforms, one binary mindset
macosarm64
iosarm64
windowsx64
linuxx64/arm
androidarm64
webwgpu
consoletba
CO

guestbook

no roadmap. no waitlist. just a friend group with a renderer.

— shipped my first jam game in chloe last weekend, my heart is so full xx @iridia · 04.21
— the hot reload made me cry. i didn't know engines could be tender. @junebug · 04.18
— pls never add a logo bar, i love you for not having one @k.lewis · 04.12
all rhinestones, at once. xoxo.