Umbrella for shrinking what let-go ships and widening where it runs: binary size, the embedding surface, and alternate runtimes (WASI, TinyGo, small native). Distinct from lowering/codegen (#258), which makes code native and fast, and from runtime performance (#464), which keeps the running VM's hot paths fast. Here the metric is bytes on disk, resident memory, and whether let-go links and boots on a given target at all. The one real intersection is boot cost: compressing the embedded core (#502) trades startup time for size, and that tradeoff is called out where it lands.
The goal is a single roll-up so footprint and target-reach work is visible and prioritizable, rather than living inside whichever PR happened to need it.
Compiler-free / embedding surface
Running precompiled bytecode without linking the reader, compiler, and resolver: a smaller binary and a smaller, more stable embedding surface.
Bundle size
The .lgb bundle format and the embedded core are stored uncompressed; compressing them trims the shipped artifact and every binary.
Alternate runtimes & platforms
Targets beyond native and browser-js, where footprint, the host capability model, and cross-target build discipline matter most.
Merged enablers
Already-landed work this epic builds on, listed so the footprint story reads as one arc rather than scattered history:
Workflow
File footprint and target-reach issues here as sub-issues: binary/bundle size, embedding-surface reductions, and new-target enablement (with the build recipe and the measured size/RSS delta). Each child should stand on its own; this epic tracks the set and its progress. Boot-cost regressions belong to #464 when the cause is the running VM, and here when it's the size/startup tradeoff of a footprint change.
Umbrella for shrinking what let-go ships and widening where it runs: binary size, the embedding surface, and alternate runtimes (WASI, TinyGo, small native). Distinct from lowering/codegen (#258), which makes code native and fast, and from runtime performance (#464), which keeps the running VM's hot paths fast. Here the metric is bytes on disk, resident memory, and whether let-go links and boots on a given target at all. The one real intersection is boot cost: compressing the embedded core (#502) trades startup time for size, and that tradeoff is called out where it lands.
The goal is a single roll-up so footprint and target-reach work is visible and prioritizable, rather than living inside whichever PR happened to need it.
Compiler-free / embedding surface
Running precompiled bytecode without linking the reader, compiler, and resolver: a smaller binary and a smaller, more stable embedding surface.
lg-runtimethat executes precompiled.lgbwith no compiler in the binary.rt.BootCore(): compiler-freeclojure.coreload, so an AOT-lowered or embedded binary can reach the.lg-defined core without the compiler's eval path.Bundle size
The
.lgbbundle format and the embedded core are stored uncompressed; compressing them trims the shipped artifact and every binary..lgbbundles carry no compression (3–4.4x headroom).lg -c -z/-b -z).core_compiled.lgb(the universal per-binary win), with the boot-cost measurement.-wprogram bundles — the complementary lever to feat(lgbgen): compress the embedded core bundle (default off) #502 (removes the data rather than compressing it; the two compose).Alternate runtimes & platforms
Targets beyond native and browser-
js, where footprint, the host capability model, and cross-target build discipline matter most.GOOS=wasip1) module #466 build as a WASI (GOOS=wasip1) module: standalone wasm, host gated capabilities, standard-Go 64-bitint.GOOS=plan9port. Footprint isn't the driver here; portability and perf-under-emulation are (that perf side is Epic: Runtime performance & concurrency #464). It's listed for the shared "does let-go link and boot on this target" thread and the cross-target build gates, the same discipline as Build let-go as a WASI (GOOS=wasip1) module #466'swasip1-buildjob and the one the TinyGo lane would want.Merged enablers
Already-landed work this epic builds on, listed so the footprint story reads as one arc rather than scattered history:
clojure.coreintolet-go.core/let-go.types, the split that made a compiler-free core load feasible.io/resourceembedding and the v3 native-bundle trailer.Workflow
File footprint and target-reach issues here as sub-issues: binary/bundle size, embedding-surface reductions, and new-target enablement (with the build recipe and the measured size/RSS delta). Each child should stand on its own; this epic tracks the set and its progress. Boot-cost regressions belong to #464 when the cause is the running VM, and here when it's the size/startup tradeoff of a footprint change.