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/threadThread.spawn with move closures, .join(), Thread.sleep(ms)
std/syncMutex, Channel, RwLock, 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/cryptosha256, md5 hashing
std/memmmapAnon, mmapFile, bump-allocator arena

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
}