Encrypted grid-based note manager for sensitive data.
SSH commands, credentials, API keys, code snippets — all one hotkey away.
Store commands, credentials, and notes — click any cell to copy
You probably have credentials, SSH commands, connection strings, and API keys scattered across sticky notes, text files, and password managers that aren't designed for quick copy-paste workflows.
GridSnap gives you a spreadsheet-like grid that lives in your system tray. Press Ctrl+Shift+Space, click a cell, and it's on your clipboard. Everything is encrypted at rest with AES-256-GCM.
This is not a password manager. It's a fast, encrypted scratch grid for things you copy-paste daily.
Grid Engine
- Virtualized 1000×26 grid — scrolls at 60fps
- Keyboard navigation (Arrow keys, Tab, Enter, Escape)
- Type-to-edit: start typing to fill a cell
- Multi-cell selection — click & drag or Shift+Arrow to select ranges
- Hover or click a cell to copy — inline copy button with checkmark feedback
Ctrl+Ccopies selection (TSV format for ranges — paste into Excel/Sheets)Ctrl+Vpastes TSV data into grid starting from selected cell- Column resize (50–600px), row resize (22–120px)
- Search across all cells with instant highlighting (disabled on locked sheets)
- Manual save with
Ctrl+Sor toolbar button (no auto-save lag) - Built-in help panel (
?button) — keyboard shortcuts and usage tips
Sheets
- Multiple sheets with colored tabs
- Add, remove, rename with delete confirmation
- Drag tabs to reorder sheets
- Switch sheets with
Ctrl+Tab/Ctrl+Shift+Tab, orCtrl+1-9for direct jump Ctrl+Kopens a quick-switch palette — search sheets by name- Right-click a tab to rename, mask, or manage password
- Sheet masking — right-click a tab → Mask sheet to show all values as
●●●● - Per-cell masking — right-click cells to mask/unmask individual cells or ranges
- Per-sheet passwords — right-click a tab → Set password (AES-256-GCM + Argon2id)
- Password-protected sheets lock on every tab switch — no session persistence
- Search is disabled on locked sheets (prevents data leakage)
- Deleting a password-protected sheet requires password confirmation
- Brute force protection: 10 wrong attempts → 2-minute cooldown (persisted, survives restart)
- Each sheet can have its own independent password
Security
- Passwordless by default — opens directly on first install, no setup required
- Optional master password (set in Settings to encrypt vault)
- Optional per-sheet passwords (independent of vault password)
- AES-256-GCM encryption with Argon2id key derivation (64MB memory, 3 iterations)
- Keys are zeroized from memory after use
- No network access, no telemetry, no cloud
Desktop Integration
- Always on top — stays visible while you work in other apps
- Borderless window with custom title bar
- System tray with show/hide toggle
- Global hotkey (default
Ctrl+Shift+Space, configurable in Settings) - Close button minimizes to tray — the app stays ready
- Optional launch on system startup (configurable in Settings)
- ~8.5MB bundle, ~30MB RAM
Theming
- 11 built-in themes selectable from Settings
- Carbon (default), Midnight, Ocean, Aurora, Deep Teal, Light, Velvet, Nordic, Rose, Terminal, Slate
- Theme persists across sessions
Prerequisites: Node.js 18+, Rust 1.70+
git clone https://github.com/akinalpfdn/GridSnap.git
cd GridSnap/gridsnap
npm install
npm run tauri dev # Development with hot reload
npm run tauri build # Production build- First launch — opens directly, no setup required
- Navigate — click a cell or use arrow keys
- Edit — double-click or press Enter, then type
- Copy — hover a cell and click the copy icon, or press
Ctrl+C - Paste — copy TSV data and press
Ctrl+Vto fill multiple cells - Save — press
Ctrl+Sor click the save button in the toolbar - New sheet — click
+in the tab bar - Switch sheets — click a tab,
Ctrl+Tab/Ctrl+Shift+Tab,Ctrl+1-9, orCtrl+Kto search - Reorder sheets — drag tabs to rearrange
- Mask a sheet — right-click the tab → Mask sheet
- Mask cells — select cells, right-click → Mask cells
- Sheet password — right-click the tab → Set password
- Set master password — go to Settings to optionally encrypt the vault
- Help — click the
?button in the toolbar for shortcuts and tips - Hide — press
Ctrl+Shift+Spaceor close the window (goes to tray) - Quit — right-click the tray icon → Quit
| Layer | Technology |
|---|---|
| Shell | Tauri v2 (~8.5MB bundle, native OS webview) |
| Frontend | React 18 + TypeScript |
| Styling | CSS Modules + CSS Custom Properties |
| Grid | Custom virtualized renderer (prefix-sum + binary search) |
| State | Zustand |
| Build | Vite 6 |
| Encryption | AES-256-GCM + Argon2id (Rust) |
| Storage | Encrypted JSON vault (Rust fs) |
gridsnap/
├── src/ # React frontend
│ ├── components/ # Grid, Sheets, Toolbar, LockScreen
│ ├── hooks/ # Navigation, resize, clipboard, search
│ ├── stores/ # Zustand (vaultStore)
│ ├── services/ # Tauri IPC bridge (vault, clipboard, shortcut, autostart, sheet password)
│ ├── theme/ # CSS tokens + themes
│ ├── types/ # TypeScript definitions
│ └── utils/ # Grid math, cell keys, debounce
│
├── src-tauri/ # Rust backend
│ ├── src/commands/ # IPC handlers (vault, clipboard, shortcut, autostart, sheet password)
│ ├── src/services/ # Encryption, storage, vault manager
│ ├── src/models/ # Vault, Sheet, Settings structs
│ └── src/tray.rs # System tray setup
│
└── icons/ # App icons (all platforms)
| Shortcut | Action |
|---|---|
Ctrl+Shift+Space |
Toggle window (global, configurable) |
Arrow keys |
Navigate cells |
Shift+Arrow |
Extend selection range |
Tab / Shift+Tab |
Move right / left |
Enter |
Edit cell / move down |
Escape |
Stop editing / deselect |
Ctrl+C |
Copy cell value (TSV for ranges) |
Ctrl+V |
Paste TSV data into grid |
Ctrl+Tab |
Next sheet |
Ctrl+Shift+Tab |
Previous sheet |
Ctrl+1-9 |
Jump to sheet by position |
Ctrl+K |
Sheet switcher palette |
Ctrl+S |
Save vault |
Delete |
Clear cell or selected range |
| Any key | Type-to-edit selected cell |
GridSnap ships with 11 built-in themes selectable from Settings. The default Carbon theme is a warm dark theme with amber accents.
Available themes: Carbon, Midnight, Ocean, Aurora, Deep Teal, Light, Velvet, Nordic, Rose, Terminal, Slate.
Themes use CSS custom properties (--theme-*). To create a custom theme, add an entry to src/theme/themes.ts with your color definitions — no component changes needed.
- Passwordless by default — vault is stored as plaintext JSON until a password is set
- Optional vault encryption: Set a master password in Settings to enable AES-256-GCM encryption
- Per-sheet passwords: Each sheet can have its own password (independent of vault password)
- Encrypts a verification token with AES-256-GCM + Argon2id — no plaintext hashes stored
- Sheets re-lock on every tab switch (no session persistence)
- 10 failed attempts → 2-minute cooldown, persisted in vault (cannot bypass by restarting)
- Only the correct password resets the attempt counter
- Key derivation: Argon2id (64MB memory, 3 iterations, 4 parallelism)
- Storage format (encrypted):
[salt 16B | nonce 12B | ciphertext | tag 16B] - Memory safety: Rust backend with
zeroizefor sensitive data cleanup - No network: the app makes zero outbound connections
Contributions are welcome! Please:
- Fork the repo
- Create a feature branch (
git checkout -b feature/amazing-thing) - Commit your changes
- Push and open a PR
Built with Tauri, React, and Rust. Encrypted by default.






