Shelfly is a native Windows 11 shelf app, built with WinUI 3 (Windows App SDK). It's a small, always-on-top panel you drag files onto to stage them temporarily, then drag back out into another app, or move/copy/act on them in place - the same idea as macOS shelf apps like Dropover or Yoink, done natively for Windows.
- Floating shelf window - borderless, always-on-top, Mica/ Acrylic backdrop, rounded corners, position and size remembered between runs.
- Multiple shelves - not just one panel. Create, name, hide, close, and recall shelves independently, each with its own file stack. Shelf Center gives you an overview of every shelf (open or saved-but-closed) with a live preview strip and item counts.
- Native drag in / drag out - drop files from Explorer or the desktop onto a shelf, and drag them back out to any other app using a real OS- level drag (not a clipboard workaround). Dropped URLs/text are kept as link entries, with a best-effort favicon fetched for them.
- Shake to summon - start dragging a file, shake the mouse, and a shelf pops up under the cursor so you don't have to aim for the tray icon or remember a hotkey.
- Global hotkey - a configurable shortcut (default
Ctrl+Shift+D) toggles the shelf from anywhere. - Quick actions - a set of built-in, one-click file actions available
from the shelf, all runnable on single files or a whole selection:
- Copy to / Move to / Move to Recycle Bin
- Compress to
.zip - Copy paths to clipboard
- Share (native Windows share flyout)
- Convert image format / Compress image / Strip metadata
- Rename batch (sequential numbering, prefix/suffix, find & replace)
- Combine images into a PDF / Export PDF pages as images
- Checksum (MD5/SHA-1/SHA-256/SHA-512)
- OCR (extract and select text right off an image, Snipping-Tool style)
- Convert video to GIF
- Plugin system - every quick action above is written against the same public interface a third-party plugin uses. Anyone can add new actions without touching Shelfly's source. See plugins.md.
- QuickLook-style preview - hit space on a selected file for a full-size preview panel (images, video, and common document types).
- System tray integration - tray icon with a per-shelf menu (show/hide/ recall), and the app keeps running with nothing open until you explicitly exit.
- Settings - theme (light/dark/system) and corner style, hotkey recording, start-on-sign-in, enable/disable individual quick actions (built-in or plugin), and a GitHub-releases-based update check.
- Windows 11 (or Windows 10 1809+ with the Windows App SDK runtime).
- To build: Visual Studio 2022 (17.8+) with the .NET Desktop Development and Windows application development workloads, which bring in the Windows App SDK tooling.
-
Clone the repo and open
Shelfly.slnin Visual Studio. -
Let NuGet restore on first build (WindowsAppSDK, CommunityToolkit.Mvvm, the SettingsControls package, and
H.NotifyIcon.WinUIfor the tray icon). -
Set the platform to
x64orARM64- WinUI 3 doesn't build forAny CPU/x86here. -
F5 to run, or from the command line:
dotnet build Shelfly.sln -c Release
The shelf should appear near the bottom-right of the screen on first run, along with a tray icon.
Shelfly.sln
Shelfly/ Main app (WinUI 3)
App.xaml(.cs) Startup: shelves, tray, hotkey, plugin discovery
app.manifest DPI awareness / OS compatibility
Views/
ShelfWindow.xaml(.cs) The floating shelf UI, drag/drop, action flyouts
ShelfCenterWindow.xaml(.cs) Overview of every shelf, with previews
SettingsWindow.xaml(.cs) Appearance / Shortcuts / Plugins / About
PreviewWindow.xaml(.cs) Quick Look-style file preview
OcrOverlayWindow.xaml(.cs) Selectable-text overlay for the OCR action
PluginPromptWindow.xaml(.cs) Native prompts (choice/value/text) plugins use
Services/
ShelfManager.cs Owns every open/closed shelf
ShelfStore.cs Persists shelves to shelves.json
FileStackManager.cs Per-shelf file stack: add/remove/move/copy
SettingsService.cs JSON settings persistence
TrayIconService.cs System tray icon + per-shelf menu
HotkeyService.cs Global hotkey (RegisterHotKey)
DragShakeDetector.cs Shake-to-summon gesture detection
FaviconService.cs Favicon fetching for dropped links
BuiltInQuickActions.cs Shelfly's own actions, as IQuickActions
PluginLoader.cs / PluginManager.cs Third-party plugin discovery/loading
PluginHost.cs IPluginHost implementation
UpdateChecker.cs GitHub-releases update check
Models/ Shelf, StackedFile, settings, view models
Helpers/ Win32/window interop helpers
Assets/ App icon
Shelfly.PluginSdk/ Public interfaces third-party plugins target
Shelfly ships with a small set of built-in actions, but the same interface
they're built on (IQuickAction) is public. If you want to add your own
file action - a custom converter, an integration with another tool, a
niche batch operation - you can build it as a standalone plugin without
forking or rebuilding Shelfly itself.
See plugins.md for the full guide.
Shelfly is unpackaged (no MSIX), so it stores its own data under
%LocalAppData%\Shelfly\ rather than relying on ApplicationData.Current:
| Path | Contents |
|---|---|
%LocalAppData%\Shelfly\settings.json |
App settings |
%LocalAppData%\Shelfly\shelves.json |
Saved shelves and their contents |
%LocalAppData%\Shelfly\Plugins\ |
Installed third-party plugins |
%LocalAppData%\Shelfly\Scratch\ |
Cached favicons and temp files |
Issues and pull requests are welcome. If you're building a plugin rather than modifying the app itself, you generally don't need to touch this repo at all - see plugins.md.