Skip to content
Русский

4. Size and dependencies

  • Soft cap 16,777,216 B (16 MiB) for the standalone release exe, ritmolux.exe — derived from what the artifact carries by the rule ADR-0159 set for the component, applied to this artifact by ADR-0231, replacing an inherited 10,000,000 B that had never been measured against the exe. The derivation (Plan 0207 Phase 1): 10,971,648 B measured for target\release\ritmolux.exe (Windows 10, cargo build --release, default features, 2026-09-19), plus one more step the size of the largest feature class this project has shipped — the text step, +2,104,320 B as ADR-0159 measured it on the component, the one measured feature-sized diff on this code — is 13,075,968 B, and 16 MiB is the next round binary boundary above it (ADR-0231 names the two boundaries the rule steps by, 12 MiB and 16 MiB; 12,582,912 B is below the sum). The reading of “round” as any whole MiB would give 13,631,488 B and was not taken: under it the one step the rule means to admit would land at 95.9 % of the cap, past the warning line, so the cap would admit nothing quietly. At 16 MiB that step lands at 77.9 % and a second one at 90.5 %, which is the shape ADR-0159 asks for exactly — one more feature of the largest class is admitted and the second has to be argued for. The cap names the Windows exe; whether each platform’s binary owes a figure of its own is still not decided, and every recipe below measures per executable. packaging/windows/stage.ps1, packaging/macos/bundle.sh and packaging/linux/stage.sh print the length on every build, beside the build that produced it, and warn above 15,099,494 B (90 % of the cap) — each Apple slice on its own, since a universal binary is two executables in one file. None fails a release over a size: these caps are soft. The Windows release exe carries --features spout and has not been measured with it; the first tag build prints that figure.

    What the exe carries, measured 2026-09-22 on the Linux build of the same tree — ritmolux from cargo build --release -p standalone, v0.143.1, rustc 1.97.1, Arch, 12,711,784 B stripped (75.8 % of the cap; 96 B over the 12,711,688 B recorded for v0.142.0), then rebuilt with --config profile.release.strip=false so the symbol table could be read. By section, from the stripped file: .text 9,247,623 B, .rodata 1,771,688 B, .eh_frame 637,668 B, .rela.dyn 400,992 B, .data.rel.ro 327,352 B, .gcc_except_table 225,904 B, everything else under 100 KB together. By crate, from the 9,325,300 B of function and object symbols the unstripped file names (fat LTO inlines the rest into callers, so every figure is a floor): naga 1,177,352 B; Rust’s core 1,105,465 B; rustfft 799,921 B; rlx_core 655,958 B; wgpu_core 580,588 B; winit 509,326 B; wgpu_hal + wgpu 425,719 B; the standalone shell (ritmolux

    • standalone) 344,921 B; wayland_client 275,803 B. The font stack behind the text feature — harfrust, skrifa, zeno, read_fonts, cosmic_text, swash, fontdb, fontconfig_parser, roxmltree, yazi, the unicode_* tables and glyphon itself — sums to 1,584,263 B of named symbols, a floor consistent with the 2,104,320 B the same feature measured as a whole-artifact diff. The embedded preset library is 116 files, 641,455 B verbatim in .rodata (ADR-0022). The series, one row per reading:
    Measured atbinarybuildbytes
    2026-09-19ritmolux.exeWindows 10, cargo build --release, default features10,971,648 B
    2026-09-22ritmolux (Linux)v0.142.0, packaging/linux/stage.sh, Arch12,711,688 B
    2026-09-22ritmolux (Linux)v0.143.1, cargo build --release -p standalone, rustc 1.97.1, Arch12,711,784 B
  • Soft cap 12,582,912 B (12 MiB) for the foobar2000 component, foo_ritmolux.dll — its own figure rather than “the same ballpark”, because the two artifacts do not carry the same things. The component carries the whole core, the embedded preset library and the SDK shim, and carries neither winit, the window, nor the WASAPI capture stack. Derived in ADR-0159 as 9,789,952 B plus one more step the size of the text step, rounded up to the next binary boundary — so it admits one more feature of the largest class this project has shipped, and a second one has to be argued for. packaging/foobar/build-component.ps1 prints the length on every build and warns above 11,324,620 B (90 % of the cap). It never fails a release over a size: these caps are soft, while the seven fatal checks beside the measurement are properties of a correct artifact.

  • Recorded, not capped: 118,073,278 B for the Windows studio zip, ritmolux-studio-v0.113.0-windows-x64.zip, measured from the first zip packaging/studio/build-studio.ps1 produced (ADR-0178 asks for the figure in bytes; the macOS universal zip carries two Electron architectures and will be larger, and its figure joins this row when the first release measures it). It decomposes, from the unpacked 291,321,974 B: 277,424,419 B of prebuilt Electron runtime, 10,701,824 B of player, and 3,195,731 B of app.asar — everything this project wrote. That ratio is why the row records rather than caps: 95 % of the artifact is a dependency whose size no edit here moves, so a cap would measure Electron’s release cadence rather than our restraint, and the two soft caps above exist to be readings on the latter. What would move it is dropping a bundle, not trimming one; the studio is never shipped inside the player, and nothing shipped depends on it.

  • wgpu is the accepted fixed cost; little else is.

  • Release profile: LTO on, symbols stripped, exact-version pins for direct deps.

  • Gate: any new crate pulling > ~20 transitive deps needs a stated justification (comment in Cargo.toml or, if cross-cutting, an ADR).

Built from 13c7582 at version 0.158.0. This site tracks main and is not versioned per release.