SYS-01 // NATIVE DESKTOP UTILITY · 100% OFFLINE
Sysper
Reclaim 50GB of Dev Bloat. In 10 Seconds.
A fast, offline desktop cleaner engineered in Rust. Scans compiler caches, build intermediates, and orphaned dependency trees straight to your OS Trash with triple-layer .env protection.
- Moves to OS Trash only (zero permanent deletes)
- Triple .env & source code protection
- Under 15MB Tauri v2 native core
- 100% offline with zero telemetry
$ sysper scan ~/code/projects --safe-trash
[Phase 1] Single-threaded discovery: 42 project roots located in 1.2s
[Phase 1] Pruning protected trees: excluded 16 .env files, 42 .git trees, 84 src/ dirs
[Phase 2] Rayon work-stealing pool: sizing 6 categories across 8 cores...
[Found] node_modules: 38 directories (38.2 GB)
[Found] .next / build caches: 14 directories (8.6 GB)
[Found] dist / out: 19 release bundles (4.1 GB)
[Alert] target: 3 Cargo build directories (2.5 GB) [recompile required]
Total recoverable: 53.4 GB | Target destination: OS Recycle Bin
Zero permanent deletes. Files restorable with one click.
SYS-02 // THE SAFETY CONTRACT
Engineered for Zero Data Loss
Sysper replaces permanent deletions with atomic volume Trash operations. Every cleanup action remains restorable from your operating system Recycle Bin.
Explicit Boundary
Scans only the workspace directory you select (e.g. ~/code). Never scans root partitions or system files.
Upfront Secret Pruning
Prunes src, lib, app, and git upfront. Triple regex filters guarantee that .env files are never scanned.
Read-Only Sizing
Rayon work-stealing threads compute exact byte weights across discovered folders without modifying disk state.
Atomic OS Trash
Moves target directories directly into your operating system Recycle Bin. Zero permanent unlinks.
- src/, app/, lib/, components/Source code preserved
- .git/VCS history untouched
- .env, .env.*, *.pem, *.keySecret patterns pruned
- node_modules/Reinstall via pnpm/npm
- .next/cache/, dist/, build/Rebuildable intermediates
- target/ (Rust)Recompile alert issued
Iterates through 40,000+ files. If a background language server holds one open handle, execution aborts mid-sweep, leaving a broken corrupted state on disk.
Invokes native OS API (IFileOperation on Windows, NSFileManager on macOS). Moves the root directory pointer to the volume Recycle Bin in 0.4s without opening individual child files.
| Failure Mode | Blind Shell Script (rm -rf) | Sysper Safety Contract |
|---|---|---|
| Permanent Data Loss | rm -rf permanently unlinks inodes. One misplaced wildcard or bad glob destroys source files with zero recovery. | Moves files strictly to native OS Trash or Recycle Bin. Restore any directory with one click at any time. |
| Locked-File Deadlocks | Active dev watchers and language servers lock file handles on Windows, crashing shell sweeps in corrupted half-states. | Renames target directories directly into the volume recycle bin, bypassing active locked file handle freezes. |
| Secret & Source Leakage | Generic shell scripts do not parse project semantics and easily wipe local .env.local secrets and uncommitted code. | Source folders (src, lib, app, components) and .git are pruned upfront. All .env files are strictly excluded. |
| Silent Execution & Panic | Terminal commands run silently for minutes without showing progress, directory inventory, or byte counts. | Pre-calculates exact sizes per category across all CPU cores and records an atomic history ledger. |
If you need a deleted directory back, open your operating system Recycle Bin or Trash and click Restore. Sysper moves directories to the OS Trash instead of deleting them directly. Recovery requires one click in your system Recycle Bin.
SYS-03 // TARGET SCOPE & ESTIMATOR
Target Scope & Dynamic Bloat Calculator
Adjust the workspace slider to estimate how many gigabytes of compiler output and abandoned dependencies are idling across your active repositories.
| Category | Matched Target Patterns | Safety Notice | Estimated Weight |
|---|---|---|---|
| JavaScript & TypeScript | node_modulesdistbuildout Third-party dependency trees and compiled bundle output. | Safe to trash | 20 GB to 60 GB across 10 active repos |
| Fullstack Frameworks | .next.nuxt.output.turbo.vite.parcel-cache Framework server builds, client bundles, and incremental cache artifacts. | Safe to trash | 10 GB to 30 GB |
| Python Environments | __pycache__.pytest_cache Compiled bytecode files and test runner execution caches. | Safe to trash | 500 MB to 3 GB |
| Rust Compiler Builds | target Cargo build artifacts and debug symbols. | Rebuild required | 15 GB to 40 GB |
| Java & Android | .gradle Gradle daemon caches, wrappers, and build intermediates. | Safe to trash | 5 GB to 25 GB |
| Diagnostics & System Logs | logscoverage*.log.DS_StoreThumbs.db HTML test coverage reports, transient log dumps, and OS thumbnail caches. | Safe to trash | 1 GB to 5 GB |
SYS-04 // RUST ENGINE INTERNALS
One Process. Pure Systems Concurrency.
A single native Rust executable running Rayon work-stealing parallelism, upfront path pruning, and native volume rename APIs. Speed and safety originate from explicit systems decisions.
- Tauri v2 Desktop GUINative OS webview
- Headless CLI PipeStdio / JSON
- Dry-run PreviewRead-only state
- Windows IFileOperationAtomic Recycle
- macOS NSFileManagerTrash staging
- Linux FreeDesktopXDG Trash Spec
| Constant | Assigned Value | Operational Effect |
|---|---|---|
workerThreads | std::thread::available_parallelism() | Dynamically allocates Rayon worker threads matching host CPU cores. |
pruneFilter | Upfront Glob Match | Discards .git, src, app, and .env files before invoking fs::metadata syscalls. |
renameBatch | Atomic Volume Move | Routes directories directly into OS Recycle Bin, bypassing recursive child unlinks. |
bufferReuse | Worker Thread-Local Buffers | Reuses path allocation buffers across traversal iterations to eliminate heap churn. |
crashLedger | Append-Only WAL | Atomic local transaction log records operation history with instant rollback audit. |
offlineGate | Zero Network Sockets | No HTTP or telemetry crates are compiled into the native binary executable. |
SYS-05 // BENCHMARKS & COMPETITIVE MATRIX
Multi-Axis Developer Benchmark Matrix
Developers frequently rely on ad-hoc shell commands, terminal tools like npkill, or Electron cleaners. This matrix evaluates Sysper against alternative approaches across core engineering criteria.
Direct Tool Comparison
Benchmarked on an 8-core NVMe workstation (50 repositories, 100 GB workspace)
| Criterion | Sysper (Rust) | npx npkill | cargo-clean-all | rm -rf Script |
|---|---|---|---|---|
| Deletion Safety & Undo | Native OS Trash with one-click restore Zero loss | Permanent unlink (fs.rmdir) | Permanent unlink (rm -rf) | Permanent unlink (inode delete) |
| Windows File Locks | Atomic volume rename; zero handle freezes Lock-free | Crashes on open handles (EBUSY / EPERM) | Crashes on locked target binaries | Aborts mid-sweep with orphaned files |
| Traversal Concurrency | Rayon work-stealing across all CPU cores Multi-core | Single-threaded Node.js event loop | Serial directory walking | Single-threaded find and du |
| Speed (50 repos, 100GB) | 6.8 seconds Fastest | 45.2 seconds | 38.0 seconds | 142.0 seconds |
| .env & Secret Protection | Triple-layer filter prunes .env upfront Guaranteed | Targeted to node_modules only | Targeted to target/ only | None; accidental wildcards wipe secrets |
| Memory Footprint (RSS) | 18 MB idle, 42 MB peak scan <42 MB | 120 MB - 280 MB (Node engine) | 24 MB | <10 MB |
| Binary Size & Runtime | <15 MB single native executable Zero runtime | Requires Node.js runtime on host | Cargo and Rust toolchain required | OS shell built-in commands |
| Network & Telemetry | 0 bytes (100% offline, zero sockets) 100% offline | npm registry update checks | 0 bytes | 0 bytes |
SYS-05 // CLI & AUTOMATION
Run in Terminal. Automate Headless.
Sysper provides both a native desktop interface and a scriptable command-line binary. Run dry runs directly in terminal sessions or schedule automated maintenance scripts.
Sysper 1.0.0 (x86_64)
workspace: ~/code/projects
mode: dry-run (read-only verification)
concurrency: Rayon 8 worker threads
[Phase 1] 42 project roots discovered in 1.2s
[Phase 1] Pruned 16 .env files, 42 .git trees, 84 src/ folders
[Phase 2] Partitioned categories across CPU cores:
node_modules: 38.2 GB (38 directories)
.next & dist: 12.7 GB (33 directories)
target (Rust): 2.5 GB (3 directories) [recompile alert]
| Flag | Default | Effect |
|---|---|---|
--dry-run | false | Calculates recoverable disk sizes without moving files to OS Trash. |
--trash-only | true | Routes all targeted directories to OS Recycle Bin. Permanent unlinks are rejected. |
--exclude <pattern> | src/, .git, .env* | Appends custom glob patterns to the upfront directory traversal pruning gate. |
--min-age <days> | 0 | Ignores build directories created or modified within the specified day threshold. |
--threads <n> | NumCPU | Overrides Rayon work-stealing worker thread allocation count. |
--json | false | Emits machine-readable JSON output for shell automation and script pipelines. |
SYS-07 // NATIVE DISTRIBUTION & TRUST
Get Sysper v1.0.0
Lightweight native installers for Windows, macOS, and Linux. Built directly from GitHub Actions continuous integration releases.
Windows
Format: .msi / .exe
Arch: x64
Size: <15 MB
License: Open Source MIT
macOS
Format: .dmg
Arch: Apple Silicon & Intel
Size: <15 MB
License: Open Source MIT
Linux
Format: .AppImage / .deb / .rpm
Arch: x64 & ARM64
Size: <15 MB
License: Open Source MIT
Code-signing certificates cost $184/year ($99 for Apple Developer, $85 for Windows Authenticode). Because Sysper is distributed as a free open-source tool, binaries do not carry commercial certificates.
Click More info → select Run anyway.
Right-click app → select Open, or run xattr -cr /Applications/Sysper.app.
ORIGIN STORY
Why We Built Sysper
Sysper: Sys refers to the operating system. Per refers to thorough cleanup and sustained performance.
At Emiote, our daily work involves concurrent build sprints across multiple stacks: Next.js frontend platforms, NestJS backends, Tauri desktop utilities, and mobile apps. Over months of rapid iteration, abandoned dependencies and compiler caches consumed between 50GB and 100GB of NVMe storage across our workstations.
Standard operating system cleanup tools do not recognize developer directory conventions. Running shell commands like rm -rf node_modules across nested repositories is slow, error-prone, and risks wiping uncommitted changes or active .env configuration.
We engineered Sysper for zero telemetry, 100% offline execution, and low-overhead Rust parallel traversal. Files move strictly to the native OS Trash. We open-sourced Sysper under the MIT license so developers can reclaim storage safely.
Frequently Asked Questions
Can I recover files after cleaning?
Yes. Sysper moves files exclusively to your operating system Recycle Bin or Trash. You can open Trash and click Put Back or Restore at any time.
Does Sysper delete my .env or secrets?
No. Sysper prunes source folders upfront and runs triple-layer regex filters that exclude .env, .env.local, .env.production, and all related variants from scanning and selection.
Why does Windows SmartScreen or macOS show an unverified developer warning?
Apple Developer ($99/year) and Windows Authenticode ($85/year) code-signing certificates cost $184/year. As an open-source project, binaries are currently distributed without paid developer certificates. On Windows, click More info then Run anyway. On macOS, right-click and select Open.
How fast is the scan engine?
Sysper uses a two-phase architecture: single-threaded tree walking to eliminate lock contention, followed by multi-threaded Rayon work-stealing to calculate folder sizes in parallel. It routinely indexes 100GB across 50 repositories in under 10 seconds.
Does Sysper send any telemetry or metrics?
Zero. Sysper makes no network connections during scan or cleanup operations. It operates 100% offline.
Free 50GB of Dev Bloat in 10 Seconds
Native desktop utility for Windows, macOS, and Linux. 100% offline, zero telemetry, open source under MIT.
Open Source MIT · No registration required · Offline by default