A modern, local-first project management desktop app.
Built with Tauri + React + Rust — your data stays on your machine.
Most project management tools live in the cloud. Projex takes a different approach:
- Local-first — All data stored in SQLite on your machine. No accounts, no subscriptions.
- Multi-device sync — Optional S3 sync (AWS, Cloudflare R2, MinIO) when you need it.
- Privacy by default — Your project data never leaves your machine unless you choose to sync.
- Native performance — Rust backend with Tauri, not another Electron app.
- Full status machine:
BACKLOG→PLANNED→IN_PROGRESS→BLOCKED→DONE→ARCHIVED - Immutable status timeline — every transition is an append-only event log
- Multi-dimension filtering: status, country, partner, owner, member, tags
- Flexible sorting: updated time, priority, due date
- Server-side pagination
- Tiptap-powered editor: headings, lists, task lists, tables, images, code blocks
- Slash commands (
/) for quick formatting - @mention to reference team members
- Pin important comments to top
- Manage team members with roles (tester, PM, backend dev, frontend dev)
- Track member participation: current & historical project assignments
- Partner profiles with immutable project binding
- SQLite — fully offline, zero cloud dependency
- JSON export/import — full backup, idempotent restore
- S3 sync — delta-based sync with checksum verification, per-device cursor, and anti-reupload protection
- Snapshot — gzip-compressed full backups with SHA-256 checksum
- In-app log viewer — view frontend & backend logs without external tools
- Adjustable log level — ERROR/WARN/INFO/DEBUG (requires restart)
- Smart redaction — auto-mask sensitive data (S3 credentials, tokens)
- Efficient browsing — paginated loading (256KB per page), real-time search
- Convenient operations — copy to clipboard, download, clear logs
- Auto rotation — max 10MB per file, keep latest 5 files
- See docs/LOGS_VIEWER.md for details
flowchart LR
LocalWrite[Local DB changes] --> Metadata[sync_metadata triggers]
Metadata --> Upload[Upload delta.gz]
Upload --> Pull[List & download remote deltas]
Pull --> Verify[Checksum verify]
Verify --> Apply[Transactional apply]
Apply --> AntiLoop[Mark generated metadata synced]
AntiLoop --> Cursor[Advance per-device cursor]
| Capability | Status | Notes |
|---|---|---|
| Local delta collect/upload | ✅ | In production |
| Remote delta download/apply | ✅ | In cmd_sync_full |
project_tags / project_comments sync |
✅ | Includes composite-key delete for tags |
| Anti-reupload (ping-pong suppression) | ✅ | mark_remote_applied_operations_synced |
| Minimal LWW guard | ✅ | Skip when remote_version < local_version |
| Optional E2E encryption | 🚧 | Planned in M7 |
| Snapshot rotation/cleanup | 🚧 | Planned in M7 |
- Frosted glass effect + gradient design (inspired by Arc / Raycast)
- i18n: English & Chinese, runtime switchable
- Responsive layout, empty state guidance, confirmation dialogs
| Layer | Technology |
|---|---|
| Desktop | Tauri v2 |
| Frontend | React 19 + TypeScript 5 |
| Build | Vite 7 |
| UI | Mantine 7 |
| Rich Text | Tiptap + @mantine/tiptap |
| State | Zustand |
| i18n | i18next + react-i18next |
| Backend | Rust |
| Database | SQLite (rusqlite) |
| Sync | aws-sdk-s3 + Vector Clock |
Clean Architecture (Domain-Driven Design)
┌─────────────────────────────────────┐
│ React + Mantine + Zustand (UI) │
├─────────────────────────────────────┤
│ Tauri Commands (Interface) │
├─────────────────────────────────────┤
│ Application UseCases (Business) │
├─────────────────────────────────────┤
│ Domain Rules (Core) │
│ Status Machine + Invariants │
├─────────────────────────────────────┤
│ SQLite + S3 Sync (Infra) │
└─────────────────────────────────────┘
- Node.js 18+
- Rust 1.77.2+
- macOS 12+ or Windows 10+
# Install dependencies
npm install
# Run in development mode (hot-reload)
npm run tauri dev
# Production build
npm run tauri build
# Run backend tests (250 test cases)
cd src-tauri && cargo testThe database is auto-created on first launch with all migrations applied.
cp .env.minio.example .env.minio
docker compose --env-file .env.minio -f docker-compose.minio.yml up -dSee docs/SYNC_ENV_PROFILES.md for profile details and MinIO test setup.
- Create a Partner — Partners are organizations you work with
- Create People — Team members with roles
- Create a Project — Link it to a partner and assign an owner
- Track Progress — Transition status, add comments, manage members
- Export/Sync — Settings → Export JSON or configure S3 sync
projex/
├── docs/
│ ├── PRD.md # Product Requirements Document
│ ├── MILESTONES.md # Milestone tracking
│ ├── SYNC_S3_DESIGN.md # S3 sync architecture
│ ├── SYNC_EXPLAINED.md # Sync mechanism explained
│ ├── SYNC_ENV_PROFILES.md # Dev MinIO / Prod S3-R2 profiles
│ └── LOGS_VIEWER.md # Logs viewer feature guide
├── src/ # Frontend (React + TypeScript)
│ ├── api/ # Typed Tauri invoke wrappers (logs.ts, sync.ts, etc.)
│ ├── components/ # Shared components
│ ├── pages/ # Page components (Logs, Settings, etc.)
│ ├── stores/ # Zustand stores
│ ├── sync/ # Frontend sync manager
│ ├── locales/ # i18n translations (en/zh)
│ └── theme.ts # Mantine theme config
├── src-tauri/ # Backend (Rust)
│ ├── migrations/ # SQL migrations (5 files)
│ ├── tests/ # Integration tests (13 files, 250 cases)
│ └── src/
│ ├── app/ # Use cases (CRUD, import/export)
│ ├── commands/ # Tauri command handlers (logs.rs, sync.rs, etc.)
│ ├── domain/ # Domain rules (status machine)
│ ├── infra/ # SQLite repositories
│ └── sync/ # S3 sync (delta, snapshot, vector clock)
└── AGENTS.md # AI agent collaboration guide
| Item | Value |
|---|---|
| Database | ~/Library/Application Support/com.nickdu.projex/app.db |
| Log Files | ~/Library/Application Support/com.nickdu.projex/logs/ |
| Default Window | 1200 x 800 |
| Min Window | 800 x 500 |
| Data Schema | v2 (with comments support) |
| Log Level | Debug: Info, Release: Warn (user-adjustable) |
| Project List | Project Detail |
|---|---|
![]() |
![]() |
| Rich Text Comments | Person Detail |
|---|---|
![]() |
![]() |
| Settings & Sync |
|---|
![]() |
- Project lifecycle with status machine
- People & Partner management
- JSON export / import
- S3 multi-device sync (delta + snapshot)
- Remote delta apply + anti-reupload closed loop
- i18n (English + Chinese)
- Rich text comments with Tiptap
- In-app logs viewer with redaction
- M7-P1: Optional E2E encryption for sync payloads
- M7-P2: Snapshot selection sorting + stronger delta key uniqueness
- M7-P3: Sync observability (phase metrics + structured logs)
- M7-P4: Large-bucket scan/performance optimization
- Code splitting for smaller bundle size
- Linux support
- Dashboard & analytics view
- Keyboard shortcuts
Contributions are welcome! Please read the AGENTS.md for development conventions and architecture guidelines.
# Lint check (must pass before commit)
cd src-tauri && cargo clippy --all-targets --all-features # Rust
npm run lint # Frontend
# Run all tests
cd src-tauri && cargo testMade with Tauri + React + Rust




