The Keel mark in dark metal with glowing flame-gradient edges, embers rising and shards orbiting it, rendered live by Keel Engine and tilting toward your pointer
Keel Engine

One Rust engine for games, apps, websites and terminals.

Write it once. Keel renders it natively on desktop, web, Android and iOS, with no WebView in between, and your agents build it, see it, film it and replay it from the command line.

  • 98Lighthouse performance of this page on mobile, 2026-09-28
  • 175 KiBtransferred to load this page, before any interaction
  • No WebViewKeel draws every pixel itself on desktop, Android and iOS
Agent-native

Your agent can see, film, script and replay every scene.

An agent can't look at a window, so Keel gives it files and exit codes. One command captures a scene, films it, plays a script through it or replays a recording to the first frame that differs.

~/my-game — keel
$ keel sceneshero physics vfx render fluid animation ui audio net procgen$ keel smokeok 10 scenes, 120 frames each: no panic, no blank frame, no error log$ keel shot --size 960x720 --jsonok physics 3,193 colours, 88% covered, blank: falseok vfx 34,086 colours, 89% covered, blank: falseok fluid 10,128 colours, 91% covered, blank: falseok animation 21,099 colours, 95% covered, blank: falseok audio 36,155 colours, 88% covered, blank: falseok net 16,901 colours, 92% covered, blank: falseok procgen 16,958 colours, 83% covered, blank: falsereport: "ok": true, exit code 0$ keel play --script play/save.jsonok ui in 122 frames: click Save, until "Saved 1 times", shots before.png and saved.png$ keel film --scene physics --duration 3 --fps 4ok 13 frames -> physics.sheet.png$ keel record --script play/save.jsonok ui, 122 frames recorded with a hash of each$ keel replay save.replay.jsonok 0 divergent frames in 122
$ keel shot --scene physics --size 960x720 --frames 240 --json{"ok":true,"scene":"physics","pixels":{"colors":3193,"coverage":0.88,"blank":false}}
The physics scene as keel shot captured it: boxes and balls on a floor

One scene as a PNG, with a report of its colours and coverage. It exits 1 on a panic, a blank frame or an error in the log. Wrote physics.png.

Every file here was written by one run of scenes/posters.sh on 2026-10-31, on AMD EPYC 9454 48-Core Processor, drawing with llvmpipe (LLVM 15.0.6, 256 bits) (vulkan), software, Keel 154fcc8ee. Same code, same pixels: 8 of 10 scenes drew byte-identical frames in two smoke runs.

One codebase

One codebase. Three kinds of software.

The same Rust Component runs as a game, an app and a website, on six platforms. On the left is its whole source, the same code this page runs. On the right, three ways it comes out.

Rust
pub(crate) fn counter_view(props: &CounterProps) -> Component {
    let count = signal(props.start);
    let label = count.map(|n| match n {
        1 => "1 launch".to_string(),
        n => format!("{n} launches"),
    });
    div("counter", "counter")
        .child(text(label).id("count").surface("count"))
        .child(button("Launch").id("launch").on_press(move |_| {
            count.update(|n| *n += 1);
        }))
}

A counter: a signal, a label that reads it, a button that changes it. Only the text that reads the signal updates.

The physics scene as keel shot captured it: boxes and balls on a floor

A game scene: rigid bodies stepped at a fixed rate. Run one live in the gallery below.

iOSAndroidWindowsmacOSLinuxWeb

Keel's nightly CI builds an example app for each of these platforms. It launches and screenshots the app on Linux, on macOS and in Chrome, and on the iOS simulator when the runner can boot one. Android and Windows builds are packaged and checked without being run yet.

The hero scene rendered natively by Keel on LinuxNativeLinux, Vulkan: keel shot
The same hero scene rendered by Keel in a browser page through WebGL2BrowserChrome, WebGL2: this page
Performance

Measured, not claimed.

Every number names the run that produced it. The scene numbers come from the keel command line running this page's own scenes headless (scenes/posters.sh); the Lighthouse numbers from the last check of the live page after a deploy.

98

Lighthouse on this page

Performance, mobile, median of 3 runs against keelengine.dev on 2026-09-28 (post-deploy run 36468414441). Accessibility, best practices and SEO scored 100.

175 KiB

Page weight

Transferred to load this page, from the same run.

1.4 ms

To open a scene

Median time to enter a scene and have it ready to draw, across all 10 scenes; the slowest took 2.6 ms (keel smoke).

8/10

Same code, same pixels

Scenes that drew byte-identical frames in two separate runs of 120 frames each. The clock is simulated, so a replay is exact.

Scene numbers measured 2026-10-31 with keel smoke on a server processor (AMD EPYC 9454 48-Core Processor) drawing with a software renderer (llvmpipe (LLVM 15.0.6, 256 bits) (vulkan), software), Keel 154fcc8ee; 10 of 10 scenes ran 120 frames clean. These are not numbers from a phone or a graphics card; none are published yet.

Compared

Where Keel leads Unity, Godot and Bevy, and where it trails.

One codebase for games, apps and websites, and agents that can see, film, script and replay every scene, against a much smaller community, no editor and no console export yet.

KeelUnityGodotBevy
Real HTML websites, as well as games and apps
YesPartialPartialPartial
Native on desktop and mobile, no WebView
YesYesYesYes
Agent commands in the engine (shot, film, listen, play, replay)
YesPartialPartial—
Replay to the first divergent frame
Yes———
Rust end to end
YesNoNoYes
Visual editor (Keel has none, by design)
NoYesYes—
Console export
PlannedYesPartial—
Large public community
NoYesYesYes

Keel and Unity

Unity centres on a visual editor and a C# runtime. Keel is code-first Rust, compiled natively.

Keel and Godot

Godot has a scene editor, its own scripting language and no licence fee. Keel has no editor and is licensed by agreement.

Keel and Bevy

Bevy is also a Rust ECS engine, with a much larger community. Keel is newer.

Built with Keel

Game clients and the site you are reading.

Cubeage builds game clients with Keel. This website runs on the same engine, from HTML pages to live 3D scenes.

Big Two and mahjong with Cubeage

Cubeage is developing Keel clients for Hong Kong and Taiwan Big Two and Taiwan 16-tile mahjong. Explore the publisher's games and store listings.

See the games at cubeage.com →

This site

Keel pages, Keel scenes, Lighthouse 98 on mobile. Every page you are reading is a Keel Component rendered to HTML.

See the numbers →
Get access

Build your next game, app and site on Keel.

Keel Engine is licensed to teams by agreement. Tell us what you're building: write to us, and we'll talk about a license.

hi@sylphx.com