A powerful screenshot capture and editing app built with Electron and React. X‑Shot lives in your system tray, lets you capture any screen or window, and includes advanced editing with PII masking, text detection (OCR), and polished presentation exports.
- Instant capture: Global hotkey (default: CommandOrControl+Shift+1) and tray menu
- Selection + recapture: Area selection overlays with optional recapture of last area
- Advanced editing: Rectangle, ellipse, arrow, freehand pen, and text tools
- PII masking: Automatic detection plus manual masking of sensitive data
- Text detection (OCR): Extract text from screenshots using Tesseract.js
- Presentation mode: Background gradients/images, padding, radius, shadows, and aspect presets
- Export options: Copy to clipboard or save to file (configurable filename pattern and scale)
- Multi-display support: Capture from any connected display or app window
- Preferences: Hotkeys (including delayed capture), exports, editor defaults, privacy, and tray visibility
- Node.js >= 14 and npm >= 7 (see
package.jsondevEngines) - macOS, Windows, or Linux
git clone https://github.com/WHEREISDAN/x-shot.git
cd x-shot
npm installStart in development with HMR:
npm startHelpful scripts:
npm run start:main # Watch/rebuild main process with auto-restart
npm run build # Build main and renderer for production
npm test # Run Jest tests (jsdom)
npm run lint # ESLint checks
npm run lint:fix # ESLint with auto-fixnpm run packageOutput is written to release/build/ for your platform.
- Launch the app. X‑Shot runs in the system tray.
- Press the global hotkey (default: CommandOrControl+Shift+1) or use the tray menu to start a capture.
- Select the area or window to capture using the fullscreen overlay.
- Edit in the editor window: annotate, mask PII, enable presentation mode, etc.
- Export by copying to clipboard or saving to a file.
- Main capture: CommandOrControl+Shift+1 (default; override via env
XSHOT_HOTKEYor Preferences) - Delayed capture: Optional 3s/5s hotkeys (configure in Preferences)
- Recapture last selection: Optional hotkey to repeat the prior area
X‑Shot follows Electron’s two‑process model with strict boundaries:
- Main (
src/main/): App lifecycle, tray, menu, hotkeys, screenshot pipeline, file/clipboard, IPC handlers - Preload (
src/main/preload.ts): Secure bridge (contextIsolation on;window.electronAPI only) - Renderer (
src/renderer/): React UI with routes/(editor),/screenshot(overlay),/preferences
Typed IPC channels live in src/shared/ipc-types.ts and are used across main, preload, and renderer.
- Hotkey override:
XSHOT_HOTKEYenvironment variable sets the default accelerator - Preferences: Persisted app settings for capture, editor, export, system/tray, PII, and presentation
- Electron, electron-builder, electron-log
- React 19, React Router, TypeScript
- Webpack 5 (separate configs for main/renderer/preload)
- Jest + ts-jest (jsdom)
- Tesseract.js (OCR)
- Issue tracker:
https://github.com/WHEREISDAN/x-shot/issues - Repository:
https://github.com/WHEREISDAN/x-shot - Author:
https://www.whereisdan.dev
MIT
0 comments
log in to comment.