Premium local productivity desktop app for Windows. Fast, fully offline, and private — every task, project, tag and analytic lives in a local SQLite database on your machine. No account, no sync, no telemetry.
Built with Electron · React 19 · TypeScript · Tailwind CSS · SQLite (sql.js).
- Task management — create, edit, complete, star, pin, duplicate, archive
- Projects — group work with deadlines, progress and notes
- Categories & tags — unlimited colour-coded organisation
- Smart filters — Today, Upcoming, Overdue, High priority, Completed, Starred
- Instant search — indexed, sub-20 ms queries
- Command palette —
Ctrl+K, Linear-style keyboard-first navigation - Analytics — completion trends, streaks and productivity insights
- Focus mode & Pomodoro — distraction-free work with a session-tracking timer
- Light & dark themes — persisted, toggle with
Ctrl+D - About page — live system information (versions, environment, platform)
- Auto backup — rotating local backups with one-click recovery
| Shortcut | Action |
|---|---|
Ctrl + N |
New task |
Ctrl + F |
Focus search |
Ctrl + K |
Command palette |
Ctrl + D |
Toggle light / dark theme |
Ctrl + / |
Open settings |
cd taskflow
npm install
npm run devRequires Node.js 20+ (developed on Node 24) and Windows 10/11.
| Script | Description |
|---|---|
npm run dev |
Launch the app with hot reload (electron-vite) |
npm run build |
Type-safe production build to out/ |
npm run typecheck |
tsc --noEmit — zero errors expected |
npm test |
Run the Vitest suite |
npm run dist |
Build a Windows NSIS installer |
npm run dist:portable |
Build a portable Windows .exe |
TaskFlow is 100% local — it needs no environment variables, API keys or
secrets to build or run. There is intentionally no .env file. The .gitignore
still excludes .env*, *.pem, *.key, *.db and build output so nothing
sensitive or machine-specific is ever committed.
| Item | Path |
|---|---|
| Database | %APPDATA%/taskflow/data/taskflow.db |
| Backups | %APPDATA%/taskflow/data/backups/ (last 10 kept) |
The database is created and seeded with sample data on first launch. Deleting the
data folder resets the app.
electron/
main/ # Node/Electron main process
database/ # sql.js adapter, schema, snapshot persistence, backups
services/ # task/project/category/tag/analytics/settings/system + validation
ipc/ # typed IPC handlers
preload/ # contextBridge API (window.taskflow)
src/ # React renderer
components/ views/ stores/ hooks/ lib/ types/
- Process isolation —
contextIsolation: true,nodeIntegration: false. The renderer only talks to the main process through a typed, whitelisted preload bridge. - Service layer owns all database access; the UI never touches SQL.
- Input validation — everything crossing the IPC boundary is sanitized
(
services/validation.ts) before reaching parameterized SQL. - Persistence — sql.js (SQLite compiled to WASM) runs in-memory and writes a full database snapshot to disk on each mutation, with rotating backups for crash recovery.
See docs/ARCHITECTURE.md, docs/DESIGN_SYSTEM.md, docs/DEPLOYMENT.md and docs/PERFORMANCE.md for details, and CHANGELOG.md for the recovery/enhancement history.
npm test # 22 tests: schema integrity + input validation
npm run typecheckMIT © TaskFlow. See open-source library credits on the in-app About page.