Skip to content

pepperonas/inspector-rust

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

344 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🇬🇧 English · 🇩🇪 Deutsch

Inspector Rust — keyboard-first clipboard toolkit

Inspector Rust 🕵️‍♂️

Keyboard-first clipboard hyper-toolkit — native on macOS, Windows 11, Linux. No Electron, no cloud, no telemetry.

Press Ctrl+Space anywhere → frameless popup over the active monitor → fuzzy-search 1 000 deduped clipboard entries → Enter pastes back into the previously focused app. Whole loop under 200 ms, under 50 MB RAM, AES-256-GCM-encrypted at rest with keys in the OS keychain. Built for the kind of person who already has muscle memory for three clipboard managers and is tired of every one of them.

✨ What it does (in short)

  • 📋 Clipboard history — text, RTF, HTML, PNG, file lists; 1 000 entries deduped via SHA-256; fuzzy-search-as-you-type.
  • 🧮 Inline calculator (2+2, sqrt(144), hex/bit-ops; slot-machine result reveal), unit / base / time converter (5 km in mi, 0xff in dec, 1700000000 as date) and colour converter (#hex / rgb() / hsl() in any direction).
  • 🎯 Text expander — 4 modes: passive auto-expansion (aText-style — expands as you type, no hotkey) · in-popup search · system-wide hotkey (AX/UIA in-place replace + Electron fallback) · direct hotkey → snippet slots (works even in terminals). Dynamic placeholders expand at paste time: {date} / {date:%d.%m.%Y}, {time}, {datetime}, {clipboard}, {cursor} (caret position), {{/}} for literal braces.
  • 🔍 Screen-region OCR (Ctrl+Shift+O) — Apple Vision (macOS) / WinRT (Windows) / Tesseract (Linux). PDF-grade text recognition into clipboard.
  • 📸 Screenshots — CleanShot-X-style: region (Ctrl+Shift+S) · full-screen · active-window · self-timer · repeat-last (shot / shotfull / shotwin / shotlast); floating preview HUD; annotation editor (arrow / line / text / rect / ellipse / highlight / blur / redact / numbered step badges); pin to screen (float a capture as its own always-on-top window). Filenames include the source app name.
  • 🎥 Screen recording (Ctrl+Shift+Alt+S) — drag a region → pick audio (system / mic / both) → 3-2-1 → MP4 (H.264) to Downloads; floating bar with pause/resume; multi-monitor; system audio auto-routes through a loopback. Needs ffmpeg.
  • 🎬 Media toolsdownload YouTube / Instagram / TikTok / Facebook (video or audio — just paste a URL; Tab toggles on YouTube); audio swap (Ctrl+Shift+Alt+M) to replace or mix a video's audio with a local file or a YouTube track; trim audio/video (trim) lossless-fast or frame-accurate. Need ffmpeg / yt-dlp.
  • 💡 Monitor brightness (brightness / bri) — sliders inline in the preview (built-in and external displays); Enter to control them, ↑↓ pick a monitor, ←→ adjust. Software (gamma) dimming on macOS + Windows, hardware DDC/CI on Linux.
  • 🔊 Audio output (sound / audio) — inline picker to switch the system default output device (macOS · Windows · Linux).
  • 💡 Philips Hue (hue) — control your lamps inline: all-lamps on/off + brightness, per-lamp brightness, and 8 colour-preset swatches on colour bulbs. Plus a Beat-sync section that pulses the lamps to music from the mic. Pairs to your bridge on the LAN (discover or enter IP + link button); no cloud.
  • 🧹 Cleaning (clean) — free disk space by deleting cache/log/temp files inside known-safe folders. Dry-run preview + confirm; strict allowlist, symlinks never followed; Safe/Standard/Aggressive levels.
  • 🎨 Color picker (Ctrl+Shift+C) — NSColorSampler loupe / GDI overlay / hex straight to clipboard.
  • 📁 Finder selection actions (Ctrl+Shift+F, macOS) — multi-file batch resize / optim / cut-out / open on whatever you have selected in Finder.
  • 📄 Markdown → PDF (Ctrl+Shift+M, macOS) — converts the .md files currently selected in Finder to PDF in-process; no CLI tools required.
  • 🔐 2FA / TOTP manager — type 2fa to open the TOTP vault; type otp <issuer> for instant OTP autocomplete with live 30-second countdown.
  • 🖼️ Image tools — Recolor (logo tint), ML cut-out (U²-Net ONNX, 4.5 MB embedded), Lanczos3 resize with preset autocomplete.
  • 🔳 QR code (qr <text>) — live preview in the panel; Enter copies the PNG to the clipboard.
  • 🛠️ Dev quick-toolsuuid [n] · slug · hash (SHA-256) · json (pretty-print clipboard) · jwt (decode clipboard) → clipboard.
  • 🌐 Web-search bangsg · ddg · gh · yt · npm · crates · so · mdn · wiki <query> open a site's search.
  • 🎚️ BPM detector (bpm) — live microphone beat detection with an animated visualizer.
  • 💸 Bruno (Brutto/Netto) — German income-tax calculator 2025 as a search-bar command. Smart defaults + per-user override in Settings.
  • 🚀 App launcher (Spotlight-like, macOS) — type the start of an app name, real icon in the row, Enter launches. Activates an already-running instance instead of spawning a duplicate.
  • 🟢 Wakelock LED + status toast — pulsing red LED + wake label in the popup footer while keep-awake is on; a centred on-screen toast confirms on/off.
  • ⚙️ Power commandstr / tren / trde / trde2it / trit2de / trde2sp / trsp2de / trde2pl / trpl2de (translate via Google Translate), rz / optim / qr (image), uuid / slug / hash / json / jwt (dev tools), g / ddg / gh / yt / npm / crates / so / mdn / wiki (web search), kill / lock / reboot / shutdown / mute / freeze (system), wakelock on/off (alias caffeine on/off, keep awake — all OSes), touch / mkdir / terminal (create file/folder · open terminal in the open Finder folder), shot [n] / shotfull / shotwin / shotlast (screenshots), trim (cut audio/video), clean (free disk), brightness / bri (monitor brightness), sound / audio (output device), stats (live CPU/RAM/disk/network/temps/fans/battery), uptime (live uptime, µs-animated), meme [query] (browse & copy memes), timer, alarm <HH:MM>, rnd / random (dice roll), md2pdf [path] (Markdown→PDF), pwgen, rmvvls (text).
  • 📓 Snippets (27 bundled AI prompts) · Notes (persistent bookmarks) · Backup (single-file JSON export).
  • 🔒 Local-first — zero network calls, zero account, data only at ~/Library/Application Support/InspectorRust/history.db. Encryption keys never leave your machine.
  • 🎮 Hidden games — five Easter-egg trigger words. You'll find them.

🧰 Tech stack

Tauri 2 (WebView2 / WKWebView) · Rust workspace (core/rust-lib shared, 2-line per-OS bundle shells) · React 19 + TypeScript 5 + Tailwind v4 + Vite 7 · brightness via CoreGraphics/GDI gamma + DDC/CI (ddc-hi). 1198 unit tests (477 Rust + 721 frontend). MIT-licensed.

Lines of code

Version License: MIT CI Release Latest Release Last commit Issues Stars Maintenance Unit tests PRs welcome Code Style Downloads Code size Commit activity Top language

Windows 11 macOS Apple Silicon x86_64 Linux

Tauri 2 Rust React 19 TypeScript 5 Vite 7 Tailwind CSS v4 pnpm Node 20 SQLite ONNX Runtime Apple Vision U2Net

AES-256-GCM Keychain-backed Local-first No telemetry Offline Power user Keyboard-first

ESLint Vitest cargo test vitest cargo clippy tsc strict Prettier

Issues Closed issues PRs Stars Forks Watchers Contributors Last commit Commit activity Repo size Code size Top language Languages Made with love

Monorepo Workspace crates Single binary Native Memory Cold start MSI size DMG size exe size

Tests IPC commands Search-bar commands Tauri events Rust modules Snippets Media Motion Tabs DB tables Global shortcuts Snippet expansion modes Image formats

SemVer Keep a Changelog Conventional Commits ARIA ADRs in CHANGELOG

macOS TCC: Accessibility macOS TCC: Screen Recording macOS TCC: Automation macOS TCC: Microphone Autostart Tray icon

rusqlite enigo clipboard-rs ort ring objc2 Fuse.js lucide-react react-virtual

Inspired by Alfred Mouse-free Self-hosted Free forever Made in Germany

Press Ctrl+Space → search → paste. Inspired by Alfred's clipboard viewer on macOS, scoped to one tool you can keep on every machine.


Download

Latest release: Latest Release — see the CHANGELOG for what's new.

Platform File Notes
Windows 11 / 10 InspectorRust_<ver>_x64_en-US.msi MSI installer — adds Start-menu entry & uninstaller
Windows 11 / 10 inspector-rust.exe Standalone exe — no install needed
macOS 10.15+ (Apple Silicon) InspectorRust_<ver>_aarch64.dmg DMG for arm64 Macs
macOS Intel Build from source: macos/README.md
Linux (Ubuntu/Debian) Build from source — see linux/README.md .deb + AppImage via pnpm build:linux

macOS Gatekeeper note. Local-build releases are not Apple-signed. On first launch macOS will refuse to open the app — right-click → Open → confirm, or System Settings → Privacy & Security → "Open Anyway". Then grant the required TCC permissions:

Permission Required for
Accessibility Paste (enigo synthesizes Cmd+V), system-wide text expander, freeze input lock
Screen Recording OCR (Ctrl+Shift+O) and screenshot region (Ctrl+Shift+S)
Automation → Finder Finder selection (Ctrl+Shift+F) and Markdown→PDF (Ctrl+Shift+M)
Microphone (optional) BPM detector (bpm command)

The Settings tab surfaces missing grants as collapsible amber banners with one-click jumps to the right Privacy pane. scripts/install-macos.sh signs every build with a stable self-signed certificate so all grants survive future rebuilds — you grant each permission once. scripts/grant-permissions-macos.sh walks through the full one-time setup in a single guided pass.

Full details in macos/README.md.


Platform support

Platform Status Location
Windows 11 ✅ implemented win/
macOS ✅ implemented macos/
Linux ✅ implemented linux/

All app logic lives in core/ — a single frontend (core/frontend) and a single Rust lib (core/rust-lib) shared across platforms. Each OS has its own thin bundle shell that owns platform-specific details (installer config, icons, capabilities). To add a new platform, see CONTRIBUTING.md.

Linux port contributor credit: CONTRIBUTORS.md.

Workflow

Inspector Rust is built for one workflow: Ctrl+Space → type → Enter. The hotkey opens a frameless popup over the active monitor; whatever you type is fuzzy-searched across clipboard history, snippets, calc results, and color values; Enter pastes the top match into the previously focused app. No mouse, no menu trees, no per-app integrations.

Three more global shortcuts fire from anywhere — Inspector Rust's window doesn't need to be open or focused:

  • Ctrl+Shift+O — screen-region OCR. Drag a marquee, Apple Vision recognises the text in the region, the text lands on your clipboard + at the top of History.
  • Ctrl+Shift+S (v0.15.0+) — screen-region screenshot. Same marquee, no OCR step: the captured PNG goes straight to the clipboard and into History. Use this for charts, buttons, photos, or any region without recognisable text. Save to file: while the overlay is open, press S — the selection border turns green and after drawing the region a native save dialog appears instead of writing to the clipboard (v0.19.2+).
  • Ctrl+Shift+C (v0.17.0+)eyedropper. Cursor turns into the NSColorSampler loupe (macOS) / GDI overlay (Windows); click a pixel, the hex code (#RRGGBB) lands on your clipboard + History. No popup, no modal — fire-and-forget.

Literal Control on every OS — same key on Windows and macOS. OCR + screenshot require the macOS Screen Recording TCC grant on macOS; on Windows no extra permissions are needed.

Everything else (snippets management, notes, settings, image tools) lives in the same popup behind tabs in the top-right — there's no separate window to alt-tab to. Settings → Keyboard shortcuts carries the full cheat sheet.

Features & shortcuts at a glance

🔥🔥🔥 Global hotkeys — fire and forget, from anywhere 🔥🔥🔥

Shortcut Action Requires (macOS)
Ctrl+Space Open popup over the active monitor
Ctrl+Shift+V (v0.83.0+, configurable) Second clipboard-history hotkey — also opens the popup
Ctrl+Shift+O Screen-region OCR → text on clipboard + History Screen Recording
Ctrl+Shift+S (v0.15.0+) Screen-region screenshot → PNG on clipboard + History (no OCR); press S during overlay to save to file instead (green border) (v0.19.2+) Screen Recording (macOS)
Ctrl+Shift+Alt+S (v0.81.0+) Screen recording → region select → audio (system / mic / both) → 3-2-1 → MP4 to Downloads. Floating stop bar with pause/resume. Multi-monitor; ffmpeg Screen Recording (macOS)
Ctrl+Shift+C (v0.17.0+) Eyedropper → hex (#RRGGBB) on clipboard + History
Ctrl+Shift+F (v0.30.0+) Finder selection → popup with the currently-selected files + actions (Resize, Optim, Cut-out, …) Automation → Finder
Ctrl+Shift+M (v0.46.0+, macOS) Markdown → PDF — convert the .md files selected in Finder to PDF in-process Automation → Finder
Ctrl+Shift+Alt+M (v0.84.22+, macOS) Replace / overlay audio — select a video in Finder → overlay to swap or mix in a local audio file or a yt-dlp'd YouTube track at a chosen position Automation → Finder
Alt+1 (default, configurable, opt-in) Expand snippet abbreviation in place Accessibility
(user-configurable) Direct hotkey → snippet — paste a specific snippet body Accessibility

Literal Control on every OS. Same key on Windows and macOS. The expander hotkey is opt-in (off until you configure it in Settings → Text expander).

Popup shortcuts — when the popup is open

Shortcut Action
Navigate the list
Shift+↑ Shift+↓ (v0.22.0+) Raise / lower the system volume (±6 % per press)
Enter Paste selected entry (respects the plain-text setting)
Shift+Enter Paste with original formatting (overrides plain-text setting once)
Esc Close popup
⌘B / Ctrl+B Cut out background on the selected image entry (ML — U²-Net)
⌘S / Ctrl+S Save image to Downloads (unchanged PNG)

Full feature matrix

Feature Where to trigger Doc
Clipboard history (text/RTF/HTML/PNG/files, 1 000 entries, deduped) Ctrl+Space → search core
Fuzzy search (fuse.js, threshold 0.4) Type in the search bar core
Inline calculator Type an expression in the search bar (2+2, sqrt(9), sin(pi/2), 0xff << 4, …) core
Color converter Type #RRGGBB / rgb(…) / hsl(…) in the search bar → swatch + all formats colors.md
HSV color picker modal History tab → Color Picker button → hue slider + swatch + hex/rgb/hsl tabs colors.md
Screen eyedropper (modal) Color Picker modal → Pick from screen (macOS NSColorSampler loupe / Windows GDI overlay) colors.md
Eyedropper — global hotkey (v0.17.0+) Ctrl+Shift+C or tray Pick Color → hex direct to clipboard, no popup colors.md
Snippet search-as-you-type Type a snippet abbreviation in the popup search text-expander.md
Abbreviation expander (system-wide) Type the abbreviation in any text field → Alt+1 (default) text-expander.md
Direct hotkey → snippet (v0.13.0+) User-bound global hotkey text-expander.md
27 bundled AI prompt snippets (ai*) Snippets tab; search / abbreviation / direct-slot ai-prompts.md
Snippets CRUD + JSON import Snippets tab → form / Import button snippets-import.md
Notes — categorized persistent bookmarks Notes tab (tray: Manage Notes) notes.md
Save clip as note Hover any History row → bookmark icon notes.md
Screen-region OCR (v0.9.0+; Windows since v0.19.2) Ctrl+Shift+O or tray OCR Region core
Screen-region screenshot (v0.15.0+; Windows since v0.19.2) Ctrl+Shift+S or tray Screenshot Region core
Screenshot → save to file (v0.19.2+) Ctrl+Shift+S → press S during overlay (border turns green) → native save dialog core
Image recolor (logo tint, chromaticity-gated) Preview pane on image entry → swatch / hex core
ML background cutout (U²-Net ONNX, ~4.5 MB embedded) Preview pane → Cut out background or ⌘B core
Save image to Downloads Preview pane or ⌘S (unchanged PNG) core
Backup — export/import single-file JSON (history + snippets + notes, per-section tickable) Settings → Backup & restore backup.md
Plain-text-only paste (default on, v0.4.0+) Settings → Paste (Shift+Enter overrides for one paste) core
Autostart on login (v0.14.0+) Settings → Startup or tray checkmark core
Pause clipboard capture Tray → Pause Capture core
Clear history (with confirm) Tray → Clear History… core
AES-256-GCM at rest (all bodies) (v0.6.0+) Automatic; key in OS keychain encryption.md
Per-monitor popup placement Automatic (opens on monitor with cursor) core
Multi-tab UI Popup top-right tabs: History · Snippets · Notes · Features · Settings core
Permissions UX (TCC banners + 1 s polling + tccutil reset recovery) Settings → permissions section (macOS) core
Keyboard shortcuts cheat sheet Settings → Keyboard shortcuts (OS-adaptive glyphs) core
About dialog Settings → About core
Theme — Light / Dark / System (v0.20.0+) Settings → Appearance Three-way toggle; Light/Dark override the OS, System follows it
Power command — tren <text> (v0.18.0+) Search bar Translate text English → German (opens Google Translate in browser)
Power command — trde <text> (v0.18.0+) Search bar Translate text German → English (Google Translate)
Power command — tr <text> (v0.18.0+) Search bar Translate text → German (auto-detect source)
Power command — rz <W>x<H> (v0.18.0+) Search bar Resize clipboard image via Lanczos3 (e.g. rz 1200x800)
Power command — optim (v0.18.0+) Search bar Optimise clipboard PNG → ~/Downloads/inspector-rust-optim-<ts>.png (lossless oxipng)
Power command — rmvvls <text> (v0.18.0+) Search bar Strip vowels (aeiou + AEIOU + ä/ö/ü) → clipboard
System command — kill [-9] [pattern] (v0.19.0+) Search bar — live process picker Filter running processes, Enter → confirm → SIGTERM (or SIGKILL with -9)
System command — reboot (v0.19.0+; Linux/Windows v0.84.0) Search bar Restart the system — confirms first, no sudo (macOS Apple Events · Windows shutdown /r · Linux systemctl reboot)
System command — shutdown (v0.19.0+; Linux/Windows v0.84.0) Search bar Power off the system — confirms first, no sudo (macOS · Windows shutdown /s · Linux systemctl poweroff)
System command — lock (v0.19.0+; Linux/Windows v0.84.0) Search bar Lock the screen — instant, no confirm (macOS pmset · Windows LockWorkStation · Linux loginctl lock-session)
System command — mute (v0.23.0+; Linux/Windows v0.84.0) Search bar Toggle system mute / unmute (macOS · Windows VK key · Linux wpctl/pactl)
System command — freeze (v0.28.0+) Search bar Block keyboard + mouse — unlock with the configured chord (default i + r) — native CGEventTap, no rdev
wakelock on / wakelock off (alias caffeine on/off, v0.52.0+) Search bar Keep computer awake — pauses sleep + screen lock. macOS caffeinate; Windows SetThreadExecutionState + invisible F15 nudge; Linux X11 cursor-jiggle. A centred status toast confirms on/off
touch <name> / mkdir <name> / terminal (v0.53.0+, macOS) Search bar Create a file / folder, or open the terminal (iTerm2 → Terminal.app), in the frontmost Finder window's folder (or the Desktop). Needs Automation → Finder
Finder selection actions (v0.30.0+, macOS) Ctrl+Shift+F Popup lists the currently-selected Finder files; type rz 1200x800 to resize all selected images (writes <name>-1200x800.<ext> next to source) or optim to oxipng each PNG. Enter on a row opens the file
Resize-preset autocomplete (v0.31.0+) Type rz or rz <partial> Labelled preset rows (Full HD, HD, XGA, SVGA, …); Enter runs, Tab / → fills into the search bar before running
**`bruno <€>[m j]`** (v0.33.0+) Search bar — bruno 60000 (jährlich) or bruno 5000m (monatlich)
Screenshot preview HUD (v0.32.0+) After Ctrl+Shift+S CleanShot-X-style floating card with X / Pin / Copy / Save / Edit / Cloud buttons over the captured PNG. Pin keeps the preview across the next screenshot
Annotation editor (v0.32.0+) Preview HUD → Pencil button New window with 9 tools: Arrow / Line / Text / Rect / Ellipse / Highlight / Blur (mosaic pixelation) / Redact (opaque block) / numbered Step badge. 4 colour presets, 2–16 px stroke, ⌘Z/⌘⇧Z undo/redo, ⌘S save, Esc cancel. Save bakes to <App>-<ts>-edited.png
App-name in screenshot filenames (v0.32.0+) Automatic osascript-captured frontmost-app name baked into the saved filename: Safari-20260524-153012.png. Edited variants get -edited suffix
Power-command autocomplete (fuzzy command matching) Type a partial keyword (tre, rm, reb, bru, tim, pw, …) → suggestion row core
Markdown → PDF (v0.46.0+, macOS) Ctrl+Shift+M with .md files selected in Finder Automation → Finder
2FA / TOTP manager (v0.47.0+) Type 2fa in the search bar → Enter opens TOTP vault core
OTP autocomplete (v0.47.0+) Type otp <issuer> → live 30-second countdown + Enter copies current code core
Timer Type timer 12 (12 min) · timer 30s · timer 2h → countdown + visual/audio notification; status toast on set core
Alarm (v0.55.0+) Type alarm 3:00 / alarm 15:15 → fires at that clock time (next occurrence) core
Markdown → PDF command (v0.55.0+) Type md2pdf (file-manager selection) or md2pdf <path> → same as Ctrl+Shift+M. macOS + Windows (Windows: pass a path; Edge headless) macOS / Windows
Password generator Type pwgen or pwgen 16 → Enter copies; Alt+Enter = alphanumeric only; dict + leet modes in preview pane core
BPM detector Type bpm → Enter starts live beat detection via microphone; Enter again pins it (click-outside won't close; visualizer turns red) Microphone (macOS)
Disco — beat-sync lamps (v0.84.46+) Type disco 1 (on) / disco 0 (off) / bare disco (toggle) → mic-driven beat-sync of your Hue lamps; keeps running after the popup closes (same engine as the hue panel's Beat-sync) Microphone + Hue
Features tab History · Snippets · Notes · Features · Settings tabs; Features tab lists all shortcuts and capabilities with live hotkey display core
Overlay size setting Settings → Appearance → popup size: Small / Medium / Large core
Status toast (v0.51.0+) Centred on-screen toast confirms wakelock on/off (and other state changes) with animated ring core
Screen recording (v0.81.0+, macOS) Ctrl+Shift+Alt+S → region select → audio (system / mic / both, mic +10 dB) → 3-2-1 → MP4 (H.264) to Downloads. Floating stop bar with pause/resume. Multi-monitor; system-audio auto-routes through a BlackHole multi-output and restores after; adeclick + 256 k AAC for clean audio. Needs ffmpeg core
Replace / overlay audio (v0.84.22+, macOS) Ctrl+Shift+Alt+M — select a video in Finder → overlay to replace or mix in a local audio file or a yt-dlp'd YouTube track at a chosen start position + trim. Writes a sibling -audioswap.mp4. Needs ffmpeg (+ yt-dlp) core
Download social media (v0.84.28+) Paste / copy a YouTube / Instagram / TikTok / Facebook URL → auto-detected in the search bar or a clip → preview offers Download video (all) + Download audio (YouTube) → Downloads. Prefers H.264 so the file plays in QuickTime; on YouTube's anti-bot gate it retries with your browser cookies (Chrome/Firefox/…). Needs yt-dlp core
Trim audio / video (v0.84.28+) Type trim → pick a local file → set start/end → lossless & fast (-c copy) or frame-accurate (re-encode) → sibling -trim copy. Needs ffmpeg core
Monitor brightness (v0.62.0+) Type brightness (alias bri) → inline per-monitor slider overlay (software gamma dimming on macOS/Windows, DDC/CI on Linux) core
Audio-output picker (v0.80.0+) Type sound (alias audio) → inline picker to switch the system default output device core
Philips Hue control (v0.84.40+) Type hue → inline lamp controls in the preview: an all-lamps on/off + brightness master, plus a row per lamp with on/off, brightness (←→), and 8 colour-preset swatches (1–8) on colour bulbs. First run pairs the bridge (local SSDP discovery or manual IP → press the bridge link button → Connect); LAN-only, no Philips cloud. A Beat-sync section listens to the mic and pulses the lamps to the beat (rainbow/pulse/strobe, round-robin chase) core
Disk cleaner (v0.60.0+) Type clean (alias cleanup) → scans an allow-listed set of cache/log/temp roots → confirm → delete; Safe / Standard / Aggressive levels in Settings core
Dev quick-tools (v0.76.0+) uuid [n] · slug <t> · hash <t> · json · jwt — random UUIDs · slugify · SHA-256 · pretty-print clipboard JSON · decode clipboard JWT → clipboard core
Web-search bangs (v0.76.0+) g · ddg · gh · yt · npm · crates · so · mdn · wiki <query> → open a site's search core
QR code (v0.76.0+) qr <text> → live preview in the panel; Enter copies the PNG to the clipboard core
Inline converter (v0.76.0+) 5 km in mi · 72 f to c · 2 gb in mb · 0xff in dec · 1717000000 as date — units / number-base / epoch→ISO core
Smart preview actions (v0.76.0+) A selected text clip detects URLs / emails / phone numbers / lat,lng / short values → one-tap Open link · Compose email · Call · Open in Maps · Make QR core
Random roll (v0.68.0+) rnd / random [n] / random <min> <max> → CSPRNG roll shown in a status toast core
Second clipboard hotkey (v0.83.0+) A second configurable popup hotkey (default Ctrl+Shift+V) core
Encrypted backups (v0.79.0+) Settings → Backup → optional password (Argon2id + AES-256-GCM) backup.md
Material 3 Expressive motion (v0.84.18+) Spring popup entrance, tab/command/calc transitions, tactile button press, modal/toast springs — honours prefers-reduced-motion core
Calculator slot-machine reveal (v0.84.20+) The calc result spins its digits and settles left→right; the input + result row highlight rose like a command core
Meme picker (v0.70.0+) meme [query] browses a folder of GIFs/images and copies the selected one (animation preserved on macOS) core

Features

Clipboard core

  • Global hotkey Ctrl+Space opens the popup centered on the monitor with the cursor.
  • Captures text, RTF, HTML, images (PNG, ≤ 5 MB), and file lists via OS-native clipboard events (no polling). Image-before-files priority on macOS so Finder image-copies land as bitmaps, not paths.
  • Fuzzy search (fuse.js, threshold 0.4) ranks matches as you type. Virtualized list, per-content-type preview pane.
  • Auto-paste — Enter pastes via enigo-simulated Ctrl+V / Cmd+V into the previously focused app. Shift+Enter overrides the plain-text setting and pastes with original formatting.
  • SQLite store at %APPDATA%\InspectorRust\history.db / ~/Library/Application Support/InspectorRust/history.db. SHA-256 deduped, 1 000-entry cap.
  • AES-256-GCM at rest since v0.6.0 — text/HTML/RTF/image bodies, snippet bodies, note bodies. Key in OS keychain (Keychain / Credential Manager / Secret Service), 0600 keyfile fallback. Full reference: docs/encryption.md.
  • Time chip (v0.10.3) — the relative-time hint on each row (just now, 1h ago) becomes a tiny clickable button: hover shows both Captured and Last used absolute timestamps in a tooltip; click toggles the chip itself between relative and absolute display.

Text expander (snippets, v0.2 — system-wide v0.2.7, hotkey overhaul v0.12.0, direct slots v0.13.0)

  • In-popup expansion — type an abbreviation in the search bar; matching snippets surface above clipboard entries; Enter pastes the body.
  • Abbreviation expander — type the abbreviation in any text field, press the configured hotkey (default Alt+1, opt-in via Settings; one-click presets Alt+1 / Alt+2 / Alt+3, or record any combination), Inspector Rust replaces it in place. Three paths: AX/UIA in-place replace (native apps — no clipboard touch, no flicker, verified by re-reading the value); AX-select-then-paste-over-selection for Electron / Chromium / Mac-Catalyst apps that expose AXValue read-only (WhatsApp, Slack, Discord, VS Code — v0.12.0); and a clipboard+keystroke fallback for everything else. Diagnose button in Settings reports which path was used.
    • Why Alt+1 and not Alt+Backquote? The old default was unreachable on German ISO MacBooks (the physical ^ key reports as IntlBackslash). Digit-row keys are layout-stable everywhere. An un-customised old install is migrated to Alt+1 once on upgrade (won't clobber a value you deliberately re-pick).
  • Direct hotkey → snippet slots (v0.13.0) — bind a hotkey straight to a snippet (Settings → Direct hotkey → snippet); pressing it pastes the body at the cursor with no abbreviation typed. Reads nothing from the focused field — just writes the body to the clipboard, synthesizes paste, restores the clipboard — so it works in any app, including terminals (iTerm2, Terminal.app, …) where the abbreviation expander can't see the input line. Collisions with the popup / OCR / abbreviation hotkeys are rejected.
  • Loud on permission failure (macOS, v0.12.0) — if Accessibility isn't granted, pressing the hotkey no longer silently no-ops: Inspector Rust opens its popup, switches to Settings, and shows an amber banner with Force re-grantRestart now. (Same pattern as the OCR / paste banners. Direct slots use the same gate + banner.)
  • Snippets tab for create/edit/delete with a two-column form. JSON import via Snippets → Import (docs/snippets-import.md, themed samples in docs/examples/snippets/).
  • Works everywhere, including terminals (v0.64.0) — when the hotkey is enabled, a passive keystroke tracker remembers the abbreviation you just typed, so Alt+1 expands it from that buffer (blind-Backspace + paste) without ever reading the focused field. The AX/UIA in-place paths remain as a fallback. Image/file snippets aren't expanded (text only).
  • Full reference: docs/text-expander.md.

27 bundled AI prompt snippets (v0.5.0, reworked v0.12.0)

First-launch seeds your snippet table with ai*-prefixed prompts across programming, web, IT security, business, data, and API design (aiplan, aireview, airefactor, airegex, aisql, aitest, aimigration, aithumb, aithreat, aipentest, aibrief, aiml, aiapi, …). Each prompt is the structured-instruction half only — no [REQUIREMENT]-style fill-in slots (removed in v0.12.0). You append it to your own prompt / code / context and the LLM picks up the subject from there. Idempotent (deleted prompts stay deleted), restorable from the Snippets sidebar — existing installs click Restore defaults to pick up the v0.12.0 style. Full list: docs/ai-prompts.md.

Inline calculator (v0.2.5)

Type a math expression in the search field, the result appears as the top list item — Alfred-style. Press Enter to paste it.

  • Operators + - * / % ^, unary +/-, parens. Numbers: int/decimal/scientific/1_000-grouped. Constants: pi/π, tau, e. Functions: sqrt, cbrt, abs, sign, floor/ceil/round, ln/log/log2, exp, trig + hyperbolic + inverse, min/max/pow/mod.
  • Gated to expressions with at least one operator/function/constant — plain numbers and text don't trigger. Force-evaluate a literal with = prefix (=pi).
  • Safe recursive-descent parser in calc.ts, no eval. 27 tests.

Color tools (v0.4.0 → v0.5.2)

  • Inline hex preview — type #3366FF (also 3366ff, #abc, #abcdef12) → swatch + hex + RGB row at top → Enter pastes uppercase #RRGGBB.
  • HSV picker modal — hue slider, big swatch, output tabs for hex / RGB / HSL, two-click selection (no silent default), copy via Tauri clipboard plugin (sidesteps WKWebView restrictions).
  • Pick from screen — sample any pixel on the desktop. macOS: Apple's NSColorSampler magnifier loupe. Windows: fullscreen overlay + GetPixel. Module: screen_picker.rs.
  • Frontend in colors.ts + ColorPickerModal.tsx. 32 tests. Reference: docs/colors.md.

Screen-region OCR (v0.9.0, macOS)

Press Ctrl+Shift+O (or use the tray's OCR Region entry) → drag a marquee over any text on screen → Inspector Rust runs Apple Vision over the selection and writes the recognized text straight to your clipboard. The text also lands at the top of History; the source PNG is kept as a separate image entry just below, so you can re-OCR a different region without rescreenshotting and pressing Enter on the auto-selected top entry pastes the text, not the screenshot (ordering fixed in v0.14.2). The hotkey is literal Control on macOS too (v0.14.1+ — earlier builds used ⌘⇧O which collided with IDE bindings).

  • Region picker — uses screencapture -i (the same binary as Cmd+Shift+4), so the marquee UX is the polished one users already know. Esc cancels cleanly.
  • Engine — Vision's VNRecognizeTextRequest with accuracy=Accurate + language correction; same engine that powers Apple Live Text. No model bundling, no network.
  • Languages — whatever your macOS Vision install supports (Latin + CJK + Arabic + Cyrillic on macOS 13+).
  • Windows (v0.19.2+) — implemented via WinRT Windows.Media.Ocr + Windows.Graphics.Imaging. Uses the language packs already on your Windows install (Settings → Time & Language → Language); no extras needed. COM is initialised per-thread on the worker; blocking .get() calls keep the pipeline synchronous.
  • Modules: region_picker.rs, ocr.rs.

Image tools — recolor + ML cutout + save (v0.7.0 → v0.10.x)

On selected image entries, the preview pane exposes three actions:

  • Recolor (v0.7.0) — for mostly-grayscale PNGs (logos / icons / silhouettes), 9 preset swatches + custom hex tint the image. RGB lerps from target → white by per-pixel luminance, alpha preserved. Saturated photos are auto-hidden from the toolbar (chromaticity gate). Adds the tinted version as a new history entry; original stays.
  • Cut out background (v0.10.0) — runs the U²-Net (U2Netp) ONNX model (~4.5 MB embedded) over the image to detect the foreground subject; output is a transparent PNG saved to ~/Downloads/<name>-cutout-<ts>.png. Shortcut Cmd/Ctrl+B. Works on real photos (airplane in sky, person against cluttered background, …) — same architecture as Python's rembg, just without Python. Inference runs via ort (ONNX Runtime, statically linked into the binary).
  • Save to Downloads (v0.10.1) — drop the selected image entry to disk as ~/Downloads/inspector-rust-image-<ts>.png unchanged. Shortcut Cmd/Ctrl+S. Companion to recolor: select the freshly-tinted history entry, hit Cmd+S, your file is in Downloads.
  • Inputs: PNG, JPEG, WebP, GIF, BMP — for clipboard image entries and single-file Files entries (so a JPG copied from Finder works too). Output is always RGBA PNG.
  • Modules: recolor.rs, cutout_ml.rs. Legacy chroma-key cutout in cutout.rs is kept as a fast-path option but unused by default. 16 MP cap on inputs. Bundled model: core/rust-lib/models/u2netp.onnx (Apache-2.0).

Notes (v0.2.6)

Persistent, categorized clipboard items in a separate SQLite table — not subject to the 1 000-entry pruning.

  • Bookmark from history — hover any row → bookmark icon → entry lands in Notes/Uncategorized. Decoupled from the source clip; survives pruning.
  • Notes tab — three panes: categories sidebar (with counts; virtual All / Uncategorized), list, detail/edit. Free-form categories (<datalist> autocomplete). Editable bodies for text/HTML/RTF; image/files notes are read-only. Per-row delete + Clear All with confirm.
  • + New Note for from-scratch entries. Tray shortcut: Manage Notes opens the popup directly here.
  • Reference: docs/notes.md.

Backup — single-file JSON export/import (v0.2.6+)

Settings tab → Backup & restore → tick history / snippets / notes individually → Export to a JSON file. Import merges back: snippets upsert by abbreviation, history upserts by SHA-256, notes append. Versioned schema — newer backups are refused rather than silently truncated. Reference: docs/backup.md.

Plain-text paste (default on, v0.4.0)

HTML / RTF clipboard entries are stripped to their text preview at paste time, so copy-from-Word / browser / mail no longer leaks styling into other apps. Toggle in Settings → Paste. Shift+Enter in the popup overrides for one paste.

Permissions UX (v0.11.0)

Inspector Rust uses four independent macOS TCC surfaces. The Settings tab surfaces each as a collapsible amber banner:

Permission Enables Banner shown when missing
Accessibility Paste, text expander, freeze On every paste attempt + expander hotkey
Screen Recording OCR (Ctrl+Shift+O), screenshot (Ctrl+Shift+S) When OCR or screenshot is attempted
Automation → Finder Finder selection (Ctrl+Shift+F), Markdown→PDF (Ctrl+Shift+M) When hotkey is pressed without grant
Microphone BPM detector (bpm) When BPM mode is activated

Each banner:

  • Stays loud (border + warning icon + primary Open System Settings button) when missing, but collapses to a single row by default so the page is not cluttered.
  • Pre-checks before invoking the relevant native call. OCR returns a screen.permission_denied sentinel rather than failing silently; a Tauri event opens the popup and flips the banner to point at the right Privacy pane.
  • Polls the grant once per second while not granted, so the badge flips green ~1 second after the user toggles the System Settings switch — no panel reload needed.
  • Has a tccutil reset recovery button for the "toggle says on but the running process still sees denied" stale-cdhash state.

scripts/install-macos.sh signs every build with a stable self-signed certificate so grants survive rebuilds. scripts/grant-permissions-macos.sh provides a one-pass guided setup for all four permissions. Full details: macos/README.md.

Discoverability (v0.10.7)

  • Footer hints⌃⇧O OCR + ⌃⇧S Shot + ⌃⇧C Color rendered next to the ⏎ Paste · ↑↓ Navigate · Esc Close strip so users see all global shortcuts every time they open the popup.
  • Settings → Keyboard shortcuts — three-group cheat sheet (Global / Popup nav / Image actions) covering every shortcut the app binds. Modifier glyphs ( vs Ctrl, vs Shift, vs Alt) adapt to the running OS via the IS_MAC helper in core/frontend/src/lib/platform.ts.
  • About dialog — Settings → About opens a modal with version, license, year, target audience, and a tabular tech-stack overview.

Screenshots — capture modes, preview HUD, editor, pin (v0.32.0 → v0.59.0)

  • Capture modes — region (Ctrl+Shift+S / shot [n]), full-screen (shotfull), active window (shotwin), and repeat-last (shotlast). shot 3 adds a 3-second self-timer. All modes feed the same preview HUD. macOS uses screencapture, Windows a GDI blit, Linux grim/scrot.
  • CleanShot-X-style HUD — the captured PNG floats as the background of a small dark card with: X (discard), Pin (keep preview across next screenshot), Copy + Save + Pin to screen (centre pills), Pencil (open editor).
  • App-name baked into filename — the frontmost app is read before the region picker fires; saved file becomes Safari-20260524-153012.png. Edited variants use -edited.
  • Annotation editor — Pencil opens a separate Tauri window with nine tools: Arrow / Line / Text / Rectangle / Ellipse / Highlight / Blur (mosaic, samples the source so undo is non-destructive) / Redact (opaque block) / Step (auto-numbered badges). 4 colour presets, 2–16 px stroke. Hotkeys: ⌘Z/⌘⇧Z undo/redo, ⌘S save, Esc cancel, single-key tool switches (A/L/T/R/E/H/B/X/N). Full-resolution canvas. Geometry lives in a pure, unit-tested module.
  • Pin to screen — float a capture as its own persistent, draggable, always-on-top window; multiple pins coexist, close per pin. (Distinct from the HUD's Pin toggle, which only keeps the preview across the next shot.)

Media tools — record · download · trim · swap (v0.81.0 → v0.84.x, ffmpeg)

  • Screen recording (Ctrl+Shift+Alt+S, macOS) — region select → pick audio (system / mic / both, mic boosted +10 dB) → 3-2-1 countdown → MP4 (H.264) to Downloads, with a floating stop bar that pauses/resumes (segment + lossless concat). Multi-monitor (records the screen under the cursor). System audio auto-routes through a BlackHole multi-output device and restores your default afterwards; the captured audio is de-clicked (adeclick), time-corrected (atempo), and encoded at 256 k AAC / 48 kHz. The arg builders + audio-sync math are pure and unit-tested.
  • Replace / overlay audio (Ctrl+Shift+Alt+M, macOS) — select a video in Finder → an overlay to replace the audio track or mix a new one over it, at a chosen start position with optional trim and per-track volume. The new audio is a local file or a yt-dlp'd YouTube track. Video is stream-copied (fast/lossless), output is a sibling -audioswap.mp4.
  • Download social media — paste/copy a YouTube / Instagram / TikTok / Facebook URL; it's auto-detected (in a clip or the search bar) and the preview offers Download video (all) + Download audio (YouTube). H.264 is preferred so files play in QuickTime; on YouTube's "confirm you're not a bot" gate it transparently retries with your browser cookies (Chrome / Firefox / Brave / Edge). Files land in ~/Downloads with the download timestamp (so they sort newest-first). Powered by yt-dlp.
  • Trim (trim command) — pick a local audio/video file, set start/end on a timeline, and cut it lossless & fast (-c copy, snaps to keyframes) or frame-accurate (re-encode). Saves a sibling -trim copy.

Meme library (v0.70.0) — type meme [query]

meme [query] fuzzy-browses a folder of GIFs/images, shows an animated preview, and copies the selected one to the clipboard on Enter (as a file-URL on macOS, so the animation is preserved when you paste into a chat). The folder is not bundled into the app — point it at your own collection, or grab the curated starter pack below.

📦 Download the starter pack: inspector-rust-memes.zip (~126 MB, 351 reaction GIFs in 14 categories) — also browsable in the repo under memes/.

Install (3 steps):

  1. Download inspector-rust-memes.zip from the latest release (or copy the memes/ folder from a repo clone).
  2. Unzip it — it expands to a memes/ folder with category subfolders (feels/, deal-with-it/, …).
  3. Put it where the app looks, either:
    • Default path (recommended — enables the animated preview): move the contents so they live at
      • macOS / Linux: ~/My Drive/media/memes
      • Windows: %USERPROFILE%\My Drive\media\memes (or G:\My Drive\media\memes if Google Drive runs in streaming mode)
    • Any path: drop the folder anywhere and set it in Settings → Meme library (or leave the field blank to reset to the default). A custom folder still lists + copies fine; the animated in-app preview only renders inside the default path (asset-protocol scope).

Then open the popup and type meme (optionally meme cat to filter). Subfolder names become categories; the file name (minus extension) is the searchable label. Supported: gif · png · jpg · jpeg · webp · bmp · apng. The whole feature can be compiled out with pnpm build:{macos,win,linux}:nomeme.

Finder selection actions (v0.30.0, macOS)

  • Ctrl+Shift+Fosascript reads the current Finder selection (with TCC Automation → Finder grant, prompted on first use). The popup opens with the selected files listed at top, each with a finder chip.
  • Multi-file rz — typing rz 1200x800 in finder-mode resizes every selected image, writes <name>-1200x800.<ext> next to source (format preserved). Originals untouched.
  • Multi-file optim — same shape: oxipng every selected PNG, writes <stem>-optim.png next to source. Non-PNG selections are skipped (oxipng-only).
  • Permission via Settings — the macOS permissions card has three rows (Accessibility · Screen Recording · Automation → Finder); "Set up permissions" chains all three with one click via tccutil reset + re-prompt.

Bruno — Brutto/Netto-Rechner (v0.33.0)

  • Command — type bruno 60000 (yearly) or bruno 5000m (monthly) in the search bar. Result row shows net / month + net / year inline; preview-pane shows full split (KV / PV / RV / AV + ESt / Soli / Kirche + Abgabenquote + Grenzsteuersatz).
  • Smart defaults — Steuerklasse I, NRW, 0 Kinder, kein Kirchensteuerpflichtig, TK-Niveau 2,45 % KV-Zusatz. Override per user in Settings → Bruno (persisted via SQLite settings table; bruno-defaults-changed event refreshes the popup without restart).
  • Steuerjahr 2025 — §32a EStG tariff (simplified), Grundfreibetrag 12.096 €, Beitragsbemessungsgrenzen KV 66.150 € / RV 96.600 €. Ported from the maintainer's steuerschleuder web app.
  • Pure-TS compute — no IPC round-trip per keystroke. Number-format-tolerant parser (bruno 60.000 = bruno 60,000 = bruno 60000). 32 unit tests pin the compute + parser. ⚠️ Simplified — no Faktorverfahren, no individual Freibeträge. Keine Steuerberatung.

freeze (v0.28.0)

  • Native macOS CGEventTap (raw FFI on ApplicationServices + CoreFoundation) blocks all keyboard + mouse input until the configured unlock chord (default i + r) is pressed. Installed on the main run loop via CFRunLoopGetMain() — worker-thread variants silently failed to drop events on Sonoma+.

wakelock / caffeine (v0.29.0 · on/off syntax v0.52.0)

  • Type wakelock on to keep the machine awake, wakelock off to stop. caffeine on/off is an alias. (The old wakelock=1/=0 syntax was retired in v0.52.0.) Keep-awake pauses sleep + the screen lock, defeating Teams / Slack / Discord "away" detection and screensaver/lock idle timers. Per-platform mechanism: macOS spawns caffeinate -disu (real IOPM assertions); Windows uses SetThreadExecutionState plus an invisible F15 keypress every 30 s (so the screensaver/lock idle timer is reset, not just power-sleep); Linux X11 jiggles the cursor (Wayland: no-op). Toggling closes the popup and plays a centred status toast confirming the new state.

touch / mkdir / terminal (v0.53.0, macOS)

  • With a Finder window open, type touch <name> to create an empty file, mkdir <name> to create a folder, or terminal to open a terminal — all in that window's current folder (or the Desktop if no window is open — Finder's insertion location). touch/mkdir reveal/select the new item in Finder; names are sanitised (no /, ., ..). terminal prefers iTerm2 if installed, falling back to Terminal.app. All need the Automation → Finder TCC grant (same as Finder selection).

System tray + multi-monitor

  • Tray menu: Open · Manage Snippets · Manage Notes · OCR Region (Ctrl+Shift+O) · Screenshot Region (Ctrl+Shift+S) (v0.15.0+) · Pick Color (Ctrl+Shift+C) (v0.17.0+) · Pause Capture · ☑/☐ Start with Windows / Start at Login (checkmark reflects state since v0.14.0) · Clear History · Quit.
  • Autostart on login (v0.14.0) — toggle in Settings → Startup, or from the tray menu. macOS writes ~/Library/LaunchAgents/InspectorRust.plist; Windows uses the run-key registry entry. App launches hidden in the tray so it's ready when the popup hotkey hits.
  • Multi-monitor placement: popup opens on the monitor with the cursor, horizontally centered, ~⅓ from the top, clamped to the active monitor's bounds (matters on mixed-DPI setups).

Repository layout

inspector-rust/
├── core/
│   ├── frontend/            # React 19 + TS + Tailwind v4 (cross-platform)
│   │   └── src/
│   │       ├── components/  # SearchBar, HistoryList/Item, PreviewPanel, SnippetsPanel, NotesPanel, …
│   │       ├── hooks/       # useClipboardHistory, useFuzzySearch, useSnippets, useNotes, useKeyboardNav
│   │       └── lib/         # ipc.ts, types.ts, calc.ts (Alfred-style evaluator), format.ts
│   └── rust-lib/            # Shared Rust app logic
│       ├── build.rs         # Links the macOS Vision framework for OCR
│       ├── models/
│       │   └── u2netp.onnx  # U²-Net cutout model (~4.5 MB, Apache-2.0)
│       └── src/
│           ├── lib.rs                # Tauri builder, plugin/tray setup, invoke_handler
│           ├── commands.rs           # all #[tauri::command] wrappers
│           ├── models.rs             # ContentType / ClipEntry / NewClip + caps
│           ├── db.rs                 # entries table, hash-dedup, prune
│           ├── crypto.rs             # AES-256-GCM at-rest encryption + OS-keychain key
│           ├── snippets.rs           # snippets table, JSON upsert, exact-abbreviation lookup
│           ├── seed.rs               # default AI-prompt snippets — first-launch seeder + `Restore defaults` IPC
│           ├── seed/
│           │   └── ai_prompts.json   # 27 bundled AI prompts (~35 KB) — read at compile time via include_str!
│           ├── notes.rs              # notes table, categories, save_from_clip
│           ├── backup.rs             # full-app export/import (versioned JSON)
│           ├── settings.rs           # key/value store (expander hotkey + future prefs)
│           ├── ui_state.rs           # suppress_hide flag for native-modal interaction
│           ├── expander.rs           # trigger-based text expander (AX/UIA primary, clipboard fallback)
│           ├── text_field/           # FieldAccess trait + macOS AX + Windows UIA implementations
│           ├── paste.rs              # write_to_clipboard + enigo paste shortcut
│           ├── hotkey.rs             # global Ctrl+Space + Ctrl+Shift+O + Ctrl+Shift+S + Ctrl+Shift+C + expander hotkey + direct slots
│           ├── clipboard_watcher.rs  # event-driven capture, RTF stripping (image > files priority)
│           ├── recolor.rs            # image tint (lerp target ↔ white by per-pixel luminance)
│           ├── cutout.rs             # legacy chroma-key cutout (kept as fast-path option)
│           ├── cutout_ml.rs          # U²-Net-based subject cutout via `ort` (ONNX Runtime)
│           ├── image_ops.rs          # `rz` resize (Lanczos3) + `optim` PNG optimise (oxipng)
│           ├── system_commands.rs    # `kill` / `reboot` / `shutdown` / `lock` (sysinfo + osascript)
│           ├── screen_picker.rs      # color eyedropper (NSColorSampler / GDI overlay)
│           ├── region_picker.rs      # screencapture -i (macOS) / GDI overlay (Windows) — OCR + screenshot
│           ├── ocr.rs                # Apple Vision (macOS) / Windows.Media.Ocr (Windows) wrapper
│           └── screen_recording.rs   # macOS Screen Recording TCC permission API — gates OCR + screenshot
├── win/                     # Windows-specific bundle shell
│   ├── README.md            # Windows install & build details
│   ├── package.json         # Tauri CLI entry
│   └── src-tauri/           # main.rs, Cargo.toml, tauri.conf.json, capabilities/, icons/
├── macos/                   # macOS-specific bundle shell
│   ├── README.md            # macOS install, Gatekeeper, Accessibility, troubleshooting
│   ├── package.json
│   └── src-tauri/           # entitlements.plist, tauri.conf.json (dmg+app), capabilities/
├── .github/
│   └── workflows/
│       ├── ci.yml           # Rust + frontend tests on every push/PR
│       └── release.yml      # Builds bundles and publishes GitHub Release on v* tags
├── docs/
│   ├── spec.md              # Original product specification
│   ├── snippets-import.md   # JSON snippet import — schema, semantics, examples
│   ├── notes.md             # Notes feature — categories, edit semantics, IPC surface
│   ├── backup.md            # Full-app export/import — schema, merge semantics, jq recipes
│   ├── text-expander.md     # System-wide expander — workflow, hotkey format, per-OS caveats
│   ├── colors.md            # Inline hex preview + custom HSV picker + system eyedropper
│   ├── ai-prompts.md        # 27 bundled default AI prompt snippets
│   ├── encryption.md        # AES-256-GCM at-rest encryption — threat model, key storage, migration
│   ├── RELEASING.md         # Release procedure
│   ├── ir-w1024.png         # Brand artwork — README hero + inline image (1024×1024, ~1.9 MB)
│   └── examples/
│       └── snippets/        # 5 themed JSON examples + their own README
├── memes/                   # Starter meme pack — 351 reaction GIFs in 14 category folders (also the v* release's inspector-rust-memes.zip)
├── scripts/
│   ├── check.sh                      # cargo clippy + tsc + eslint
│   ├── install-macos.sh              # idempotent build + stable-cert re-sign + install (preserves TCC grants across rebuilds)
│   └── grant-permissions-macos.sh   # guided one-pass TCC permission setup for all four macOS permissions
├── Cargo.toml               # Rust workspace (members: core/rust-lib, win/src-tauri, macos/src-tauri)
├── pnpm-workspace.yaml      # pnpm workspace (core/frontend, win, macos)
└── package.json             # Root scripts: dev:{win,macos}, build:{win,macos}, lint, typecheck, format, test, check

Quick start

Prerequisites

Tool Version Notes
Rust stable MSVC toolchain on Windows; run rustup component add clippy
Node.js 20+
pnpm 10+ npm install -g pnpm

Platform-specific prerequisites:

Install & run

pnpm install          # install the whole workspace (CI uses --frozen-lockfile)

# Windows
pnpm dev:win          # tauri dev — live-reload
pnpm build:win        # → target/release/bundle/msi/InspectorRust_x.x.x_x64_en-US.msi

# macOS
pnpm dev:macos                      # tauri dev — live-reload
pnpm build:macos                    # → target/release/bundle/{macos/InspectorRust.app, dmg/InspectorRust_x.x.x_<arch>.dmg}
bash scripts/install-macos.sh             # build + re-sign (stable cert) + install + launch
bash scripts/install-macos.sh --reset    # …also tccutil-reset stale TCC grants
bash scripts/grant-permissions-macos.sh  # one-pass guided setup for all four TCC permissions

Why the install-macos.sh helper? Without an Apple Developer ID, every fresh pnpm build:macos is ad-hoc-signed with a new cdhash, which makes macOS TCC invalidate all previous grants on rebuild. The script creates a stable self-signed certificate (once) and signs every build with it — TCC keys the grant to the Designated Requirement (bundle id + cert hash), not the cdhash, so all four permission grants survive every future rebuild. Full background: macos/README.md — macOS permissions.

Each platform must be built on its native host (Windows for MSI, macOS for DMG/.app). Cross-compilation is not supported.

Snippet import

In Inspector Rust: open the popup (Ctrl+Space) → Snippets tab → Import → pick a .json file. The native file picker opens (NSOpenPanel on macOS, OpenFileDialog on Windows); existing abbreviations are upserted in place so re-importing the same file is idempotent.

Ready-to-import samples in docs/examples/snippets/:

File Snippets Theme
getting-started.json 3 Address, email, German signature — first-import test
signatures.json 4 Email signatures (DE/EN, short, OOO template)
dev.json 8 Shebang, MIT header, fn skeletons, gitignore, commit-msg
markdown.json 5 Headings, table, <details>, PR-body
wrapped-form.json 2 Demonstrates { "snippets": [...] } shape

See docs/snippets-import.md for the full schema, field semantics, the sqlite3+jq export recipe, and tips/anti-patterns.

Notes & Backup

Notes have their own tab; the categories sidebar has + New Note and Clear All. Backup lives in the Settings tab now.

  • Save a clipboard entry as a note: hover any History row → click the bookmark icon → the entry lands in the Uncategorized bucket of the Notes tab. Move it to a category by editing the note.
  • Export full backup: Settings tab → Backup & restore → tick what to export (Clipboard history / Snippets / Notes — all default on) → Export… → choose a path. Inspector Rust writes a single JSON file (default name inspector-rust-backup-<timestamp>.json); unticked sections are written as empty arrays so you can share snippets without leaking your clipboard.
  • Import a backup: Settings tab → Backup & restoreImport… → pick the JSON file. Snippets and history merge by their natural keys (abbreviation / SHA-256 hash); notes are appended. Notes / Snippets / History tabs auto-refresh.

Full feature reference: docs/notes.md. Backup file schema and merge semantics: docs/backup.md.

Tests

pnpm test               # frontend unit tests (vitest + happy-dom) — 721 tests
cargo test --workspace  # Rust unit tests — 477 tests (hue, db, snippets, notes, backup, settings, expander, text_field, seed, hotkey parser, clipboard_watcher, models, recolor, cutout, cutout_ml, screen_record, audio_swap, media_trim, social_dl, audio, …)

The same commands run in GitHub Actions CI on every push and PR.

Static analysis

pnpm check            # cargo clippy (workspace) + tsc --noEmit + eslint

Known limitations

Limitation Detail
At-rest encryption scope Sensitive content (clipboard text/HTML/RTF/images, snippet bodies, note bodies) is AES-256-GCM encrypted at rest with a per-install random 256-bit key (v0.6.0+). Key lives in the OS keychain; falls back to a 0600 keyfile in the data dir if the keychain is unavailable. Not encrypted: timestamps, content-type tags, dedup hashes, snippet abbreviations, note titles/categories — none of those reveal clipboard content. Full reference: docs/encryption.md.
No sensitive-app detection Inspector Rust captures everything without filtering.
No cloud sync No automatic sync or multi-device support — but the Backup export/import gives you a portable JSON file you can move between machines manually.
File paste fallback Setting file-list clipboard payloads from Rust is not universally supported; Inspector Rust falls back to pasting the newline-joined list of paths as text.
Expander in terminals: use a direct slot The abbreviation expander does nothing on a terminal command line (Terminal.app, iTerm2, kitty, …) — terminals don't expose the input line via accessibility and a shell prompt has no GUI "select previous word". Use a Direct hotkey → snippet slot there (v0.13.0 — pastes without reading anything, works everywhere) or the popup (Ctrl+Space → search → Enter). Electron / Chromium / Mac-Catalyst apps (WhatsApp, Slack, VS Code, …) are supported by the abbreviation expander as of v0.12.0, via an AX-select-then-paste path.
macOS Accessibility Paste simulation (enigo), the system-wide text expander, and freeze require Accessibility access. Grant it once in System Settings → Privacy & Security → Accessibility; after granting, restart Inspector Rust once (the Settings tab offers a one-click relaunch). If missing, an amber banner appears on the next paste attempt or expander hotkey press.
macOS Screen Recording OCR (Ctrl+Shift+O) and screenshot region (Ctrl+Shift+S, v0.15.0+) both require Screen Recording access — screencapture -i is attributed to Inspector Rust and macOS denies it without the grant. Pre-checked via CGPreflightScreenCaptureAccess; missing permission opens the popup + shows an amber banner pointing to the right Privacy pane (v0.11.0). The eyedropper (Ctrl+Shift+C) does not need Screen Recording.
macOS Automation → Finder Finder selection (Ctrl+Shift+F) and Markdown→PDF (Ctrl+Shift+M) send Apple Events to Finder. The first use triggers the Automation prompt; click Allow.
macOS unsigned build Release builds are not notarized. macOS may warn "unidentified developer" — right-click the app and choose Open to bypass Gatekeeper on first launch.
macOS rebuild ⇒ re-grant (mitigated) Plain ad-hoc builds change the cdhash on every rebuild, which would invalidate TCC grants. scripts/install-macos.sh signs with a stable self-signed certificate keyed to the bundle id — TCC grants survive every future rebuild. One re-grant is needed when first switching from a plain build to the install-script workflow. Full details: macos/README.md.
Windows OCR language packs Windows OCR (Windows.Media.Ocr) uses the language packs installed in Settings → Time & Language → Language. If none is installed for the on-screen text, the engine will fail with a descriptive error. Add the relevant pack in Windows Settings and retry.
Linux: Wayland shortcuts & tooling Tauri global shortcuts often don't receive key events under GNOME/Wayland — Inspector Rust auto-registers GNOME/Cinnamon gsettings custom keybindings on first start (CLI flags --toggle-popup / --ocr / --screenshot / --pick-color). Region capture needs grim+slurp (Wayland) or scrot (X11); OCR needs tesseract + language packs. The eyedropper and the in-place AX expander are not yet available on Linux (clipboard-paste fallback). Details: linux/README.md.

Contributing

Contributions welcome — see CONTRIBUTING.md for the dev workflow, code style, and how to add IPC commands or new platform shells.

Releasing

Push a v* tag to trigger the release workflow, which builds the Windows, macOS, and Linux bundles and attaches them to a GitHub Release. Full procedure (version bumps, pre-flight checks, troubleshooting) in docs/RELEASING.md.

Changelog

See CHANGELOG.md — every release is documented with what was added, fixed, and any known issues at the time.

Developers

  • Martin Pfeffer — author & maintainer
  • Kudos 2 Daniel

License

MIT — © 2026 Martin Pfeffer

A private open-source side project — built on weekends and evenings, made with ❤️.

Brewed and shipped from Berlin 🍻

About

Keyboard-first clipboard hyper-toolkit for power users: history, snippets, text expander, screen OCR, region screenshot, inline calculator, color picker, image recolor + ML background cutout. macOS + Windows. Native (Tauri 2 + Rust + React), local, AES-256 encrypted at rest, MIT.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors