Roadmap
Identify available features, recorded gaps, and specific designs still absent from this tree.
This page describes what the language and tools can do in this tree, then points to recorded gaps and checked examples of unfinished design work. Use it to choose a task; read the standard for the rule and the implementation for its current limits.
Closed data with labelled fields is already available. This complete program prints its field:
(
i/stdio
i/core
)
main = () {
record = (a = 1)
stdio.print(core.inspect(record.a))
} 1 In this tree
These groups describe available features, not full conformance to every rule in their chapters. The gap register records the exceptions.
| Standard chapters | Available features |
|---|---|
| 1: words and symbols | Names without keywords, literals, strings with interpolation, and the line rule. |
| 2: modules | Imports and exports, package manifests, dependencies, lock files, and configured entries. |
| 3–4: types | Inference, labelled types, aliases, literal types, unions, intersections, differences, and closed data shapes. |
| 5–7: names, expressions, patterns | Immutable bindings, functions, branches, guards, matching, field access, and data spreads. |
| 8: bit arrays | Construction and matching with integer, float, byte, and UTF encodings. |
| 9: effects | Explicit service needs and provision, typed failure, continuations, structured tasks, and host IO. |
| 10–11: execution | Program entries, tests, host calls, tail calls, stops, and value inspection. |
| 12–14: built-ins and macros | Core operations, syntax and typed macros, and the Lisp surface. |
The following command list comes from i --help on this tree. Each command has its own help:
| Command | Purpose |
|---|---|
i expand | Print source after macro expansion. |
i check | Check a package. |
i build | Build an executable or Wasm module. |
i run | Build and run an entry. |
i collections | List checked collection contributions as JSON. |
i run-collection | Build and run one collection handle. |
i test | Build and run package tests, with an optional name filter. |
i new | Make a package with a program and test. |
i add | Add a dependency and update the lock file. |
i remove | Remove a dependency and update the lock file. |
i update | Raise dependencies within their current major version. |
i publish | Check a package and create a version tag locally. |
i deps | Print dependencies and their host capabilities. |
i cache | Inspect and trim the global cache. |
i spec | Read the standard. |
i lsp | Run the language server over standard input and output. |
i fmt | Format sources and convert between the two surfaces. |
i help | Show command help. |
i build --help lists these targets:
| Target | Artifact |
|---|---|
native (default) | One executable for the current operating system and architecture; statically linked on Linux. |
host (ilang alias) | A Wasm module for the i host. |
js | A Wasm module for the JavaScript target. |
nodejs | A Wasm module for the Node.js target. |
wasi | A Wasm module for the WASI target. |
Editor sources provide VS Code highlighting and language-server integration, Zed integration, and the tree-sitter grammar. The server supplies diagnostics, hover, navigation, completion, and formatting.
Recorded gaps
spec-known-gaps.md records task environment and scope handling; pattern parsing and usefulness warnings; effect rows and resource scope; Float text; type inference, applications, and polymorphic types; and macro budget accounting. It separately records a program that passes the checker and traps. The contributing page groups these tasks by their recorded identifiers.
Designed, not landed
A note’s opening status can describe an older tree. The following claims concern specific parts of a design and have been checked against this tree:
- records.md proposes structural field inference and width subtyping beyond today’s closed data shapes. Its generic field-read idea, written in today’s syntax as
get = (r) { r.a }, is rejected by the supplied compiler with E0506 because the value needs a known type. Passing(a = 1, b = 2)to a parameter annotated(a = Int)also fails with E0501, rather than forgetting the extra field. Reading the checker also findsHead::Shape, with none of the proposedHead::Record,Ty::Rec, orTy::Withoutvariants. The closed data example above already works; calling all records unimplemented would be wrong. - std-v3.md redesigns the standard library. Two source comparisons show that
std/srcis still the pre-redesign library: json.i hasparsereturningResult(Json, JsonError)and a separatepretty, while the plan requires a raisedJsonErrorand twoprintshapes; time.i hasdividereturningResult(Duration, TimeError)and lacks the planned high-levelClocktype. These source checks establish the status of those changes, not every row of the plan. - ast-hir-merge.md recommends keeping a syntax tree and HIR while removing the older syntax tree. The syntax entry point still calls
lower::lowerand returns the oldast::Module; the old tree and conversion remain. That removal has not landed.
Historical reports and plans whose present status is uncertain are omitted from this list. These notes make no promise of a delivery date.