Paste screenshots into Claude Code, Cursor, or any terminal AI — in one keystroke.
Hotkey → drag a region → public share link lands in your clipboard. Done.
You're working with Claude Code, Cursor, or ChatGPT in a terminal — maybe on a remote VPS, maybe locally — and you need to show the model a UI bug, a design mockup, an error screen. The usual workflow is painful: screenshot, save, open the browser, upload to Imgur or Drive, copy the link, paste it. Every single time.
Snap2Link collapses that whole sequence into one keystroke. Hit your hotkey, drag a region, and a public link is already in your clipboard, ready to paste straight into your AI prompt. Uploads go to your own Google Drive with the minimum scope possible — no third-party server in the middle, no account to create, no monthly fee.
| 🤖 Built for AI workflows | Paste screenshots into Claude Code, Cursor, ChatGPT, Aider, or any tool that accepts an image URL |
| 🖱️ Drag-to-capture overlay | Fullscreen, semi-transparent, live size readout, ESC to cancel |
| ⚡ Instant share link | Upload → make public → clipboard, all in the background, < 1 s on broadband |
| ⌨️ Global hotkey | Default Ctrl + Print Screen, fully rebindable from Settings |
| 🖥️ Cross-platform | Windows, macOS, and Linux — single codebase, native everywhere |
| 🗂️ Auto-cleanup on Drive | Deletes screenshots older than N days (default 30) — your Drive stays tidy |
| 🚀 Built-in auto-updater | Signed updates pulled from GitHub Releases — Settings → Check for Updates |
| 🪟 Start with your OS | Toggle from Settings — always one keystroke away |
| 🔒 No third-party server | OAuth straight to your Drive. Your screenshots, your account, no middleman |
| 🌍 i18n-ready | English bundled; add a locale by translating a single JSON file |
# 1 · Install (see Installation section for your OS)
# 2 · Launch → wizard → "Connect Google Drive" → grant access in your browser
# 3 · Press the hotkey → drag a region → paste anywhereThat's it. Three steps, zero configuration.
Via winget (recommended, Windows 10+)
winget install snap2link
# or, fully qualified:
winget install amys94fr.Snap2LinkDirect download — grab the .exe installer from the Releases page. Windows SmartScreen may flag the binary as "unrecognised app" (not yet EV-code-signed) — click More info → Run anyway.
Download the universal .dmg from the Releases page, open it, and drag Snap2Link into Applications. A single binary runs natively on both Apple Silicon and Intel.
The app is not yet notarised, so the first launch needs a manual override: right-click the app in Finder → Open → Open in the dialog. Subsequent launches behave normally.
The first capture will prompt for Screen Recording permission in System Preferences → Security & Privacy → Screen Recording. Grant it and re-launch.
One-liner install (recommended)
curl -fsSL https://raw.githubusercontent.com/amys94fr/Snap2Link/main/scripts/install.sh | bashThe script detects your distro, picks the right package (.deb, .rpm, or .AppImage as fallback), downloads it from the latest release, and installs it. Read it before running if you'd like — it's in the repo.
Manual install — grab the file you want from the Releases page:
# Debian/Ubuntu (resolves dependencies automatically)
sudo apt install ./snap2link_*_amd64.deb
# Fedora/RHEL
sudo dnf install ./snap2link-*.x86_64.rpm
# Any distro (AppImage — portable, no install needed)
chmod +x snap2link_*_amd64.AppImage
./snap2link_*_amd64.AppImageThe system tray icon requires libayatana-appindicator3-1, which is preinstalled on most desktop environments.
You'll need Rust (stable), Node.js 20+, and the Tauri CLI (cargo install tauri-cli --version "^2").
git clone https://github.com/amys94fr/Snap2Link
cd Snap2Link
npm install
npm run tauri dev # hot-reload dev build
npm run tauri build # produces a signed installer in src-tauri/target/release/bundle/- AI prompts — paste the link directly into Claude Code, Cursor, ChatGPT, or Aider when you need visual context
- Bug reports — capture the broken UI, paste the link in Jira / GitHub Issues
- Design feedback — share mockup snippets in Slack / Discord / Notion in seconds
- Documentation — drop image links straight into READMEs, blog posts, support tickets
- Remote support — guide a colleague through their screen without launching a screen-share session
- Meeting notes — snap a slide, link it next to your notes, move on with the meeting
End users have nothing to configure. The first launch opens a browser tab on Google's consent page; pick your account; you're done.
For developers / forks wanting to ship under their own OAuth credentials:
- Create a project on console.cloud.google.com
- Enable the Google Drive API
- Credentials → Create OAuth client → Desktop application
- Download the JSON, rename it
credentials.json, drop it at the repo root (gitignored) npm run tauri build
Snap2Link only requests the minimum scopes:
| Scope | Why |
|---|---|
drive.file |
Read/write only the files Snap2Link itself creates — never the rest of your Drive |
userinfo.email |
Display the connected account in Settings (so "Switch Account" makes sense) |
- ✅ Region capture · OAuth Drive · clipboard · auto-cleanup · hotkey · tray
- ✅ Auto-updater (signed releases via GitHub)
- ✅ winget distribution
- ✅ Cross-platform — Windows, macOS, Linux
- 🔜 In-app annotations before upload — arrows, blur, text, highlight
- 🔜 History pane — last N screenshots with thumbnails and quick re-share
- 🔜 More clouds — Dropbox, OneDrive, S3-compatible
- 🔜 Full-screen / window-bound capture modes alongside region selection
- 🔜 More locales — French, Spanish, German, Portuguese …
- 🔜 Homebrew & Scoop packages
Got an idea? Open an issue — I read every one.
PRs welcome. Quick start for contributors:
git clone https://github.com/amys94fr/Snap2Link
cd Snap2Link
npm install
npm test # 77 frontend tests (Vitest)
cd src-tauri && cargo test --lib # 24 backend testsCI (test.yml) runs on every push and PR — tests must stay green for a merge.
The full guide (bug reports, feature proposals, coding style, PR checklist) is in CONTRIBUTING.md. For the release procedure (signing, manifest, GitHub release, winget bump), see docs/RELEASE.md.
src/ React + TypeScript frontend
windows/ SetupWizard · Settings · About · Overlay · UploaderToast
components/ HotkeyRecorder · RetentionControl · UpdateChecker
i18n/ i18next + locales/en.json
store/ Zustand global state
lib/keyMap.ts KeyboardEvent ↔ Tauri shortcut format
src-tauri/ Rust backend
src/commands/ auth · config · drive · screenshot · updater
src/tray.rs System tray icon + menu
src/hotkey.rs Global shortcut registration
icons/ App icons (all sizes, generated by `cargo tauri icon`)
MIT © 2025 Steven Abittan.
Built with Tauri v2, React, Tailwind CSS, and Vitest.
