#include <name>, the library inside the binary - mc carries its standard library and its own source inside the executable, compressed, and serves them through the angle-bracket form of #include. That is what makes one downloaded binary the whole toolchain: no checkout, no include path, no install step.
Every command, flag and dump - mc has one binary and four entry points: the single-file compiler, mc build, mc limits and mc sysroot. Everything below is read off src/cli.mc (the single-file CLI), src/driver.mc (the first two subcommands) and src/sysroot.mc (the third). Running mc with no argument prints exactly this and exits 1:
Every message the compiler emits - Every diagnostic mc can print, with what causes it and what to do about it. The list is extracted from the die/die2/err_at/err_at2/err_node/expect/toml_err* call sites in src/*.mc; nothing here is invented, and scripts/check-docs.sh compiles a sample for the ones marked with an example.
The ten # directives - A directive is a #name at the start of a line-ish position, processed at compile time, in source order, mutating the compiler's own tables as the parse goes. There are exactly ten, and the list is dir_index() in src/lex.mc:
The parser and hook API - Everything a module may call to teach the compiler, with its exact signature, when the compiler calls it, what it returns, and what it refuses. This is the API of Tier 2 (passes and backends) and Tier 3 (syntax taught by code).
The core language - The core is what stage0/*.c and src/*.mc implement between them: the language mc compiles before any teaching happens. Everything else in this reference — #rule, syntax, pass, backend — builds on top of it and is described in directives.md and hooks.md.
The machine task contract - Contract version 4 -- the integer tasks, the depth type, deriving a machine, and the KIND obligation (M17, M24, M39, M45). src/gen_walk.mc is the target-independent walker; src/machine_arm64.mc (M17 step A) and src/machine_x86_64.mc (step B, and M20's Win64 half) are the three machines behind it in the compiler -- arm64, x86_64, x86_64-win -- and machine(name, tab) in src/hooks.mc is the seam. Since M39 there is a fourth, and it is not in the compiler: examples/kernel/machine_riscv64.mc registers riscv64 from a module under examples/, which is the proof that the seam is real from outside; since M40 there is a fifth, examples/avr/machine_avr.mc, which is the proof that an 8-bit part with a two-byte pointer is one too (§ The AVR implementation). M40 appends no slot and changes no signature. Since M24 a machine also reads the TYPE of a depth (walk_depth_type), which is how lib/machine_arm64_float.mc answers fadd where the built-in answers add, and how a module derives a machine with machine_tab / machine_slot; #machine was dropped (docs/specs/M24.md § M9).
The object model and the codegen API - Between the AST and the file on disk there is one format-neutral layer: sections, symbols and relocations in src/objmodel.mc, and a per-function buffer of Ins records in src/gen_walk.mc. Five backends are built on nothing but this — macho, macho-exe, elf-obj, elf-obj-x86_64 and coff-obj-arm64 — and so is lib/backend_arm64.mc, which reimplements the whole AArch64 encoder from outside and produces byte-identical objects.
mc sandbox — compile and run an arbitrary program in isolation - Status: complete (M43, four steps; the CI job of step D is what proves the unprivileged path). The box is there — namespaces, a mount tree, pivot_root, the caps, the steps, the wall clock and the report — and so are the two walls that make a refusal a sentence: a Landlock ruleset over the box's roots and a seccomp filter whose default action is not a kill but a question to the supervisor. A program that reaches outside the box is named and the box stops:
Sysroots — where a cross link finds its files - A cross link needs files mc does not write: musl's crt1.o, crti.o, crtn.o and libc.a for a Linux target, an import library for a Windows one, an SDK (or a stub) for the .o + ld road on macOS. {sysroot} in [linker].args is where they come from, and this page is the whole story of how that placeholder is resolved.
mc.toml, every key - mc build [DIR] reads DIR/mc.toml (or --config FILE). Every path in the file is relative to the directory of the config, never to the working directory, so mc build examples/api from the repository root does exactly what mc build does from inside examples/api.