Environment variables

This page lists the supported runtime variables and the main developer overrides. Most runtime numbers and booleans are parsed by rom_weaver_core::env; the table notes exceptions.

Command-scoped configuration

Patch metadata and browser command arguments are command inputs, not ambient environment configuration. SOLID metadata is supplied with the patch create --solid-* flags documented in patch creation metadata, or with the corresponding solid_* fields on a typed WASM PatchCreateCommand.

The browser OPFS runner likewise has no constructor-level program, argv0, or env options. WASI argv0 is always rom-weaver. A command may still supply env in its per-run options when it needs one of the runtime knobs below.

Runtime knobs

Variable Type Default Read at Purpose
ROM_WEAVER_LOG filter string unset crates/rom-weaver-cli/src/lib.rs Tracing filter spec (e.g. rom_weaver_app=trace); also honored via RUST_LOG when no explicit CLI log level is selected.
ROM_WEAVER_DATA_DIR directory path platform data directory + rom-weaver crates/rom-weaver-cli/src/identify_database.rs Parent of the native identify database's identify directory. --database-dir overrides the full database path.
ROM_WEAVER_CHEAT_DATABASE directory path unset crates/rom-weaver-cli/src/cheat_database.rs Cheat shard directory used when --cheat-database is absent. It wins over the discovered data directories, even when it lacks the needed shard.
ROM_WEAVER_MAN_DIR directory path $XDG_DATA_HOME/man/man1 (else ~/.local/share/man/man1) on Unix, %LOCALAPPDATA%\rom-weaver\docs\man on Windows crates/rom-weaver-cli/src/manpages.rs Install directory for rom-weaver man --install. --man-dir overrides it.
ROM_WEAVER_PATCH_IN_MEMORY_LIMIT u64 (bytes) 256 MiB crates/rom-weaver-patches/src/lib.rs Cap for buffering patch apply/create in memory; above it patches stream. On native builds only, sparse PPF/MOD/APS/APSGBA patches stream at 32 MiB and above (PAT at 64 MiB), even under the cap. 0 forces streaming.
ROM_WEAVER_DISC_TRACK_IN_MEMORY_LIMIT u64 (bytes) 256 MiB crates/rom-weaver-cli/src/patch_apply_disc.rs Cap for buffering a single freshly produced disc track in memory during compression instead of a temp file (only ever bounds one track, never the whole disc). 0 forces temporary-file storage.
ROM_WEAVER_MEMORY_LIMIT_BYTES u64 (bytes) physical RAM on Linux and macOS, 1 GiB on wasm, unlimited elsewhere crates/rom-weaver-core/src/threads.rs Memory the engine may use. Three quarters of it caps how many 7z solid blocks decode at once, because each decoding worker allocates its own dictionary, sized to the block's output when that is smaller than the declared size. The browser runner sets it to the shared memory maximum the browser granted.
ROM_WEAVER_ZIP_ZSTD_MEM_BUDGET_MB u64 (MiB) physical RAM / 2 (1-2 GiB fallback) crates/rom-weaver-containers/src/handlers/zip.rs Memory budget that caps zstd multi-thread job count for zip create.
ROM_WEAVER_7Z_MEM_BUDGET_MB u64 (MiB) physical RAM / 2 (1 GiB wasm / 2 GiB native fallback) crates/rom-weaver-containers/src/handlers/sevenz.rs Memory budget that caps the LZMA2 multi-thread count for 7z create. Invalid text is ignored.
ROM_WEAVER_7Z_ENCODER liblzma 7-Zip SDK encoder handlers/sevenz.rs planner and archive_write_set_format_7zip.c writer (raw getenv) Selects the seeded parallel-block liblzma LZMA2 encoder for 7z create instead of the default 7-Zip SDK one. Output is slightly smaller than 7zz's, at a large time cost on inputs bigger than the dictionary; any other value keeps the SDK encoder. Native builds only - the wasm build never compiles the SDK encoder in, so it always uses liblzma and ignores this.

Test / build-only knobs

Not for production use.

Variable Read at Purpose
ROM_WEAVER_TEST_THREAD_POOL_FAIL crates/rom-weaver-core/src/threads.rs Forces a thread-pool build failure to exercise the single-thread fallback.
ROM_WEAVER_TEST_TMPDIR container test harness Overrides the temp dir used by container tests.
ROM_WEAVER_WASI_THREADS crate build.rs scripts Forces the rom_weaver_wasi_threads cfg on (otherwise gated on the wasm32-wasip1-threads target).
ROM_WEAVER_LZMA_ASM crates/rom-weaver-containers/libarchive/build.rs Names the MASM-compatible assembler used for the x86-64 LZMA decode loop, replacing the jwasm/asmc/asmc64/uasm/ml64 probe. Missing or failing assemblers fall back to the portable C loop with a build warning, never an error. Read only on x86-64 targets.
ROM_WEAVER_UASM crates/rom-weaver-containers/libarchive/build.rs Alias for ROM_WEAVER_LZMA_ASM. Both are honoured; when both are set ROM_WEAVER_LZMA_ASM is tried first and ROM_WEAVER_UASM is the fallback candidate.

Browser / PWA runtime handles (window.* globals)

These JavaScript globals expose diagnostics and service-worker controls. They are separate from process environment variables.

Global Direction Set/read at Purpose
window.ROM_WEAVER_CONSOLE_LOGS exposed by app webapp/console-log-capture.ts Console-log capture API (getReport/copy/clear/...) for debugging.
window.ROM_WEAVER_SERVICE_WORKER exposed by app webapp/webapp.ts Service-worker cache controls (forceCacheAndReload/getState/...).
window.ROM_WEAVER_BROWSER_DIAGNOSTICS exposed by app webapp/browser-runtime-diagnostics.ts Browser runtime diagnostics handle.
window.ROM_WEAVER_MOBILE_SAFARI_DIAGNOSTICS exposed by app webapp/browser-runtime-diagnostics.ts Mobile-Safari runtime diagnostics handle (alias of the same diagnostics API).
window.ROM_WEAVER_IOS_SAFARI_MATRIX exposed by app webapp/mobile-safari-matrix.ts iOS-Safari format-matrix diagnostic harness API (diagnostic page only).

Webapp build/test/bench tooling (*.mjs)

The webapp build/test/bench also reads a ROM_WEAVER_* family in *.mjs (vite/vitest configs, scripts) - e.g. ROM_WEAVER_APP_VERSION, ROM_WEAVER_COMMIT_HASH, ROM_WEAVER_WASM_ARTIFACT_DIR, ROM_WEAVER_COVERAGE, ROM_WEAVER_BROWSER, ROM_WEAVER_WASM_STRESS_1GB, and the ROM_WEAVER_WASM_BENCH* benchmark toggles. Those are front-end tooling knobs, not part of the Rust runtime surface above.