Stdlib
The stdlib is intentionally small. Hosts extend it; the core stays narrow.
Planned modules
Section titled “Planned modules”std.shapes—rect,circle,ellipse,path,imagestd.text—text.glyph(string, font, size?)returning a 2D pathstd.compose— layer stacking, blend modes, masksstd.filter—blur(radius),color_grade, masks
std.mesh3d—extrude(path, depth)plus the transform postfix methods.rotate(x/y/z: Angle),.translate(...),.scale(...), and.material(fill, metalness?, roughness?, emissive?)std.lighting—ambient(intensity),directional(from, intensity),point(at, intensity)std.scene3d—render3d(mesh, lights, camera?)projects a 3D scene to a 2DLayerso it can becomposed with 2D layers. Camera defaults to a sensible perspective; passcamera: perspective(fov: 28deg)ororthographic(...)to override.
Motion, color, time, audio
Section titled “Motion, color, time, audio”std.anim—animate { ... }keyframes; modifierswith { easing, repeat, … }whererepeat: <Int> | forever; helperswave(amplitude, period),noise(seed, period), easings, splinesstd.color— perceptual mixing, gamut mapping, helpers around theoklch/oklab/srgbliterals built into the grammarstd.transport— playhead, time, frame, tempostd.audio— FFT, envelope follow, beat/onset detection, sample reading
Determinism
Section titled “Determinism”Every function is tagged pure or effectful. Pure functions are safe to call from any context. Effectful functions (asset loading, audio analysis on a file, clock reads) require an explicit capability passed in. The type system enforces the split.
A scene’s render output is deterministic if every function it calls is pure — which is the whole point of the CanvasKit backend.
Status: not started. See Roadmap stage 3.