A lightweight, feature-rich screenshot application built with Wails (Go + React). Capture, annotate, and export screenshots with a beautiful glassmorphism UI.
90% smaller than Electron (~10MB) | Native performance | Rich annotation tools
- Fullscreen - Capture all displays in one image
- Region - Drag to select custom rectangle
- Window - Automatically detect and capture active window
- Hotkey Triggered - Global shortcuts (Ctrl+PrintScreen, etc.)
- Shapes - Rectangle, ellipse (with fill/stroke control)
- Arrows & Lines - Directional callouts and custom lines
- Text - Add text with customizable font, size, color, alignment
- Numbers - Auto-incrementing numbered markers for step-by-step callouts
- Spotlight - Highlight areas by dimming surroundings
- Transforms - Move, resize, rotate all elements
- Non-destructive - Edit or delete annotations anytime
- Non-destructive cropping - Adjust bounds without losing data
- Aspect ratio presets - Free, 16:9, 4:3, 1:1, 9:16, 3:4
- 24 gradient backgrounds - Vibrant glassmorphism presets
- Real-time preview - See changes instantly
- Settings persistence - Editor preferences saved across sessions
- Formats - PNG (lossless) and JPEG (with quality slider)
- Output ratios - 9 presets for different platforms
- Quick Save - Save to configured folder with auto-naming
- Background control - Include or exclude gradient backgrounds
- System tray - Icon in taskbar for quick access
- Global hotkeys - Customizable keyboard shortcuts
- Auto-start option - Launch on Windows startup
- Minimize to tray - Keep window out of the way
[Screenshots section - placeholder for visual examples]
Coming soon. See GitHub releases for previews.
- Download
winshot.exefrom GitHub Releases - Run directly - no installation required
- Optionally pin to taskbar or create shortcut
Requirements:
- Windows 10 or later
- WebView2 runtime (pre-installed on Windows 11, automatic install on Windows 10)
- Download
winshot_installer.exefrom GitHub Releases - Run installer and follow prompts
- Shortcuts created in Start menu and optional desktop
- Launch WinShot (portable EXE or via Start menu)
- Capture screenshot using one of:
- Click toolbar buttons (Fullscreen, Region, Window)
- Press global hotkey (default: Ctrl+PrintScreen for region)
- Right-click system tray icon
- Annotate (optional):
- Select annotation tool from toolbar
- Draw on screenshot
- Adjust colors and stroke width
- Crop (optional):
- Switch to crop mode
- Select desired area and aspect ratio
- Export:
- Choose PNG or JPEG format
- Click Export or Quick Save
- Confirm location (or auto-save to configured folder)
Global Hotkeys (Customizable):
| Shortcut | Action |
|---|---|
Ctrl+PrintScreen |
Region capture (default) |
PrintScreen |
Fullscreen capture |
Ctrl+Shift+PrintScreen |
Window capture |
Customizable in Settings → Hotkeys
Editor Shortcuts (App Window):
| Shortcut | Action |
|---|---|
V |
Select tool (pointer/move) |
R |
Rectangle annotation |
E |
Ellipse annotation |
A |
Arrow annotation |
L |
Line annotation |
T |
Text annotation |
N |
Number annotation |
S |
Spotlight annotation |
C |
Crop tool |
Ctrl+Z |
Undo annotation |
Ctrl+Shift+Z or Ctrl+Y |
Redo annotation |
Delete / Backspace |
Delete selected annotation |
Escape |
Deselect / cancel crop mode |
Ctrl+O |
Import image file |
Ctrl+V |
Paste image from clipboard |
Ctrl+S |
Quick save |
Ctrl+Shift+S |
Export with format dialog |
Ctrl+C |
Copy to clipboard |
Access via Settings icon in title bar (⚙️).
Tabs:
- Fullscreen - Default: PrintScreen
- Region - Default: Ctrl+PrintScreen
- Window - Default: Ctrl+Shift+PrintScreen
- Custom key combinations supported
- Launch on startup - Auto-start WinShot on Windows boot
- Minimize to tray - Start minimized instead of maximized
- Show notifications - Display toast when screenshot is saved
- Folder - Default:
%USERPROFILE%\Pictures\WinShot - Filename pattern - Options:
timestamp,date,increment
- Default format - PNG or JPEG
- JPEG quality - 0-100 slider (default: 95)
- 95+ = visually lossless
- 75-90 = balanced (recommended)
- 50-75 = compressed (smaller files)
- Include background - Apply gradient to exported image
Panel on right side of editor (collapsible):
- Padding - Space around screenshot
- Corner radius - Rounded corners (0-50px)
- Shadow size - Drop shadow depth (0-30px)
- Background - Select from 24 gradient presets or custom color
All settings persist in browser localStorage and survive app restarts.
- Go 1.24.0+
- Node.js 18+
- Wails CLI - Install:
go install github.com/wailsapp/wails/v2/cmd/wails@latest - WebView2 Runtime - Pre-installed on Windows 11, or manual install on Windows 10
# Clone repository
git clone https://github.com/[owner]/winshot.git
cd winshot
# Install frontend dependencies
cd frontend
npm install
cd ..
# Verify Wails setup
wails doctor# Run with hot reload
wails devThis starts the app with:
- Frontend: Vite dev server (auto-reload on code changes)
- Backend: Recompile on Go file changes
- Open in Wails dev window
Frontend only:
cd frontend
npm run devBackend only:
wails build
./winshot.exePortable Executable:
wails build
# Output: ./build/bin/winshot.exe (~10-15MB)Installer (NSIS):
wails build -nsis
# Output: ./build/bin/winshot_installer.exeRelease Build (optimized):
wails build -upx
# Smaller binary (~7-10MB) using UPX compression.
├── app.go # Wails bindings (Go)
├── main.go # Entry point
├── wails.json # Wails config
├── go.mod / go.sum # Go dependencies
├── frontend/
│ ├── src/
│ │ ├── App.tsx # Root React component
│ │ ├── components/ # React components (14 total)
│ │ ├── types/ # TypeScript interfaces
│ │ └── assets/ # Images, fonts
│ ├── package.json
│ ├── vite.config.ts
│ ├── tailwind.config.js
│ └── tsconfig.json
├── internal/ # Go packages
│ ├── config/ # Config persistence
│ ├── hotkeys/ # Global hotkey registration
│ ├── screenshot/ # Screen/window capture
│ ├── tray/ # System tray integration
│ └── windows/ # Window enumeration
├── docs/ # Documentation
└── build/ # Build assets & output
Key Packages:
internal/config- JSON config persistenceinternal/hotkeys- Global hotkey registration via Win32 APIinternal/screenshot- Multi-display screen captureinternal/tray- System tray icon + context menuinternal/windows- Window enumeration
Wails Bindings: 25+ methods exposed to frontend via automatic Go→TypeScript binding.
Technology Stack:
- React 18.2 + TypeScript
- react-konva 18.2 for canvas drawing
- Tailwind CSS 3.4 for styling
- Vite 3.0 for build tooling
Components:
App.tsx- Central state management- 14 specialized components for UI, toolbars, dialogs, canvas
State Management: React hooks (useState, useEffect, useCallback) + localStorage for persistence.
Frontend ↔ Go via Wails IPC (automatic JSON serialization).
Example:
// Frontend
const result = await CaptureFullscreen()
// Automatically calls Go method, returns JSON-deserialized CaptureResultSee docs/system-architecture.md for detailed architecture diagrams.
| Layer | Technology | Purpose |
|---|---|---|
| Framework | Wails v2.10.2 | Desktop app framework |
| Backend | Go 1.24.0 | System APIs, screenshot capture |
| Frontend | React 18.2.0 | UI framework |
| Language | TypeScript 5.3.0 | Type-safe frontend |
| Canvas | react-konva 18.2.10 | Shape drawing & editing |
| Styling | Tailwind CSS 3.4.0 | Utility-first CSS |
| Build | Vite 3.0.7 | Frontend bundler |
| Screenshot | kbinani/screenshot | Multi-display capture |
Contributions welcome! Please:
- Fork the repository
- Create feature branch:
git checkout -b feature/amazing-feature - Commit changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Open Pull Request
Guidelines:
- Follow code standards
- Update tests for new features
- Update documentation as needed
- Keep commits focused and descriptive
- Basic capture modes
- Simple annotations
- PNG export
- Configuration dialog
- Undo/redo ✓
- Keyboard shortcuts ✓
- Clipboard import ✓
- JPEG quality control ✓
- Dark/light theme toggle
- Batch export operations
- Cloud sync for settings
- Screen recording
- OCR text extraction
- Cloud sync for settings
- macOS/Linux support
See docs/project-overview-pdr.md for detailed roadmap.
Global hotkeys not working
- Ensure app has focus once (may require privilege elevation)
- Check Settings → Hotkeys for conflicts with other apps
- Try alternative key combinations
Screenshots appear blurry
- Confirm DPI scaling in Windows Settings (125%, 150%)
- App handles DPI automatically; if issues persist, file a bug report
- Use JPEG export with lower quality for smaller files
App crashes on startup
- Delete
%APPDATA%\WinShot\config.jsonto reset configuration - Check if WebView2 runtime is installed (Windows 10)
- Restart computer and try again
Export takes too long
- Large images (4K+) may take 500-800ms
- Reduce output size via aspect ratio control
- Use JPEG format for faster export than PNG
Enable debug logging:
wails dev # Prints Go errors and exceptions to consoleBSD 3-Clause License
See LICENSE file for details.
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Reddit: /r/winshot (TBD)
- Discord: Invite link (TBD)
- Wails - Desktop framework
- kbinani/screenshot - Screen capture
- react-konva - Canvas library
- Tailwind CSS - Styling framework
- ✨ Clipboard image import via Ctrl+V
- ✨ Configurable JPEG compression quality (0-100 scale)
- ✨ Comprehensive keyboard shortcuts for all tools
- ✨ Tool selection via single-key shortcuts (V, R, E, A, L, T, C)
- ✨ Editor annotations with Undo/Redo shortcuts
- 🚀 Performance improvements for clipboard operations
- 📝 Enhanced documentation with keyboard reference
- ✨ Add arrow and line annotations
- ✨ Add text annotation tool
- ✨ Implement non-destructive cropping
- ✨ Add 24 gradient background presets
- ✨ Support multiple output aspect ratios
- ✨ Copy file path button + auto-copy on quick save
- 🚀 Performance improvements for large images
- 📝 Complete documentation suite
- 🎉 Initial release
- ✅ Fullscreen, region, and window capture
- ✅ Rectangle and ellipse annotations
- ✅ PNG export
- ✅ Configuration dialog
- ✅ System tray integration
- ✅ Global hotkey support
Made with ❤️ for screenshot enthusiasts