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
Saves windows in left-to-right column order and uses swapcol dispatches to restore the exact same arrangement — no other tool does this.
Stores each column's width as a ratio of monitor width. Survives monitor changes and multi-monitor setups without manual resizing.
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.
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
Preview exactly what would be launched and skipped before touching anything.
Recover one closed workspace with restore --workspace N — the rest of your session and your other workspaces are left untouched.
save --workspace N re-captures just one workspace and merges it into the existing session file, leaving the rest untouched.
restore -v streams every launch, column swap, and stray-window move to stderr — clean output by default, full detail when you need it.
restore -q suppresses progress output entirely — ideal for an autostart hook where nothing's there to read it. Warnings and errors still get through.
See session age, workspace and window counts, and column widths at a glance.
Open the session JSON in $EDITOR to tweak widths or add launch args by hand.
hypr-recall delete work removes a saved session you no longer need.
RAII lock prevents concurrent restores from stomping on each other.
Save and restore multiple sessions by name — hypr-recall save work, restore gaming. list shows all saved sessions with age and window counts.
Wire into hl.on("hyprland.shutdown") or a repeating timer — no keybind required.
Add any app to the session-restore list via --session-restore-app or the config file.
Saves and restores which workspace was focused when you saved.
Optional ~/.config/hypr-recall/config.toml for per-app launch args, session-restore overrides, and overlay toggle.
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.