A creative and stylish clipboard manager built with Wails, designed to keep track of everything you copy through a clean, paper-aesthetic interface. It automatically records every clipboard change in real time, storing your copy history so you can easily revisit, reuse, and manage past content whenever you need it.
β¬οΈ Clipussy-amd64-installer.exe
Windows 10/11 (64-bit) | Version 0.2.0
- π Automatic Clipboard Monitoring - Automatically captures everything you copy
- π Pin Important Clips - Keep your most-used clips at the top
- π Fast Search - Quickly find clips with Ctrl+F
-
- π¨ Unique Paper Aesthetic - Beautiful hand-drawn, notebook-style UI
-
- ποΈ Easy Management - Copy, pin, and delete clips with intuitive controls
-
- π Sound Effects - Audible feedback for actions
- πΎ Persistent Storage - SQLite database keeps your clips safe
- π― Smart Cleanup - Automatically maintains the 100 most recent clips
- Go - Core application logic
- Wails v2 - Desktop application framework
- SQLite (via modernc.org/sqlite) - Local database for clip storage
- atotto/clipboard - Cross-platform clipboard access
- Windows API (lxn/win) - Native Windows clipboard monitoring
- React 18 - UI framework
- TypeScript - Type-safe JavaScript
- Vite - Fast build tool and dev server
- Tailwind CSS - Utility-first CSS framework
- shadcn/ui - Accessible component library
- GSAP - Animation library
- Lucide React - Icon library
Clipussy uses Wails to:
- Integrate native Windows clipboard APIs via Go
- Communicate clipboard events to a React UI in real time
- Bundle a lightweight, native-feeling desktop app without Electron
Clipussy follows a clean architecture pattern with clear separation between frontend and backend:
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β Frontend (React) β
β ββββββββββββββ ββββββββββββ ββββββββββββ β
β β UI Layer β β Context β β Componentsβ β
β β (TSX/CSS) β β Provider β β (Cards) β β
β ββββββββββββββ ββββββββββββ ββββββββββββ β
ββββββββββββββββββββββββ¬βββββββββββββββββββββββββββ
β Wails Bridge (IPC)
ββββββββββββββββββββββββ΄βββββββββββββββββββββββββββ
β Backend (Go) β
β ββββββββββββββ ββββββββββββ ββββββββββββ β
β β App.go β β clips.go β β db.go β β
β β (Bridge) β β (Logic) β β(Storage) β β
β ββββββββββββββ ββββββββββββ ββββββββββββ β
ββββββββββββββββββββββββ¬βββββββββββββββββββββββββββ
β
ββββββββββββββ΄βββββββββββββ
β β
βββββββΌββββββ ββββββββββΌβββββββββ
β SQLite β β OS Clipboard β
β Database β β Listener β
βββββββββββββ βββββββββββββββββββ
-
Clipboard Monitoring
- Windows clipboard listener runs in the background
- Detects clipboard changes via Windows API
- Filters out duplicate or empty content
-
Data Storage
- New clips are saved to SQLite database
- Automatic cleanup keeps only 100 most recent clips (prioritizing pinned)
- Each clip stores: content, type, timestamp, and pinned status
-
Frontend Updates
- Backend emits events when clipboard changes
- React context manages clip state
- UI automatically re-renders with new data
-
User Actions
- Copy: Uses browser clipboard API
- Pin/Unpin: Toggles database flag, reorders UI
- Delete: Removes from database, refreshes list
- Search: Client-side filtering with instant results
Clipussy/
βββ app.go # Main application entry point
βββ clips.go # Clip CRUD operations
βββ db.go # Database initialization
βββ main.go # Wails runtime setup
βββ go.mod # Go dependencies
βββ wails.json # Wails configuration
βββ internal/
β βββ clipboard/
β βββ listener_window.go # Windows clipboard listener
βββ frontend/
β βββ src/
β β βββ App.tsx # Root component
β β βββ components/
β β β βββ page.tsx # Main page layout
β β β βββ ui/
β β β βββ clip-card.tsx # Individual clip card
β β β βββ dialog.tsx # Modal dialog
β β βββ context/
β β β βββ ClipContext.tsx # Global state management
β β βββ helpers/
β β β βββ formatTime.ts # Date formatting
β β β βββ playSound.ts # Audio feedback
β β βββ types/
β β βββ clip.ts # TypeScript interfaces
β βββ wailsjs/ # Auto-generated Wails bindings
β βββ public/ # Static assets
β βββ package.json
β βββ vite.config.ts
βββ build/ # Build configuration
βββ windows/
βββ installer/ # NSIS installer config
Clipboard Monitoring (internal/clipboard/listener_window.go)
// Polls clipboard every 500ms using Windows API
// Compares clipboard sequence numbers to detect changes
// Invokes callback when new content is detectedDatabase Schema (db.go)
CREATE TABLE clips (
id INTEGER PRIMARY KEY AUTOINCREMENT,
content TEXT NOT NULL,
type TEXT NOT NULL,
pinned BOOLEAN DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
)Key Operations (clips.go)
getClips()- Fetches all clips ordered by pinned status, then by dateaddClip()- Inserts new clip and maintains 100-clip limittogglePinClip()- Toggles pinned status by IDdeleteClip()- Removes clip from database
State Management (ClipContext.tsx)
- Global state using React Context API
- Splits clips into pinned and recent arrays
- Listens for clipboard events from backend
- Provides
getClips()method for manual refresh
UI Components
- ClipCard - Individual clip with copy/pin/delete actions
- Page - Main layout with search, pinned section, recent section
- Dialog - About modal with app information
Animations (GSAP)
- Paper curtain reveal on startup
- Cat character entrance
- Info button nudge animation
- Sound effects on interactions
- Go 1.24 or higher
- Node.js 18+ and npm
- Wails CLI:
go install github.com/wailsapp/wails/v2/cmd/wails@latest
-
Clone the repository
git clone https://github.com/d3uceY/clipussy.git cd clipussy -
Install dependencies
# Backend dependencies go mod download # Frontend dependencies cd frontend npm install cd ..
-
Run in development mode
wails dev
The app will launch with hot-reload enabled for both frontend and backend.
Development Build
wails buildProduction Build with NSIS Installer (Windows)
wails build -nsisThe built application will be in build/bin/.
Clips are stored in a SQLite database at:
Windows: %APPDATA%\clipussy\db\gyatt.db
Ctrl + F- Focus search barCtrl + C- Copy selected text (triggers clipboard monitoring)
Edit clips.go, line 64:
LIMIT 100 // Change this numberEdit respective handlers in clip-card.tsx and page.tsx:
playSound("/sounds/file.mp3", soundOn, 0.3) // 0.0 to 1.0Edit frontend/src/index.css and Tailwind classes in components.
Contributions are welcome! Feel free to submit issues and pull requests.
Onyekwelu Jesse (@d3uceY)
This project is licensed under the MIT License.
- Wails for the amazing Go + Web framework
- All open-source contributors whose libraries made this possible
Made with π by d3uceY