Loft is under active development. Every code example on the language pages is executed by the test suite on both backends, so what they show runs today. This page describes where the project is headed.
The project goal is browser games that anyone can play via a shared link. Native OpenGL is supported for desktop enthusiasts. Server and multiplayer features come after the single-player browser experience works.
Since 2026-06 loft ships on a calendar version: a release is named for
its month, which Cargo.toml spells 2026.6.0, 2026.7.0,
2026.8.0 — loft --version prints the one you have. The semver
milestones below were the plan before that switch; the two numbered ones have shipped, and
1.0.0 is still the name of the finish line rather than a month.
| Release | Headline | Status |
|---|---|---|
| 0.8.4 | Awesome Brick Buster — a game worth sharing | shipped 2026-04-24 |
| 0.8.5 | Language maturity | shipped 2026-06-07 |
| 2026-06 … 2026-10 | Monthly releases | current |
| 1.0.0 | Totally sure everything works — IDE + multiplayer + stability contract | the finish line |
0.8.4 (shipped 2026-04-24): Awesome Brick Buster
0.8.4 turns Brick Buster from a tech demo into a game someone would actually want to share with a friend, and makes sharing trivial via single-file HTML export.
Game polish
- Hand-designed levels — five themed layouts dispatched by
level_brick(lv, r, c), with a procedural fallback for deeper runs. - Cel-shaded sprite atlas — outlined icons, a round ball with velocity-directional squash, hearts for lives, balloon projectiles, fireball after-images.
- Roman-numeral level display and persistent high score (
.loft/brickbuster_score.txt). - Chiptune soundtrack — three early-Capcom-style tracks (Heroic / Determined / Calm) that play once per level with silences between, plus brick/paddle/wall/pickup/life sound effects.
- Screen shake on brick breaks and life lost; pause menu; title and game-over screens.
Single-file HTML export
Compile any loft program to a self-contained .html file that runs in any browser — no install, no server.
$ loft --html app.loft
The game's WebAssembly, textures, and audio are all embedded. Host the file anywhere, send someone the URL, they play.
Infrastructure
- Audio —
rodio-backed playback on desktop; WebAudio bridge in the browser. - Store-leak fixes — per-frame idiomatic struct APIs now work without workarounds (P122 + P117–P131 resolved).
- CLI hardening — script-level arguments, file-scope constants, and release-mode coroutine-iterator fixes (P126, P128, P131, P132).
- Bytecode cache —
.loftcfiles are invalidated on interpreter rebuild via the embedded git commit hash.
0.8.5 (shipped 2026-06-07): Language maturity
The language itself got solid: closures hold a live reference to what they capture, bounded generics carry their types through methods and tuples, and native compilation went to production.
Working Moros editor
The Moros hex RPG scene editor runs end-to-end in the browser: load a map, paint hexes, place walls and items, see a live 3D preview, export to GLB. Web only — multiplayer comes in 1.0.0.
- Map model —
Hex,Chunk,Mapwith material/wall/item palettes and spawn/NPC routines, serialised as JSON. - 2D scene canvas — hex coordinate math, pan/zoom/hit-test, layered rendering.
- Editor shell — toolbar, palettes, Paint / Height / Wall / Item tools, undo/redo, localStorage autosave.
- 3D renderer — hex surface geometry (flat and slope), wall slabs, stairs, camera orbit, hex picking, GLB export.
- Live 3D preview alongside the 2D editor, powered by the loft graphics library compiled to WASM.
0.9.0 — Fully working loft language
The language itself becomes feature-complete, well-documented, and tooling-friendly; every item below has shipped in the monthly releases. No "appears fixed but unverified" bugs. Anyone can write loft code in their preferred editor with syntax highlighting, decent error messages, and a REPL for experimentation.
Language polish
- Error recovery — the parser continues after a token-level failure and reports multiple errors in a single pass — shipped (a two-error program reports both in one pass).
- REPL — running
loftwith no arguments starts an interactive session; definitions persist across lines — shipped (bareloftstarts one and restores the last session). - Developer warnings — Clippy-inspired lints for common mistakes — shipped (a two-tier warning/advice set with
--explainfix lines). - AOT library compilation — automatically compile libraries to native shared libs for faster startup — shipped (a
used library builds its own native library when a Rust toolchain is present). - Stdlib hygiene — a
std::prefix for shadowed builtins; library enums inmatcharms without qualification — shipped.
Compilation cache
The parsed standard library and program are cached under .loft/ and restored on the next run, alongside the shared constant store — shipped.
Developer experience
- TextMate grammar for
.loftsyntax highlighting — shipped (editors/vscode/syntaxes/loft.tmLanguage.json). - VS Code extension with snippets and a run task — shipped (
editors/vscode/, plusloft-lspandloft-dap). - Quick-start
examples/directory — shipped (examples/). - CI covering package tests and native codegen — shipped (
make ci).
Packaging and FFI
- Lock file (
loft.lock) for reproducible builds — shipped (loft installwrites it). - Generic FFI marshaller — zero-boilerplate native functions from a
#nativesignature; genericcdylibloader scans exports into a hash map — shipped (loft generatewrites the stubs).
1.0.0 — Totally sure everything works
The stability contract. Anyone can write, run, and share a program — terminal or browser — and trust that it will keep working.
Web IDE
A browser-based IDE running the full loft interpreter as WebAssembly — no installation, no server.
- Editor shell with CodeMirror 6 and a loft grammar.
- Symbol navigation (go-to-definition, find-usages).
- Multi-file projects stored locally (IndexedDB).
- Documentation and examples browser built in.
- Export/import ZIP; PWA offline mode.
Scene scripting
The Moros scene editor gains a loft scripting panel with in-browser compile and hot reload. Scene scripts are sandboxed, travel with the scene JSON, and can be shared alongside the map.
Multiplayer
- Server library — plain HTTP, HTTPS with static certs, WebSockets, CORS headers and static file serving are shipped (the
serverlibrary). Still to build: automatic ACME certs, JWT / session / API-key auth, rate limiting. - Game loop primitives — WebSocket polling, broadcast, connection registry — shipped (
server). - Game client library — the
GameEnvelopeprotocol (game_protocol) and a fixed-timestep loop (fixstep) are shipped. Still to build: lobby + matchmaking, client-side prediction and reconciliation, WASM script loading with Ed25519 verification. - Moros multiplayer — DM and players share a live scene hosted on a loft server.
Stability contract
Version 1.0 means: any program that works on 1.0 will compile and run identically on all future 1.x releases. The language syntax, type system, standard library, and command-line flags are frozen. Until then, what a released version promises is kept, and a breaking change needs a documented reason and a migration.
Tagging 1.0 requires every stability gate to be satisfied without shortcuts: zero open high-severity bugs, valgrind-clean debug builds of the full Brick Buster and tuple tests, green CI on Linux, macOS Intel, macOS ARM, and Windows, pre-built binaries on the GitHub release, and the reference + PDF linked from the release page.
1.1 and beyond
Post-1.0 items include route decorators (@get / @post / @ws), iterator protocol (for msg in ws), interface factory methods, lazy work-variable initialisation, stack raw-pointer cache, and additional native codegen optimisations. Browser-side par() on Web Workers (loft --html --threads) and the spatial<T> collection have already shipped.
Following progress
Development is tracked in the GitHub repository. The full internal roadmap with effort estimates, dependencies, and design pointers is in the repository's doc/claude/ROADMAP.md.