TypeScript, Node programs, WebAssembly, and v0.0.31
TypeScript and TSX run directly, zipp app.js runs a program as Node does, WebAssembly runs on Wasmtime or wasmi under the sandbox's limits, and the JIT inlines class methods at their call sites.
Zipp's parser now reads TypeScript. A .ts, .mts, .cts or .tsx file is parsed with its types and they are dropped there: no transpile step and no JavaScript text in between, and the compiler, interpreter and JIT run it as JavaScript. What has a run-time meaning is lowered as tsc emits it: enum, namespace, parameter properties, legacy decorators and JSX (10847ade). zipp app.js runs a program the way node does, with process, Buffer, timers, CommonJS, npm packages from node_modules and the core modules most packages use (768018a6); the two arrived together from their own branch (2b8b8b1a), and a sixth WebAssembly module carries TypeScript for the browser (a467c9cb).
WebAssembly is a global in the command line: the JS API, with modules compiled by Wasmtime while the JIT is on and interpreted by wasmi otherwise, each instruction charged to a sandbox's step budget and each memory to its heap limit, and a host's abort honoured within milliseconds (67c770a4, f539d27e). A loop of 200 million iterations takes 36 ms on Wasmtime, 289 on wasmi and 73 in Node 24. The JIT inlines a class method at its call site, this bound to the receiver (b49cf737), and the release's command lines are the first built with profile-guided optimization (7ee15ed3). Measured on the published binaries, the bundled applications take 0.83× to 0.97× v0.0.30's time, most of it the profile, and the 78 benchmark programs 0.892× with the JIT, 0.912× interpreted and 0.742× QuickJS's. The dependency audit refused the Wasmtime the work began on, and the release ships the long-term support line, 36.0.19 (051577de). v0.0.31 was published on 29 October from fcfb1934.