A GRAPHICS COMPILER, OPEN TO INSPECTION
Small language.
Infinite canvas.
A few expressions become pixels.
Write a program, trace its types, and see the shader your GPU actually runs.
Generated fragment shader · GLSL ES 3.00 · variables are renamed during code generation
Every expression is checked before code generation. Types are inferred unless you annotate them.
Inputs
uv: vec2 — position, 0 to 1; y points up.time: float — seconds, controllable above.resolution: vec2 — render size in pixels.pi: float — π.
Program
let p: vec2 = uv - 0.5;output vec3(p, 0.5);
Expressions
Types: float bool vec2 vec3 vec4.
Arithmetic: + - * / with scalar/vector promotion.
Comparisons: < <= > >= == != on scalars.
Logic: ! && ||. Choice: test ? a : b.
Components: uv.x, color.rgb, uv.yx.
Deliberately bounded
No loops, recursion, textures, or user functions. 128 bindings, 4,096 tokens, 80 nesting levels. Math follows GPU float behavior; invalid domains can produce undefined pixels.
Built-in functions
sin cos tan abs floor ceil fract
sqrt exp log sign min max pow mod
step smoothstep clamp mix
length distance normalize dot
vec2 vec3 vec4
Vector constructors accept a scalar splat or exactly the required number of components. Output is vec3 RGB or vec4 RGBA; the preview uses an opaque canvas.