A tidy Downloads folder, every morning
Without hiding what you just downloaded. Today's files stay loose in the root where you expect them. Everything older is filed into a folder named for the day it arrived — when the day rolls over, yesterday's files move on their own.
macOS 14 or later. Free, open source, no account, no telemetry.
~/Downloads/
├── 2026-08-17/
│ └── invoice.pdf
├── 2026-08-18/
│ ├── slides.key
│ └── screenshot.png
├── report.pdf ← today
└── archive.zip ← today
Why
Download the same build artifact from GitHub twice and the second one
lands as artifact-1.zip, the third as
artifact-2.zip, and the name no longer tells you anything. So
you make a folder, drag the new file into it, rename it back to what it
was meant to be, and only then start working with it.
Making the folder, dragging the file in, renaming it back — none of that takes long. It is just cumbersome, every single time. Tideline is that folder, made for you every day.
Hence the idea: what if the Downloads folder were always clean? Not empty — clean. Everything that came before sits in its own folder, so the moment you download something it is the only thing in the root, under its real name, ready to work with.
What it does
Filing is the whole of it. Everything else is there because a folder that files itself still grows, and because nothing here should ever be a surprise.
Files by the day
One folder per day, or per month. Today's downloads stay loose — or the last three days, or the week, whichever you pick.
Type folders
Send every .dmg to Installers/ whatever day it arrived on. Nine to choose from, all off until you turn one on.
Preview mode
A sweep that touches nothing and then tells you exactly what it would have moved. Every destructive feature honours it.
Puts it all back
One sheet lists everything Tideline ever filed and moves it back into the root. The way out is a button, not a restore from backup.
Reclaim space
Filing tidies a folder, it never shrinks one. Duplicates, big files and old dated folders are found and shown in one place.
Nothing is deleted
Removals go to the Trash, never to unlink. A setting you regret is a drag back out.
Nothing is overwritten
A name that is already taken counts up: report.pdf, report-1.pdf, report-2.pdf.
Runs when you say
As soon as the folder changes, once a day at a time you pick, when the app starts, or any combination of the three.
Ninety seconds, every screen
The first run, a sweep, all six settings panes, Reclaim space, the activity log and the menu bar. No sound — it is a silent tour, so nothing is missed by watching it anywhere.
Why it is an app and not a script
The obvious way to build this is a script on a timer. The problem is
permissions: a script runs as whatever launched it, so macOS asks
that process for access. In practice that means granting
Full Disk Access to bash, your terminal or
launchd — a blunt, all-or-nothing switch that is awkward to explain and
easy to get wrong.
An app bundle has its own identity, so macOS asks a single, specific question:
One click, scoped to one folder, revocable in System Settings. Nothing else on the disk becomes reachable.
And it stays small
Native Swift with no dependencies at all: about 3 MB to download, 9.6 MB on disk because it ships for both Apple silicon and Intel. No Electron, no bundled runtime, no helper process quietly installed beside it — one menu bar app that schedules itself, and quitting it really is the end of it.
Install
With Homebrew:
brew install --cask estruyf/tap/tideline
Or open the disk image from the latest release and drag Tideline.app onto the Applications folder beside it. Then see First launch — nothing is filed until you say so.