The compiler has more than one exit.
scriptc 0.1.7 accepts TypeScript or JavaScript and can emit typed intermediate representation, readable C, LLVM text, assembly, object files, executables, and WebAssembly modules. It uses the TypeScript compiler for parsing and type checking.[1]
The project calls itself experimental. Its static builds carry a small native runtime but no Node or JavaScript engine. A separate dynamic mode embeds quickjs-ng for code that cannot stay fully static. Those modes create different binaries and different review work.
Removing Node from the host does not remove runtime behavior. It moves that behavior into a compiler, native runtime, linked libraries, and build receipt.
Coverage is the first gate.
The project's coverage command reports which statements compile statically and why the rest do not. That is more useful than discovering a boundary after packaging. Unsupported code should become a named diagnostic or an explicit dynamic island, not an accidental fallback.
The current package requires Node 24 or newer to run the compiler. Source-only output needs Node. Executable builds can also need a platform linker driver and SDK or sysroot. The produced executable does not require Node, according to the project README.[1]
The artifact exists, and the lane is narrow.
The garage fetched the published scriptc@0.1.7 package on September 27. Its package metadata named Node 24 as the minimum. Running the compiler under Node 24 reported version 0.1.7. A two-statement TypeScript sample passed the coverage command at 100 percent static and emitted a 2,088-byte C file.[3]
That smoke check proves the package, command, static analyzer, and C output worked for one tiny program. It does not prove executable linking, Node API coverage, WebAssembly behavior, or production compatibility.
Test the runtime you are replacing.
Pin the compiler version and Node version used at build time. Record static and dynamic coverage. Inspect the resulting file type, linked libraries, size, and symbols. Then run the same inputs, error cases, signals, files, network calls, and exit codes against the old and new artifacts.
The ejection bench below writes that test card. Four closed clamps mean every section was selected. The status stays at template-ready because no application, artifact, or replay result is attached.