free-bird is a cross-platform CLI that finds the least recently used desktop apps and quits them.
Default behavior:
free-birdThat selects the 7 least recently used eligible apps and quits them.
macOS and Linux:
curl -fsSL https://raw.githubusercontent.com/prabaltripathiofficial/free-bird/main/install.sh | shWindows PowerShell:
irm https://raw.githubusercontent.com/prabaltripathiofficial/free-bird/main/install.ps1 | iexManual release downloads:
free-bird
free-bird --dry-run
free-bird sweep --count 7 --exclude Finder --exclude Terminal
free-bird list
free-bird list 12
free-bird watch --interval 2
free-bird doctorfree-bird uses this order of preference:
- The currently frontmost app.
- Persisted usage history from prior
free-birdruns orwatch. - OS launch-time metadata when no history exists yet.
The active app is excluded from sweeps.
- Native backend implemented with
lsappinfofor app discovery and LaunchServices metadata. - Frontmost-app tracking uses LaunchServices first and falls back to
System Events. - Graceful quit uses Apple Events when possible, then falls back to LaunchServices termination.
- State file:
~/Library/Application Support/free-bird/usage.tsv
This is the strongest backend in the project and is intended for modern macOS on Apple Silicon, including M1, M2, M3, and M4 machines.
- Uses
pwshwhen available, otherwise Windows PowerShell. - Discovers GUI apps from
Get-ProcesswithMainWindowHandle. - Tracks the active window through
GetForegroundWindow. - Attempts
CloseMainWindow()before using forced termination. - State file:
%APPDATA%\free-bird\usage.tsv
Intended for current Windows desktop releases.
- Uses X11 desktop metadata via
wmctrlorxprop. - Active-window tracking uses
_NET_ACTIVE_WINDOWwhen available. - Falls back to process launch time when focus metadata is limited.
- State file:
${XDG_STATE_HOME:-$HOME/.local/state}/free-bird/usage.tsv
Best results are on common desktop distros such as Ubuntu, Fedora, Debian, Arch, and openSUSE when running GNOME, KDE, or XFCE with wmctrl or xprop installed. Wayland-only sessions can be more limited.
cargo build --releaseBinary path:
./target/release/free-birdIf you want it globally:
ln -sf "$(pwd)/target/release/free-bird" /usr/local/bin/free-bird- Protected system apps are excluded per platform.
--dry-runis the safe way to confirm what would be quit.watchimproves ranking quality over time because it records the active app continuously.