AutoTidy 2.0 is a complete rewrite in Rust.
The app is the same idea — point it at cluttered folders, describe what should happen, let it run in the background — rebuilt from Python/PyQt6 onto Rust and Tauri.
Upgrading from 1.x
Nothing to do. Your rules, settings and history are read in place from %APPDATA%\AutoTidy.
The installer detects an existing 1.x install and offers to remove it. Take the offer. The two versions use different installer systems, so Windows won't replace the old one automatically — leaving both means two copies of AutoTidy organising the same folders at once.
What's new
- Recursive scanning to a depth you choose. 1.5.0 only ever scanned a folder's top level.
- Watch mode — react as files appear instead of waiting out the interval.
- Scan now — run a single pass on demand. 1.5.0 had no way to force a scan at all.
- Dark mode, following your Windows theme.
- Global exclusions have a UI. They existed in the config file before, with no way to edit them in the app.
- Log level and recursion depth are editable; previously config-file only.
Smaller
| 1.5.0 | 2.0.0 | ||
|---|---|---|---|
| Installer | 73 MB | 1.8 MB | 41× smaller |
| Executable | 33.5 MB | 4.9 MB | 6.9× smaller |
| Launch | unpacked 33.5 MB to %TEMP% every time |
runs directly |
It's also faster — 8,000 files in 0.6 s against 7.4 s — but being straight with you: if you're tidying a few dozen files an hour, you won't notice. The old engine took about 13 ms for that. Size, launch behaviour and the two new scanning modes are the real differences.
Bugs fixed, all present in 1.5.0
Found by running both engines over the same files and diffing the results:
- The Explorer context menu required administrator rights and refused to install without them, which made the feature largely unusable. It now uses the per-user registry hive.
--add-foldercould silently discard your other changes — it spawned a second process that wroteconfig.jsonwhile the running app held a stale copy and overwrote it on quit.- Renaming destination templates lost the rename. A destination of
{FILENAME}_backup{EXT}filed the file under its original name. - Undoing a whole run left no record, because only single-item undos were logged.
- Config writes weren't atomic, so an interrupted save could corrupt
config.json. - History could be wiped on launch. A 90-day prune ran at startup with no floor and no backup, so a history where everything predated the window was reduced to nothing. It now always keeps the most recent records and writes a backup before discarding anything.
- Undo tells you up front when something can't be reversed, instead of asking you to confirm and then failing.
Please read before installing
- Windows only. 1.5.0's description claimed Linux support; 2.0 does not have it. The engine is cross-platform and its tests run on Linux in CI, but the tray, autostart and context-menu integration are Windows-specific.
- Not code-signed yet. An application to the SignPath Foundation's free programme for open-source projects is pending. Until it's approved SmartScreen will warn — choose More info → Run anyway, or verify the checksum below.
- AutoTidy moves and deletes files. Try new rules against a folder you don't care about first, and use dry-run mode. Every action is logged and most are undoable, but permanent deletion isn't.
Downloads
| File | |
|---|---|
AutoTidy_2.0.0_x64-setup.exe |
Installer. Per-user, no administrator rights needed. |
AutoTidy.exe |
Portable. No install; still stores config in %APPDATA%, as 1.5.0's portable did. |
Verify your download
AA3309CB9B31802F29A79A5C77A3B585D9520ABB1133EE8D87E7C837CA6201E9 AutoTidy_2.0.0_x64-setup.exe
B244DA069E42C43C84CA050843E8A49E5F3A3451CDE79D5D60DEB19BA4C4AE2C AutoTidy.exe
Get-FileHash .\AutoTidy_2.0.0_x64-setup.exe -Algorithm SHA256How the rewrite was checked
Rewriting a program that deletes files shouldn't rest on reading the code carefully. The 1.5.0 engine is kept in the repository as an executable specification, and two harnesses run both engines over a purpose-built corpus and fail on any divergence — one comparing the decisions each makes, one running both for real over disposable copies and diffing the resulting files byte-for-byte. The second exists because 1.5.0's collision handling sits inside if not dry_run:, where a dry run can never reach it.
That's how the case-sensitivity and template-rename bugs above were found. 263 automated tests, and CI gates every push on the tests, lints, formatting and both harnesses.
Full changelog: v.1.5.0...v2.0.0