Skip to content

Standard Library

Import modules with from "std/<name>" import { symbols }.

I/O & Filesystem

ModuleWhat it provides
std/ioreadFile, readStdin, File.openRead/.openWrite/.openAppend, f.readAll(), f.writeAll(), RAII file handles
std/fsreadDir, fileInfo, isDir/isFile, pathExists, writeFile
std/pathpathJoin, pathBasename, pathDirname, pathExt, pathStem
std/envgetEnv, getEnvOr

Networking

ModuleWhat it provides
std/netTCP, DNS, fetch with TLS
std/httpHTTP server with Hono-style router, context, middleware

Data

ModuleWhat it provides
std/jsonZero-copy JSON parser — jsonParse, keyed accessors (.str(), .i64(), .f64(), .bool()), jsonStringify
std/arenaGenerational arena for cyclic/graph data with safe Handle<T>
std/setHashSet<T> — add, contains, remove

CLI & System

ModuleWhat it provides
std/argparseCLI argument parsing with typed getters and --help generation
std/argsRaw CLI arguments — args(), getFlag, hasFlag
std/processCommand execution, Process.spawn/.wait()/.signal(), run, capture
std/signalPOSIX signal handling — onSignal, ignoreSignal

Data Formats

ModuleWhat it provides
std/csvCSV parsing with header support
std/tomlTOML config parsing — tomlParse, .str(), .i64(), .table()
std/base64Base64 encode/decode
std/hexHex encode/decode

Date, Time & IDs

ModuleWhat it provides
std/timeWall clock, monotonic timing, sleep
std/datetimeDate/time from epoch — dateTimeNow, dateTimeFormat, weekdayName
std/uuidUUID v4 generation

Concurrency

ModuleWhat it provides
std/runtimeTask.spawn, Promise / Promise.blocking, green scheduler
std/syncChannel, WaitGroup, AtomicI64, AtomicBool — all method-based

Database & Network

ModuleWhat it provides
std/sqliteSQLite3 bindings — dbOpen, dbQuery, dbExec, prepared statements
std/urlURL parsing — urlParse, urlQueryGet

Strings & Formatting

ModuleWhat it provides
std/stringstrContains, strSplit, strReplace, strTrim, case conversion
std/fmtTemplate formatting (fmt1fmt4), padLeft/padRight, join
std/strconvparseInt, parseFloat, radix conversions, formatFloat
std/unicodeCharacter classification — isDigit, isAlpha, toLowerChar

Math & Random

ModuleWhat it provides
std/mathabs, min, max, pow, sqrt, log, trig functions
std/randomrandInt, randFloat, randRange, shuffleI64

Utilities

ModuleWhat it provides
std/colorANSI terminal colors — red, green, bold, etc.
std/regexRegular expression matching — regexNew, regexMatch, regexFind
std/sortSorting for Vec — sortI32, sortI64, sortStrings
std/testingassert, assertEqual, assertStrEqual
std/logLeveled logging to stderr — logDebug, logInfo, logWarn, logError
std/memmmapAnon, mmapFile, bump-allocator arena

Cryptography

OpenSSL-backed hashing plus pure-Milo hashing, MAC, and token modules (no C codec dependency; constant-time and WCET-analyzable).

ModuleWhat it provides
std/cryptosha256, sha1, md5, and aesGcmEncrypt/aesGcmDecrypt (128/256-bit AES-GCM)
std/sha256Pure-Milo SHA-256 — sha256, sha256Bytes
std/sha1Pure-Milo SHA-1 — sha1, sha1Bytes
std/hmacHMAC-SHA256 / HMAC-SHA1 — hmacSha256, hmacSha1Bytes
std/jwtJWT sign/verify (HS256) — jwtSignHS256, jwtVerifyHS256
std/totpRFC 6238 TOTP / RFC 4226 HOTP one-time passwords — totp, hotp
std/base32Base32 encode/decode (RFC 4648) — base32Encode, base32Decode

Compression

Pure-Milo DEFLATE (RFC 1951) and the gzip / zlib / zip containers built on it.

ModuleWhat it provides
std/deflateCompress — raw DEFLATE, gzipCompress, zlibCompress
std/inflateDecompress — inflate, gzipDecompress, zlibDecompress
std/zipRead ZIP archives — zipRead (.zip/.jar/.epub/.docx)

HTTP Server Example

milo
from "std/http" import { Context, Response, Router, serveRouter }

fn homeHandler(ctx: &mut Context): Response {
    return ctx.html("<h1>Hello!</h1>")
}

fn jsonHandler(ctx: &mut Context): Response {
    let name = ctx.query("name")
    return ctx.json($"\{\"hello\": \"{name}\"}")
}

fn main(): i32 {
    var r: Router = Router.new()
    r.get("/", homeHandler)
    r.get("/api", jsonHandler)
    serveRouter(8080, r)
    return 0
}

Arena Example

For cyclic data (graphs, doubly-linked lists), use std/arena. Nodes reference each other via Handle<T> — typed indices — instead of pointers:

milo
from "std/arena" import { Arena, Handle, arenaNew, arenaAlloc, arenaModify }

struct DLNode {
    value: i64,
    prev: Option<Handle<DLNode>>,
    next: Option<Handle<DLNode>>,
}

fn main(): i32 {
    var arena: Arena<DLNode> = arenaNew()
    let a = arenaAlloc(arena, DLNode { value: 1, prev: Option.None, next: Option.None })
    let b = arenaAlloc(arena, DLNode { value: 2, prev: Option.Some(a), next: Option.None })
    arenaModify(arena, a, (n: DLNode) => {
        var updated = n
        updated.next = Option.Some(b)
        return updated
    })
    return 0
}