Snapit is a universal clipboard vault for macOS and Windows. Every item you copy is captured automatically, encrypted locally with AES-256-GCM, and synced end-to-end encrypted to the Snapit backend so your clipboard history is available on every device you own.
- Automatic capture — watches the system clipboard in the background; every copied text, URL, or image is stored instantly.
- AES-256-GCM encryption — all items are encrypted at rest before touching the local database. Keys are derived with PBKDF2-SHA256 at 200 000 iterations and stored in the OS keychain (macOS Keychain / Windows DPAPI).
- Full-text search (FTS5) — find any clipping by keyword in milliseconds via SQLite FTS5.
- Cross-device sync — end-to-end encrypted sync over HTTPS with the Snapit backend. Real-time plan-change events arrive via Server-Sent Events.
- Quick-access overlay — a global hotkey (default
⌘ Shift V/Ctrl Shift V) opens a compact picker window without leaving your current app. - System tray integration — Snapit lives in the menu bar / notification area. Click the icon to open the main vault, right-click for options.
- Device registration & heartbeat — devices are registered and kept alive so the server knows which devices are active.
- Offline-first — the full local database is always available; sync runs on a 30-second timer and retries automatically when connectivity returns.
| macOS | Windows | |
|---|---|---|
| OS version | macOS 10.14 Mojave or later | Windows 10 (build 1903) or later |
| Flutter SDK | 3.44 or later | 3.44 or later |
| Toolchain | Xcode 15+ with Command Line Tools | Visual Studio 2022 with "Desktop development with C++" workload |
| Architecture | arm64 (Apple Silicon) or x86_64 | x86_64 |
brew tap coderbenny/tap
brew install --cask snapit
brew trust --cask coderbenny/tap/snapitThat's it — Snapit will appear in your Applications folder and the menu bar icon will be ready to use.
The
brew truststep removes the macOS quarantine flag so the app opens without a security warning. Snapit is ad-hoc signed; this is expected behaviour for apps distributed outside the Mac App Store.
Grab the latest .dmg from the Releases page, open it, drag Snapit to Applications, then run:
xattr -dr com.apple.quarantine /Applications/Snapit.app- Download
Snapit-Windows-<version>.zipfrom the Releases page. - Extract all files from the ZIP into a folder of your choice (e.g.
C:\Program Files\Snapit). The exe depends on the.dllfiles next to it — do not move or run the exe on its own. - Run
snapit.exefrom inside that folder — Windows may show a SmartScreen prompt the first time; click More info → Run anyway. - Snapit appears in the notification area (system tray). Right-click the icon to access all options.
Optional shortcut: Right-click
snapit.exe→ Send to → Desktop (create shortcut), then drag that shortcut into your Start Menu or Startup folder (shell:startup) so Snapit launches automatically on login.
Troubleshooting — DLL not found: If you see a DLL error on launch, it means the exe was moved out of the extracted folder. Put
snapit.exeback alongside all the.dllfiles and thedata/folder.
git clone https://github.com/coderbenny/snap_PC
cd snap_PCcd snap_PC
flutter pub getCopy the environment template and set the API base URL to wherever the Snapit server is running (see Backend Configuration):
# The app reads Snapit_API_URL from app_constants.dart; edit that file or
# set the value before building.flutter run -d macosflutter run -d windows# macOS
flutter build macos --release
# Windows
flutter build windows --releaseThe desktop app connects to the Snapit backend defined in:
lib/core/constants/app_constants.dart
Set the apiBaseUrl constant to the address of the running server. For local development, start the server first:
cd ../server
# follow the server README to start the backendThe default development URL is http://localhost:5559/snap. For production, the app automatically uses https://api.snapit.ink/snap.
| Action | macOS | Windows |
|---|---|---|
| Open Quick Picker | ⌘ Shift V |
Ctrl Shift V |
| Open Main Vault | Click tray icon | Click tray icon |
| Search clipboard history | Type in Quick Picker | Type in Quick Picker |
| Paste selected item | Return |
Enter |
| Close overlay | Esc |
Esc |
| Settings | ⌘ , |
Ctrl , |
| Quit Snapit | Right-click tray → Quit | Right-click tray → Quit |
pc/
├── lib/
│ ├── main.dart # App entry point, tray + window init
│ ├── app.dart # Root MaterialApp + Riverpod ProviderScope
│ ├── router.dart # go_router route definitions
│ ├── core/
│ │ ├── constants/
│ │ │ └── app_constants.dart # API URL, timeouts, encryption params
│ │ ├── models/
│ │ │ └── clip_item.dart # ClipItem domain model
│ │ ├── providers.dart # Top-level Riverpod providers
│ │ └── services/
│ │ ├── api_client.dart # Dio HTTP client + auth interceptor
│ │ ├── clipboard_service.dart # clipboard_watcher integration
│ │ ├── database_service.dart # sqflite_common_ffi + FTS5 setup
│ │ ├── device_registration_service.dart
│ │ ├── encryption_service.dart # AES-256-GCM + PBKDF2, runs in Isolate
│ │ ├── event_stream_service.dart # SSE client for real-time events
│ │ ├── secure_storage_service.dart # flutter_secure_storage wrapper
│ │ ├── sync_service.dart # 30 s timer sync orchestrator
│ │ └── tray_service.dart # tray_manager integration
│ ├── features/
│ │ ├── auth/ # Sign-in / sign-up screens
│ │ ├── clipboard/ # Main vault list + detail views
│ │ ├── quick/ # Quick-access overlay window
│ │ └── settings/ # Settings screen
│ └── shared/
│ ├── theme/ # AppTheme (light + dark)
│ └── widgets/ # Shared UI components
├── assets/
│ └── icons/ # Tray icons (macOS template + Windows ICO)
├── macos/ # macOS runner + entitlements
├── windows/ # Windows runner + resource files
├── pubspec.yaml
└── analysis_options.yaml
Snapit is split across separate repositories:
| Repo | Description |
|---|---|
| snap_PC | This repo — Flutter desktop app (macOS) |
| snap_mobile | Flutter Android app |
| snap_BE | Flask REST API, SSE event stream, WebSocket file-transfer relay |
| snap_FE | Next.js web dashboard and marketing site |
All clients share the same end-to-end encryption scheme. The server never sees plaintext clipboard data.
MIT — see LICENSE.