Zipp releases
Zipp publishes GitHub Releases only: native x86-64 CLI archives for Windows and Linux, and WebAssembly archives. Twenty-one tags shipped between 30 August and 25 September 2026. This page lists them, explains what a release has to pass, and links the notes.
Latest: v0.0.21, 25 September 2026
Python on the command line runs at about 1.75× CPython 3.13's time with a new JIT tier, from about 22× when the work began. The torch layer grows to what ordinary training code uses, checked against PyTorch 2.11; torch becomes an optional WebAssembly package; and zipp py runs torch.compile graphs on a hardware GPU through wgpu, a small model's training step faster than PyTorch's eager CUDA on the same card.
- Python speed: direct calls, per-VM inline caches, fused Python instructions, small integers in the value word, native dict, set and instance storage, and a JIT tier for hot loops.
range_loop,int_arith,float_arith,tuple_swapandglobal_readbeat CPython; a warm hello-world starts in about 20 ms. - Python compatibility: CPython's tracebacks and
tracebackmodule, complex numbers andcmath, and Python compiled directly from Zipp's own syntax tree (zipp-pyparse), with the RustPython fork removed. - Torch: about 200 more tensor functions, the common layers, losses, optimizers and schedulers,
torch.utils.data, nativetorch.linalgandtorch.fft,torch.distributions, half-precision, complex, sparse and quantized tensors, and single-processtorch.distributed; GPT-Neo's modelling file now runs unmodified. - WebAssembly:
pythonwithout torch (1.70 MB on the wire) plus the 0.38 MBzipp_torch.wasmpackage, besideallwith torch built in (2.06 MB);prewarmPython()brings the first browser run to about 20 ms. - Native GPU: wgpu over Vulkan, Direct3D 12 or Metal, native replay of prepared steps, exact kernel fusion and a 128x128 matmul tile. On an RTX 5090 a small MLP's prepared step takes 0.27 ms (0.12 ms at eight per run) against 0.78 ms for PyTorch's eager CUDA. Graph protocol version 4 carries masks, dropout, slicing and gathers.
- Engine: small BigInts as immediates (JavaScript BigInt code 2-4× faster), a compiler that emits the same bytecode on every run, and fixes to a JIT wrap, a destructuring TDZ case and nested budget loans; Test262 passes as before.
| Asset | Contents |
|---|---|
zipp-0.0.21-x86_64-pc-windows-msvc.zip | Native CLI for Windows, complete: JavaScript with the x86-64 JIT, Python with its JIT tier, torch and the native GPU path |
zipp-0.0.21-x86_64-unknown-linux-gnu.tar.gz | Native CLI for Linux, same contents |
zipp-wasm-0.0.21-web.zip | JavaScript-only browser engine, TypeScript bindings and the Worker host SDK |
zipp-wasm-0.0.21-web-python-base.zip | JavaScript + Python without torch |
zipp-wasm-0.0.21-web-python.zip | JavaScript + Python with torch built in, the browser GPU adapter, CPU WASM kernels and the Torch compatibility guide |
zipp-wasm-0.0.21-web-torch.zip | The torch package: zipp_torch.wasm and its zipp_torch.js loader, for web-python-base |
SHA256SUMS | Checksums for every asset; each WASM archive also carries BUILD-INFO.txt, PROFILE.json and its own SHA256SUMS |
Release notes and downloads on GitHub · docs/releases/0.0.21.md · v0.0.20 notes
Install
# Linux
curl -LO https://github.com/f2i-com/zipp.org/releases/download/v0.0.21/zipp-0.0.21-x86_64-unknown-linux-gnu.tar.gz
tar xzf zipp-0.0.21-x86_64-unknown-linux-gnu.tar.gz
echo 'console.log("hello")' > hello.js
./zipp-0.0.21-x86_64-unknown-linux-gnu/zipp js hello.js
# From source, any platform with Rust 1.92
git clone https://github.com/f2i-com/zipp.org && cd zipp.org
cargo build --locked --release
./target/release/zipp --version --jsonZipp is not on crates.io or npm yet. The WebAssembly archives are meant to be served by your own host; the WebAssembly page explains the Worker model and cache-key discipline.
What a release has to pass
Pushing a vX.Y.Z tag runs the release workflow. It refuses to publish unless the tag object matches the checkout; the root Cargo.toml, the WebAssembly crate and the landing page all carry the same version; and the reusable CI, the full security workflow (including the pinned Test262 corpus), the native build and the WebAssembly build all pass at that exact commit. A green main at some other revision is not a release gate. The job is retry-safe: it re-downloads existing assets, verifies SHA256SUMS, and checks that BUILD-INFO.json is not dirty and names the right commit before deciding to do nothing. A dispatched re-run may skip the two longest gate jobs - the native workspace suite and Test262 - only when the identical tree has been through them elsewhere; v0.0.19 was published that way, with both run locally on the tagged commit (308 test binaries, 2,453 tests; 95,680 of 95,680 corrected-core executions) and every other job in the workflow, and so was v0.0.20, whose JavaScript engine source had not changed since v0.0.19 passed them. From v0.0.21 the workflow also builds the torch package with the two engines it pairs with, and refuses to publish unless python plus the package prints exactly what all prints over the torch suites.
All releases
| Version | Date | Headline |
|---|---|---|
| v0.0.21 | 2026-09-25 | Python at about 1.75× CPython with a JIT tier; the torch layer checked against PyTorch 2.11; torch as a WebAssembly package; native GPU through wgpu |
| v0.0.20 | 2026-09-18 | Quantized Q4_K and Q6_K weights on the GPU path, matmul_fixed, reproducible Rust kernels, and Hugging Face modelling files running unmodified |
| v0.0.19 | 2026-09-16 | Resident GPU training sessions, torch.compile prepare, native version-2 kernels; 324 reviewed defects fixed |
| v0.0.18 | 2026-09-14 | Python playground, Torch GPU support and conformance updates; first WebAssembly archive with Python |
| v0.0.17 | 2026-09-12 | Audited engine hardening: VM rooting, coercion, TypedArray, parser, GC and metadata; preserves the exact 95,939 / 95,942 Test262 result on the previous corpus |
| v0.0.16 | 2026-09-12 | The two audits of 11 September: 24 engineering tickets and 14 close-audit tickets |
| v0.0.15 | 2026-09-07 | The audit response: spec-order method calls by default, accel spec grammar, transactional host.call, zippProfile(), CI gate |
| v0.0.14 | 2026-09-06 | The accel bridge |
| v0.0.13 | 2026-09-02 | A host-sized instruction budget |
| v0.0.12 | 2026-09-02 | Inline stores into pinned young dense arrays; x | 0 fused into the wrapping add; 21 of 30 benchmark rows faster than Node |
| v0.0.11 | 2026-09-02 | Register classes keep tokenizer loops on the INT tier (parse-large-js 1.24× to 0.88× Node); a forced-JIT segfault on user-overridden Math.random fixed |
| v0.0.10 | 2026-09-01 | Hardened limits sized for applications rather than snippets: 1 GB instance ceiling, 512 MB heap budget |
| v0.0.9 | 2026-09-01 | Collections scheduled on bytes, not only allocation count, after an emulator died ninety seconds into a game |
| v0.0.8 | 2026-09-01 | renewInstructionBudget and setFingerprintSeed; the 50M lifetime budget had been a fuse on every long-running embedder |
| v0.0.7 | 2026-09-01 | ArrayBuffer ceiling raised from 1 MB to 32 MiB |
| v0.0.6 | 2026-09-01 | Runtime optimization, exact WebAssembly benchmarks, QuickJS-NG comparison source |
| v0.0.5 | 2026-08-31 | Benchmark evidence publication |
| v0.0.4 | 2026-08-31 | getGlobalsFingerprint: a content digest so a mutation through a reference cannot be missed; per-tick host sync 9.6 ms to 2.1 ms |
| v0.0.3 | 2026-08-31 | Interpreter-only WASM stops an O(heap) walk; JSON.stringify ×4000 from 919 ms to 8.5 ms; wasm-opt dropped after measurement |
| v0.0.2 | 2026-08-31 | The boundary tax: the host boundary stopped walking the whole heap per re-entry; parser sandbox limits raised |
| v0.0.1 | 2026-08-30 | First native and WebAssembly distribution |
Release notes for v0.0.1 through v0.0.17 live in the annotated tag messages; v0.0.18 is the first with a notes file in docs/releases/, and from v0.0.20 that file is the GitHub release body verbatim. The engineering journal tells the story between the tags.