Skip to content
sweep
Users

Platforms and large trees

Choose an engine and understand runtime, memory and filesystem limits.

Distribution targets

TargetInstalled packages / standalone source qualification
Linux glibc x64Passed on hosted runner
Linux glibc ARM64Passed on hosted runner
macOS IntelPassed on hosted runner
macOS Apple SiliconPassed on hosted runner
Windows x64Passed on hosted runner

The October 4 source checkpoint passed the CI matrix and binary workflow. This verifies local tarball installation and headless standalone checks on those runners; it is not a published release or a physical-terminal guarantee. Interactive terminals still need qualification. Current performance measurements were collected on Linux x64. Alpine/musl and Windows ARM64 are not currently shipped targets. Refer to the specific release assets rather than assuming an unsupported binary will work.

Choose the npm CLI plus its optional precompiled engine when you already have Node/Bun. Choose sweep-TARGET for the self-contained application. The smaller sweep-engine-TARGET download is only the machine-protocol backend; it does not include interactive commands or the TUI. Both binary families get checksums and gzip assets through the release workflow.

Runtime and engine selection

Node.js 20.3+ supports the plain npm CLI. The full-screen UI needs Bun and OpenTUI, or a standalone build that embeds them. Both UI streams must be TTYs.

--engine auto prefers a usable Rust engine and otherwise uses JavaScript. --engine rust explicitly requests native execution; failures are surfaced. An engine failure after scanning starts must not silently turn into a successful partial cleanup.

Under Bun, the JS engine uses one Node child for genuinely incremental directory enumeration. It therefore needs Node on PATH. Under Node it enumerates directly. The embedded-native standalone's normal scan does not need external Node or Bun.

Large trees

File count, directory shape and metadata latency usually matter more than the sum of file lengths. A 200 GiB sparse file is cheap to size; a million small files can require a million metadata operations. Network drives and cold storage need separate measurements.

Defaults bound discovery to 100,000 candidates, 250,000 admitted directories, 32,768 queued paths, 500,000 inode identities, 64 MiB admitted path bytes and 128 MiB estimated retained charges. Sizing has a separate shared pool with live reservations, released as work completes. Reaching a sizing limit marks sizes partial; reaching a discovery limit makes the scan incomplete.

Discovery and sizing can each admit 128 MiB of logical charges, with a combined 256 MiB allowance. --resource-profile low-memory reduces those pools to 8 MiB each (16 MiB combined), with 5,000 candidates and smaller queue/identity bounds. These are accounting limits, not an RSS cap. Runtime heaps, terminal state, native libraries, buffers and thread stacks add memory. Sweep cannot promise immunity from OOM on an already constrained device.

Worker admission follows the runtime's available CPU allowance. Rust shares at most 16 workers between discovery and sizing, with one worker per pool on one- or two-CPU allowances. JS also reduces directory and metadata concurrency on small allowances. Other runtime threads and filesystem caches still use resources; these limits do not reserve RAM or guarantee a maximum percentage of CPU use.

If a resource error appears, scan a smaller project subtree. Choose --resource-profile low-memory for a smaller admission envelope. There are no public flags for arbitrary per-counter limits or .sweeprc fields. On a very large scope tree, the sidebar may fall back to all scopes (folder index limit) while the full candidate list remains available.

Project paths use UTF-8. A filename containing unrepresentable raw bytes is skipped with partial-scan feedback, rather than converted into another file's name. Ordinary Unicode names, including �, are supported. Sizing inside an already selected artifact still handles raw filenames.

For distribution sizes and measurement conditions, read Benchmarks.

There is no default deletion byte ceiling. An existing numeric maxSizeGB still limits removal independently of resource admission. For an intentionally reviewed 200–600 GiB selection, use --max-size-gb 600 for a run-specific cap, or explicitly choose --max-size-gb none to disable a configured cap. The TUI still asks for confirmation. A known size refusal preserves its scan and queue. A 600 GiB capacity claim requires measurements of representative file counts, layouts, storage and deletion behavior; sparse-file tests alone do not qualify that workload.

On this page