An open-source, local-first desktop task manager inspired by Things 3.
简体中文 | English
Milesto is a cross-platform desktop app for personal task management, covering the full GTD workflow: collect, organize, execute, and review. All data stays on your machine in a local SQLite database — no account or cloud service required.
- Inbox — Quick capture for new tasks with minimal friction
- Today — Plan your day with drag-and-drop ordering
- Upcoming / Anytime / Someday — Organize tasks by time horizon
- Projects & Sections — Group related tasks, with support for sections within projects
- Areas — Organize projects under broader areas of responsibility
- Tags — Flexible labeling for cross-cutting categorization
- Checklists — Sub-items within tasks for step-by-step tracking
- Full-text Search — FTS5-powered search across task titles and notes (< 200ms at 10k tasks)
- Data Import / Export — Full JSON backup and restore with transactional safety
- Logbook & Trash — Review completed tasks and recover deleted ones
- Themes — Light, Dark, and System modes
- i18n — English and Simplified Chinese
| Layer | Technology |
|---|---|
| Framework | Electron 30 |
| UI | React 18 + TypeScript 5 |
| Bundler | Vite 5 + vite-plugin-electron |
| Database | SQLite via better-sqlite3 (in worker_threads) |
| Styling | Tailwind CSS + shadcn/ui |
| Animation | Framer Motion |
| Drag & Drop | @dnd-kit |
| Virtual Scrolling | @tanstack/react-virtual |
| Validation | Zod |
| i18n | i18next |
| Testing | Vitest + Testing Library |
- Node.js >= 18
- npm (ships with Node.js)
# Install dependencies npm ci # Start in development mode npm run dev# Typecheck + bundle + package npm run buildOutput artifacts are written to release/<version>/:
| Platform | Format | Filename |
|---|---|---|
| macOS | DMG | Milesto-Mac-<version>-Installer.dmg |
| Windows | NSIS | Milesto-Windows-<version>-Setup.exe |
| Linux | AppImage | Milesto-Linux-<version>.AppImage |
npm run lint # ESLint (zero warnings policy) npm run test # Unit + component tests npm run test:db # DB Worker action testsMilesto follows a strict four-layer Electron architecture with hard isolation boundaries:
┌─────────────────────────────────────────────┐ │ Renderer (React) │ │ Only calls window.api.* │ ├─────────────────────────────────────────────┤ │ Preload (contextBridge) │ │ Exposes business-level APIs only │ ├─────────────────────────────────────────────┤ │ Main Process │ │ Window lifecycle, IPC gateway │ ├─────────────────────────────────────────────┤ │ DB Worker (worker_threads) │ │ Sole SQLite access, serialized requests │ └─────────────────────────────────────────────┘ Key constraints:
contextIsolation: true,nodeIntegration: false- No raw
ipcRendereror arbitrary SQL exposed to Renderer - All IPC payloads validated with Zod schemas
- All DB writes are transactional
electron/ main.ts # Main process entry preload.ts # Preload script workers/db/ db-worker.ts # DB Worker entry actions/ # Business logic (task, project, area, tag, etc.) src/ App.tsx # Root component app/ AppRouter.tsx # Route definitions AppShell.tsx # Sidebar + content layout pages/ # Route pages (Today, Inbox, Upcoming, ...) features/ # Domain features (tasks, projects, settings, ...) components/ # Shared UI components i18n/ # i18next configuration shared/ window-api.ts # window.api type contract schemas/ # Zod schemas (source of truth for data models) result.ts # Result<T> type app-error.ts # Structured error type - Read the docs in
docs/before making significant changes:redlines.md— Hard constraints (highest priority)standards.md— Engineering standardsui.md— UI/UX rulestech-framework.md— Architecture decisions
- Follow the existing code style (TypeScript strict, 2-space indent, single quotes).
- Run
npm run lintand ensure zero warnings before submitting changes.
This project is licensed under the MIT License.


