moxzi
Docs / Reference / Changelog

Changelogalpha

What changed, and what breaks?

moxzi is at 0.1.0-alpha.1, its first public release, so nothing has broken yet — but plenty will. This page records what shipped and states the compatibility policy that governs what happens next, because an alpha whose stability rules are unwritten is one where every change is a surprise.

How versions work#

RuleDetail
One version for four productsthe CLI, the server, the browser package and the on-chain builder version together; one tag covers the release train (CHANGELOG.md)
SemVerwith the alpha caveat below
Artifacts carry hashescompiler.wasm and linker.wasm ship beside each release and their SHA-256s are quoted in the release notes, taken from dist/SHA256SUMS
The wasm is platform-neutralthe same compiler bytes for every target tarball; only the native binaries differ
Releases are gated, not hopedscripts/release.sh stages a tarball and then builds hello.mo from inside it with MOXZI_COMPILER and MOXZI_LINKER scrubbed. If the clean directory cannot build, there is no release

0.1.0-alpha.1#

The first public alpha: one compiler, one semantics, four places.

ProductWhat shipped
moxzi (CLI)compiles Motoko by running the self-hosted compiler wasm under wasmtime; build with 15+ moc-compatible flags, link, deps, info, cache, and build --remote
On-chain builderthe same compiler as a canister: per-caller VFS with quotas, ICRC-2 escrow at the CMC's live ICP↔cycles rate with refunds, a mops tag layer, a whole-build cache, self-driven resumable stepping at mainnet caps
moxzid (server)Motoko actors off-chain with IC semantics: atomic messages with rollback, timers, upgrades over HTTP, cycles, actor-to-actor calls with re-entrancy, durable spawned actors, journaled outcalls, kill -9 durability
moxzi-web (npm)the same runtime in a browser, plus a client library: install from a page, call through a dfx generate idlFactory unmodified, persist to IndexedDB, preempt via a worker, make outcalls

Since alpha.1 tagging began (unreleased)#

The compiler is at moc 1.14.1#

The compiler began as a faithful port of moc 1.8.2; during the alpha it was modernized to 1.14.1, and its artifacts say so in motoko:compiler. The claim is measured — zero unported upstream language tests, 384/384 mops modules in the top-40 sweep, 359 of moc's own programs behaving identically, and a byte-identical self-compile fixed point that is now a standing gate. The features that arrived on the way: enhanced migration chains with --stable-baseline (see Migrations), moxzi stable-compatible, idl: Candid-interface imports, nested mixins, structural implicit synthesis, bit-exact float literals, warnings on successful builds, and --public-metadata/--omit-metadata.

Verification that shipped with 0.1.0-alpha.1#

ClaimFigure
Corpus programs byte-identical across two compiler builds221
Corpus programs identical browser vs native160, 0 diverging
Native runtime tests81 (cargo test --workspace -- --list)
Behaviour gates16 server, 16 browser, plus demos and compiler regressions
On-chain self-compile177 files, 2,345 messages, artifact 830f3e87…
On-chain evm_engine build661 files, 4,138 messages, artifact 178c6429…

Prose test-counts drift; scripts/alpha_check.sh is the source of truth for what a release actually runs, and the other documents now point there instead of quoting numbers.

Licensing, and the date that matters#

ItemValue
LicenseBusiness Source License 1.1 — source-available, not open source, and we do not call it that
Freenon-commercial use, and commercial development, testing and evaluation
Requires a licensecommercial production use, and competing hosted offerings (a compile service, actor hosting, an embedded runtime)
Change Date2030-08-31 — four years after this release
Converts toApache-2.0, per released version

What is allowed to break#

During 0.x-alpha, treat everything below as provisional. This is not a promise to break them; it is a statement that a break would not be a violation.

SurfaceStability
Output bytes for a given sourcenot allowed to drift silently — compiler_byte_neutral.sh is a release gate. A deliberate change appears here
Diagnostic codes and message textprovisional. M0000 is a catch-all today and may be split
moxzid HTTP endpoints and JSON shapesprovisional
The moxzi-web client library APIprovisional
The compiler canister's candid interfaceprovisional; quoteEscrow() already exists only for older clients alongside quoteEscrowFor(sourceBytes)
Escrow pricing constantsoperator-settable at runtime, and expected to move as measurements improve
Persisted moxzid state directoriesthe write-ahead log format is positional; a format change would require a rebuild from a snapshot
Authone shared bearer token today; roles and per-user keys are post-alpha and will change the shape
Ingress identityevery ingress caller is the anonymous principal; authenticated ingress will change what actors see

Things that are not in this release#

AbsentWhere it stands
stable_sub, the real stable-type compatibility relationunimplemented; moxzid warns instead. See open questions
Off-chain certificatesnot planned — a forged certificate is worse than none
A multi-node moxzidout of alpha scope; more moxzids do not coordinate
CI corpus sweepsthe weekly job is a reminder until a corpus mirror exists in CI; the sweeps run in make alpha-check before a tag
Published crates and npm packagethe manifests are reserved in packaging/reserve/; publishing is a human step

Next#

On this pageHow versions work0.1.0-alpha.1Since alpha.1 tagging began (unreleased)The compiler is at moc 1.14.1Verification that shipped with 0.1.0-alpha.1Licensing, and the date that mattersWhat is allowed to breakThings that are not in this releaseNext