Skip to content

amys94fr/Snap2Link

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Snap2Link

📸 Snap2Link

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.

Release Downloads Stars License CI

Snap2Link demo


Why Snap2Link?

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.

✨ Features

🤖 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

🚀 Quick Start

# 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 anywhere

That's it. Three steps, zero configuration.

📦 Installation

Windows

Via winget (recommended, Windows 10+)

winget install snap2link
# or, fully qualified:
winget install amys94fr.Snap2Link

Direct 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.

macOS

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 → OpenOpen 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.

Linux

One-liner install (recommended)

curl -fsSL https://raw.githubusercontent.com/amys94fr/Snap2Link/main/scripts/install.sh | bash

The 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.AppImage

The system tray icon requires libayatana-appindicator3-1, which is preinstalled on most desktop environments.

Build from source

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/

💡 Use Cases

  • 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

🔧 Configuration (Google OAuth)

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:

  1. Create a project on console.cloud.google.com
  2. Enable the Google Drive API
  3. Credentials → Create OAuth client → Desktop application
  4. Download the JSON, rename it credentials.json, drop it at the repo root (gitignored)
  5. 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)

🛣️ Roadmap

  • ✅ 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.

🤝 Contributing

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 tests

CI (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.

Project layout

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`)

📄 License

MIT © 2025 Steven Abittan.

Built with Tauri v2, React, Tailwind CSS, and Vitest.

About

Paste screenshots into Claude Code, Cursor, or any terminal AI. Hotkey → region capture → public link in your clipboard. Cross-platform, open source.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors