The standard library provides a focused set of portable operations plus clearly marked host features. Function names, signatures, mutation rules, value behavior, and host boundaries are part of the language manual.
Canonical contract
Prelude functions are available without an import. Larger groups are exposed through built-in namespaces and std.* modules. Built-in members use ordinary member syntax; users cannot declare new receiver-style methods.
Public surface
The public families cover conversion, math, bytes and encodings, hashes, files and paths, command-line parsing, regular expressions, CSV, TOML, JSON, URLs, HTTP and browser boundaries, dates, large integers, decimals, generators, parsers, and testing helpers. Module exports are fixed rather than discovered dynamically.
Observable behavior
Scalar string positions are not byte positions. Collection snapshots and iteration preserve specified order. Parsing and decoding use declared Option or Result failures. Arithmetic and invalid operations stay loud. Canonical encodings, hashes, formats, dates, paths, decimal and big-integer operations do not silently delegate observable semantics to an unspecified host library.
Current support
The documented library families are checked by the compiler and exercised across the supported outputs. Compression is currently limited to the Rust-backed library path; other target-specific limits are called out on the relevant page.
Constraints and exclusions
Host-effect names cross only their explicit profile boundary; no ambient network, clock, environment, process, database, or filesystem authority follows from importing a module. Test.*, free assert, and std.test are test-profile only. Unknown direct names, unknown virtual modules, and undeclared members fail statically instead of using dynamic lookup.
Worked example
let parsed: Option<int> = toInt("42")
let values: Array<int> = Array.of(1, 2, 3)
let doubled = map(values, value => value * 2)
print("{parsed}:{doubled}")