Unified work time overview across Moco, Jira, Outlook and Personio
Roots aggregates your work time from multiple services into a single desktop app. It pulls data from Moco, Jira, Outlook and Personio, then reconciles and displays everything in a unified timeline — so you always know where your hours went.
- Multi-Service Integration — Connect Moco, Jira (Cloud & Server), Outlook and Personio
- Unified Timeline — Day, week and month views across all connected services
- Confidence-Based Reconciliation — Automatic matching and comparison between services
- Smart Booking Suggestions — Suggests Moco project + task based on recent booking history when creating entries from Jira worklogs or Outlook events
- Personio Sync — Work schedule and absence import with automatic weekday-hours update
- Native Desktop App — Lightweight Tauri 2 app; no browser CORS issues
- Dark / Light Mode — Nord-palette design tokens with full theme support
brew tap konradmichalik/tap
brew install --cask rootsUpdate to the latest version:
brew update && brew upgrade --cask rootsDownload the latest .dmg from GitHub Releases.
Warning
The app is currently unsigned. On first launch, right-click the app and select Open, or run xattr -cr /Applications/Roots.app in your terminal.
Connect at least one service in Settings → Connections to start seeing entries. Each service requires different credentials:
| Service | Auth Method | Provides |
|---|---|---|
| Moco | API Key | Time entries, projects, presences |
| Jira Cloud | Email + API Token | Worklogs |
| Jira Server | Username/Password or PAT | Worklogs |
| Outlook | OAuth2 | Calendar events |
| Personio | Client ID + Secret | Absences, work schedule |
Note
Personio does not provide time entries. When connected, it automatically updates your weekday-hours target from your work schedule and disables manual absence editing.
- Node.js 18+
- Rust toolchain (required for Tauri builds)
- At least one service account (Moco, Jira, Outlook, or Personio)
git clone https://github.com/konradmichalik/roots.git
cd roots
npm installBrowser mode — fastest iteration, no Rust compilation:
# Terminal 1 — CORS proxy (required)
cd proxy && npm install && node server.js
# Terminal 2 — Vite dev server
npm run devTip
Use browser mode for UI development. The CORS proxy runs on localhost:3002 and forwards requests to external services.
Desktop mode — full Tauri app with native features:
npm run tauri:dev| Command | Description |
|---|---|
npm run dev |
Vite dev server (browser mode) |
npm run build |
Production build |
npm run tauri:dev |
Desktop app development |
npm run tauri:build |
Build native app bundle |
npm run check |
Svelte check + TypeScript |
npm run lint |
ESLint |
npm run lint:fix |
ESLint with auto-fix |
npm run format |
Prettier |
npm run release |
Bump version, sync Tauri config, tag and push |
| Layer | Technology |
|---|---|
| UI Framework | Svelte 5 with Runes + TypeScript |
| Desktop Runtime | Tauri 2 (Rust) |
| Styling | Tailwind CSS v4 + Nord palette design tokens |
| UI Components | shadcn-svelte + bits-ui |
| Validation | Zod for all API response schemas |
MIT
