TomLabs Apps
← All applications

DropSort

Keeps your Downloads folder tidy: unpacks zips, sorts files into folders, expires old ones

windows desktop avalonia files Personal

DropSort

A small Windows desktop app that keeps the Downloads folder from turning into a landfill. It watches the folder, waits until a download has really finished, then unpacks archives, moves files into folders by rules and expires what nobody touched for weeks — all visible and undoable from an Explorer-like UI.

What it does

  • Watches the top level of the Downloads folder (or any folder); subfolders are never sorted. A file is only handled once it is no longer locked and its size has been stable for a few seconds, so half-finished downloads are left alone. Partial-download extensions (.crdownload, .part, …) are ignored by a rule that comes first.
  • Rules — an ordered list of glob patterns (*.pdf; invoice-*) with an action:
    • Move to a folder (subfolder of Downloads or an absolute path; name clashes get a (2) suffix),
    • Extract a .zip into a folder (a single top-level folder inside is not double-wrapped; entries pointing outside the target are refused), then recycle / keep / park the archive, with a Windows notification that opens the unpacked folder on click,
    • Delete (recycle bin), or Ignore. The first matching rule wins. A tester on the Rules page shows what a given file name would hit.
  • Retention — loose files lying directly in Downloads are cleaned up after N days (global limit, 0 = keep). A subfolder is cleaned up only when a rule targets it and sets its own limit (the defaults do that for Installers and Torrents); nothing else in subfolders is ever touched. Recycle bin by default. Runs hourly; the Settings page previews what would go and can run it now.
  • Browser — breadcrumbs, back/forward/up, filter, the rule that would apply to each file; open, reveal in Explorer, apply rule now, unpack, recycle, copy path.
  • Activity — every move, unpack, recycle and expiry, with Undo for moves.
  • Dry run — log what would happen without touching anything. The first start runs in dry run until you untick it in Settings, so nothing is rearranged before you have seen the rules. Pause stops sorting and cleanup. A settings file that cannot be read switches watching off instead of falling back to defaults.
  • Tray icon (open, tidy now, exit), close to tray, start with Windows hidden.
  • Logs page — live log with filters and the daily files with a tail view.
  • System / Light / Dark theme (Ctrl+Shift+L cycles, System follows Windows live), Ctrl+K command palette, keyboard shortcuts (Ctrl+T tidy now, Ctrl+1…5 pages, Ctrl+F filter, F5 refresh, Alt+←/→ and Backspace in the browser, Delete recycles).

Where things live

What Path
Settings and rules %APPDATA%\DropSort\settings.json
Activity history %APPDATA%\DropSort\activity.json
Log files (daily, rolling) %LOCALAPPDATA%\DropSort\logs\dropsort-YYYYMMDD.log
Downloaded updates %LOCALAPPDATA%\DropSort\updates

Build and run

Requires the .NET 10 SDK. The self-update library (TomLabs.AutoUpdate.Avalonia) comes from nuget.org.

dotnet run --project src/DropSort

Portable single-file release build (what CI publishes):

dotnet publish src/DropSort -c Release -r win-x64 -o publish

DropSort.exe --minimized starts hidden in the tray (this is what "Start with Windows" registers). DROPSORT_UPDATE_MANIFEST=https://host/latest.json points the updater at a test manifest. DROPSORT_DATA_DIR=<folder> keeps settings, history and logs in that folder instead of %APPDATA% / %LOCALAPPDATA% (portable use, or a second instance for testing).

Release

Bump <VersionPrefix> in src/DropSort/DropSort.csproj, add a section to CHANGELOG.md, tag vX.Y.Z. The Azure Pipeline publishes every push to master to the nightly channel and every v* tag to the stable channel of the TomLabs app store; the app updates itself from there. Regenerate the icon with pwsh tools/Make-Icons.ps1.

Notes

  • Only .zip is unpacked (built-in System.IO.Compression); .7z / .rar are moved to Archives by the default rules.
  • Retention judges a file by the later of its creation and last-write time, and an unpacked folder by its creation time, so old timestamps stored inside an archive do not make it expire early.
  • Watching a drive root or the user profile itself is refused.

Changelog

All notable changes to DropSort, newest first.

0.1.3 — 2026-09-24

Changed

  • The self-update library comes from nuget.org (TomLabs.AutoUpdate 0.3.2) instead of a git submodule; updates work as before.

0.1.2 — 2026-09-24

Fixed

  • Removed the critical-severity System.Drawing.Common 4.7.0 dependency (GHSA-rxg9-xrhp-64gj). It came with the retired Windows Community Toolkit notifications package; the unpack notification is now shown through Windows directly and still opens the folder when clicked.

0.1.1 — 2026-09-24

Added

  • The header button shows the current theme mode (half circle = System, sun, moon); the command palette can set each mode directly.

Changed

  • The theme switch (header, Ctrl+Shift+L) now cycles System / Light / Dark; System follows Windows live. Earlier Light/Dark choices were reset to System once.

0.1.0 — 2026-09-17

Added

  • Watches the Downloads folder (or any folder you pick) and sorts new files by rules once a download has finished: a file is only touched after it is unlocked and its size has been stable for a few seconds. Settled files are handled several at a time, and the UI stays responsive while hundreds are sorted at once.
  • Rules: ordered list of glob patterns with an action — move to a folder, unpack, recycle or ignore — each with an optional retention limit; a built-in default set covers archives, installers, images, video, audio, documents, disk images, torrents and data files. A tester shows which rule a file name would hit.
  • Zip archives are unpacked automatically (a single top-level folder is not double-wrapped, entries pointing outside the target are refused); the archive is then recycled, kept or parked in an Archives folder. A Windows notification announces every unpacked archive; clicking it opens the folder (can be switched off in Settings).
  • Retention: loose files in the watched folder are cleaned up after a configurable number of days (recycle bin by default), hourly and on demand, with a preview of what would go; a subfolder is only cleaned when its rule sets a limit.
  • File browser with breadcrumbs, back/forward/up, filter, the rule that would apply to each file, and actions: open, reveal in Explorer, apply rule now, unpack, recycle, copy path.
  • Activity page with everything DropSort did; moves can be undone while the file is still where it was put.
  • Dry run mode (on at the first start until switched off), pause/resume, "Tidy now", tray icon with menu, close to tray, start with Windows (hidden). An unreadable settings file switches watching off instead of silently using defaults.
  • Logs page: live log with level, source and text filters, plus daily log files with a tail view; Serilog files in %LOCALAPPDATA%\DropSort\logs.
  • Light and dark theme (follows Windows until switched), Ctrl+K command palette, keyboard shortcuts.
  • Self-update through TomLabs.AutoUpdate (stable / nightly channel) from the TomLabs app store; version shown in the header and in About with these notes.

Fixed

  • Rules were saved as empty objects and came back as "New rule" after a restart (the MVVM-generated properties were invisible to the JSON source generator).