A macOS menu bar utility for drag-and-drop file collection shelves.
- Floating shelves — temporary collection panels that hover above other windows
- Shake-to-summon — shake your cursor while dragging to instantly open a preview shelf
- Global hotkey — press Option-Command-S to create a new shelf anytime
- Drag in, drag out — drop files, folders, text, and URLs onto a shelf, then drag them back out to any app
- Multiple shelves — open several shelves at once with cascade positioning
- Menu bar integration — lives in the menu bar, never clutters your dock
- Configurable dimensions — adjust shelf width and height to your preference
- Launch at login — start HoldIt automatically when you log in
- macOS 13 Ventura and later
- macOS 13.0+
- Xcode 15+ (Swift 5)
git clone git@github.com:Anmolnoor/hold-it.git
cd hold-it
open ShelfKit.xcodeprojSelect the ShelfKit scheme in Xcode, then build and run (Cmd+R).
Note: HoldIt runs as a menu bar utility (no dock icon). After launching, look for the icon in the menu bar.
- Create a shelf — click the menu bar icon and select "New Shelf", or press Option-Command-S
- Shake gesture — while dragging a file, shake your mouse horizontally to summon a preview shelf
- Collect items — drop files, folders, text snippets, or URLs onto any shelf
- Export items — drag items from a shelf to another app
- Settings — accessible from the menu bar icon
HoldIt uses the internal module name ShelfKit. The codebase is organized as:
| Directory | Purpose |
|---|---|
App/ |
Application lifecycle, menu bar controller, settings window |
Domain/ |
Core models (Shelf, ShelfItem) |
DragDrop/ |
Global drag monitoring, drop handling, shake detection, hotkeys |
Storage/ |
UserDefaults-based preferences |
UI/ |
SwiftUI views, view model, presentation modes |
Windowing/ |
NSPanel management, screen positioning, window coordination |
Built with AppKit + SwiftUI, Combine for reactive state, and Carbon for global hotkey support.
Contributions are welcome! Please read the Contributing Guide before submitting a pull request.
If you find a bug or have a feature idea, please open an issue.
This project is licensed under the GNU General Public License v3.0 — see the LICENSE file for details.