Skip to Content
i documentation
Contributing

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:

src/main.i
(
	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 chaptersAvailable features
1: words and symbolsNames without keywords, literals, strings with interpolation, and the line rule.
2: modulesImports and exports, package manifests, dependencies, lock files, and configured entries.
3–4: typesInference, labelled types, aliases, literal types, unions, intersections, differences, and closed data shapes.
5–7: names, expressions, patternsImmutable bindings, functions, branches, guards, matching, field access, and data spreads.
8: bit arraysConstruction and matching with integer, float, byte, and UTF encodings.
9: effectsExplicit service needs and provision, typed failure, continuations, structured tasks, and host IO.
10–11: executionProgram entries, tests, host calls, tail calls, stops, and value inspection.
12–14: built-ins and macrosCore 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:

CommandPurpose
i expandPrint source after macro expansion.
i checkCheck a package.
i buildBuild an executable or Wasm module.
i runBuild and run an entry.
i collectionsList checked collection contributions as JSON.
i run-collectionBuild and run one collection handle.
i testBuild and run package tests, with an optional name filter.
i newMake a package with a program and test.
i addAdd a dependency and update the lock file.
i removeRemove a dependency and update the lock file.
i updateRaise dependencies within their current major version.
i publishCheck a package and create a version tag locally.
i depsPrint dependencies and their host capabilities.
i cacheInspect and trim the global cache.
i specRead the standard.
i lspRun the language server over standard input and output.
i fmtFormat sources and convert between the two surfaces.
i helpShow command help.

i build --help lists these targets:

TargetArtifact
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.
jsA Wasm module for the JavaScript target.
nodejsA Wasm module for the Node.js target.
wasiA 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 finds Head::Shape, with none of the proposed Head::Record, Ty::Rec, or Ty::Without variants. 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/src is still the pre-redesign library: json.i has parse returning Result(Json, JsonError) and a separate pretty, while the plan requires a raised JsonError and two print shapes; time.i has divide returning Result(Duration, TimeError) and lacks the planned high-level Clock type. 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::lower and returns the old ast::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.

See also