hypr-recall

Save and restore Hyprland window sessions.
The only tool that restores scrolling layout column order and width.*

# add to hyprland.lua — restore on login
hl.exec("hypr-recall restore")

# snapshot your session (or give it a name)
hypr-recall save
hypr-recall save work

# list all saved sessions
hypr-recall list

what makes it different

unique

Column order

Saves windows in left-to-right column order and uses swapcol dispatches to restore the exact same arrangement — no other tool does this.

unique

Column widths

Stores each column's width as a ratio of monitor width. Survives monitor changes and multi-monitor setups without manual resizing.

smart

Session-restore app detection

Firefox, Zed, Chromium and similar apps restore their own windows — hypr-recall launches them once and waits for all their windows together, handling single-instance handoff automatically.

smart

Event-driven window detection

Subscribes to Hyprland's socket2 openwindow/closewindow event stream, so each window is detected the moment it appears rather than via a busy-wait.

everything else

Dry run

Preview exactly what would be launched and skipped before touching anything.

Single-workspace restore

Recover one closed workspace with restore --workspace N — the rest of your session and your other workspaces are left untouched.

Single-workspace save

save --workspace N re-captures just one workspace and merges it into the existing session file, leaving the rest untouched.

Verbose mode

restore -v streams every launch, column swap, and stray-window move to stderr — clean output by default, full detail when you need it.

Quiet mode

restore -q suppresses progress output entirely — ideal for an autostart hook where nothing's there to read it. Warnings and errors still get through.

Status

See session age, workspace and window counts, and column widths at a glance.

Edit

Open the session JSON in $EDITOR to tweak widths or add launch args by hand.

Delete

hypr-recall delete work removes a saved session you no longer need.

Lock file

RAII lock prevents concurrent restores from stomping on each other.

Named sessions

Save and restore multiple sessions by name — hypr-recall save work, restore gaming. list shows all saved sessions with age and window counts.

Auto-save hooks

Wire into hl.on("hyprland.shutdown") or a repeating timer — no keybind required.

Custom restore apps

Add any app to the session-restore list via --session-restore-app or the config file.

Active workspace

Saves and restores which workspace was focused when you saved.

Config file

Optional ~/.config/hypr-recall/config.toml for per-app launch args, session-restore overrides, and overlay toggle.

Resilient restore

Falls back to a matching .desktop entry when a saved binary path is gone, and skips just that app instead of aborting the whole restore.