A cross-platform text snippet expander that works like IDE live templates, but system-wide on Windows, browsers, and mobile.
- Query-style options:
:date?format=YYYY-MM-DD,:ty?lang=vi&tone=casual - Dynamic generators: date, UUID, counters, clipboard, random
- File-based vault: portable, versionable, and syncable
- Offline-first: cloud sync for vault files and built-in packs
- Cross-platform: Windows, browsers, Android, iOS
# Clone the repository
git clone https://github.com/dadadadas111/SnipQ.git
cd SnipQ/core
# Build the CLI tool
go build -o snipq ./cmd/cli
# Initialize a sample vault
./snipq init
# Try some expansions
./snipq expand ":ty" # → "Thank you."
./snipq expand ":ty?lang=vi&tone=casual" # → "Cảm ơn bạn nha!"
./snipq expand ":date?format=Mon, 02 Jan 2006" # → "Thu, 28 Aug 2025"
./snipq expand ":uuid?upper=true" # → "A977B672-8C53-4990-95B7-E5A2012BBD71"Multi-language Thanks
id: "snp_ty"
trigger: ":ty"
defaults:
lang: "en"
tone: "neutral"
template: |
{{ if eq .lang "vi" }}{{ if eq .tone "casual" }}Cảm ơn bạn nha!{{ else }}Cảm ơn bạn.{{ end }}
{{ else if eq .lang "ja" }}ありがとうございます。
{{ else }}{{ if eq .tone "casual" }}Thanks!{{ else }}Thank you.{{ end }}{{ end }}Dynamic Date
id: "snp_date"
trigger: ":date"
defaults:
format: "2006-01-02"
tz: "Local"
template: "{{ date .format .tz }}"/core/ - Go core library (vault, parser, templates, API)
/sync-api/ - NestJS API for authentication and sync
/apps/
/windows/ - Windows desktop app
/browser-extension/ - Chrome/Firefox extension
/mobile/ - Android/iOS apps
- File-based vault (groups, snippets, settings, counters, history)
- Query parser + precedence logic
- Template rendering with functions
- Expand/Preview API
- CLI tool for testing
- Tray app + editor for vault
- Global keyboard hook + expansion
- Per-app exclusions + pause toggle
- Auth (Firebase + JWT exchange)
- Vault index/blobs endpoints
- Device registration
- Built-in packs listing & install
- Sync client in Windows app
- Content script for textareas
- WASM core
- Chrome/Edge/Firefox support
- Android IME (gomobile)
- iOS Keyboard Extension (gomobile)
- Offline vault + sync
- Go 1.22+
- Node.js 18+ (for sync-api)
- Git
# Core library and CLI
cd core
go build ./cmd/cli
# Run tests
go test ./...
# Run linter
golangci-lint run
# API (when ready)
cd sync-api
npm install
npm run buildcore/
├── pkg/
│ ├── types/ # Shared types (Group, Snippet, Settings, etc.)
│ ├── parser/ # Query parameter parsing
│ ├── template/ # Template engine with built-in functions
│ ├── vault/ # File-based storage management
│ └── core/ # Main engine implementation
├── cmd/cli/ # CLI tool for testing
└── internal/testdata/ # Sample vault for testing
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes
- Add tests if applicable
- Run tests:
go test ./... - Run linter:
golangci-lint run - Commit:
git commit -m 'Add amazing feature' - Push:
git push origin feature/amazing-feature - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- 📧 Email: support@snipq.dev
- 🐛 Issues: GitHub Issues
- 💬 Discussions: GitHub Discussions