Tracker Widget is a local-first desktop productivity app built with Tauri v2, SvelteKit, and Rust. It uses plain Markdown files for todos, weekly planning, daily logs, and notes.
Current version: 1.3.1
- Single workspace folder setup.
todo.mdchecklist at the workspace root.- Global
scratchpad.mdwith live Markdown preview and source editing. - Weekly folders named like
2026w27. - Daily logs and weekly index files generated from templates.
- Todo folding, row numbers, keyboard reorder, multiselect, and context-menu actions.
- Send selected todos to today's activity, weekly objectives, or weekly planned activities.
- Daily sessions with activity tracking, subject pills, time pills, notes, and session suggestions.
- Weekly planning with editable planned activity details, duplicate cards, duration totals, and collapsible day columns.
- Weekly actuals derived from daily logs, with read-only activity details and duration totals.
- Indented and foldable weekly objectives stored as nested Markdown lists, with session-wide fold memory and bulk fold actions.
- Back/Forward history and keyboard navigation between weekly and daily log files.
- Custom text and entity context menus throughout the app.
- App-local subject and session history suggestions.
- Optional personal YAML frontmatter mode for newly created files.
- Safe week checking, Personal conversion, and Recycle Bin deletion from the sidebar.
- Single-instance launch behavior: opening Tracker Widget again restores and focuses the existing window.
- Portable zip release support.
Normal use expects one workspace folder:
workspace/
todo.md
scratchpad.md
2026w27/
2026w27_index.md
20260701_log.md
20260702_log.md
Unknown files are ignored. Missing week files can be checked or created for explicit week ranges from the sidebar. Missing todo.md can be created or imported from the Todo view. scratchpad.md is created lazily when Scratchpad is first opened.
- Open the app.
- Select a workspace folder.
- Create or import
todo.mdif needed. - Use the calendar action in the sidebar to check the current week, create next week, or choose a week range.
Workspace location is managed from Settings. Todo and Scratchpad paths are derived as <workspace>/todo.md and <workspace>/scratchpad.md.
- Use the fixed Todo and Scratchpad entries above the week tree to switch workspace views.
- Use Back and Forward from the app menu or keyboard shortcuts to revisit view history.
Ctrl + PageUp: open the previous existing log file in sidebar order.Ctrl + PageDown: open the next existing log file in sidebar order.- Navigation crosses week boundaries without expanding collapsed sidebar folders.
- The week-order control determines whether older or newer weeks come first.
Enter: add a todo.Tab/Shift + Tab: indent or outdent.Alt + ArrowUp/Alt + ArrowDown: reorder the focused visible todo.- Use the toolbar to show row numbers, fold/unfold, undo/redo, reload, and add todos.
Ctrl + click: select multiple todos.Shift + click: select a visible range.- Right-click selected todos for bulk actions and send-to actions.
- Right-click editable todo text for Cut, Copy, Paste, and Select All.
Daily logs contain sessions, activities, subjects, time, and notes.
Activity Markdown format:
- {subjects: (rust, ui), time: 120m} Refactored the settings panel layout.Use time: ? when an activity has no known duration. Mixed totals display the known lower bound with +; all-unknown totals display ?.
Session suggestions come from the current weekly plan first, then app-local session history.
Sessions planned during the current week are marked with * in the suggestion list. The marker is display-only and is never stored in Markdown.
Daily session and activity context menus provide text editing, movement, and deletion actions where applicable. Daily and weekly note editors provide Cut, Copy, and Paste.
Weekly plan rows have stable IDs and editable activity details:
| ID | Day | Session | Subjects | Target Minutes |
| --- | --- | --- | --- | ---: |
| p1 | Fri | Calc1 study | math, geometry | 180 |
## Weekly Plan Details
<!-- tracker:plan-details:start -->
### p1
- {subjects: (math), time: 30m} Solve examples
<!-- tracker:plan-details:end -->Plan card subject and time summaries are derived from planned activities. Cards can be duplicated from their context menu. Weekly Planned and Weekly Actual headers show aggregate duration totals; Weekly Actual remains read-only.
Clicking a day header collapses or expands that day in both Weekly Plan and Weekly Actual. At least one day remains expanded, and the collapse state is temporary UI state rather than workspace data.
Weekly objectives support indentation levels 0 through 2:
- {subjects: (tracker), status: open} Improve tracker
- {subjects: (ui), status: partial} Refine objective layout
- {subjects: (parser), status: done} Preserve nested MarkdownTab/Shift + Tab: indent or outdent the objective being edited.- Foldable objectives hide consecutive, more deeply indented rows without changing Markdown.
- Objective context menus provide Indent, Outdent, Move Up, Move Down, Delete, and text clipboard actions.
- Objective fold state is remembered independently per week until the application closes. Context menus can collapse or expand all foldable objectives.
Daily, Weekly, and Scratchpad notes share one continuous Markdown editor:
- Live preview keeps Markdown structure editable in place.
- Source view uses a monospace font.
- Headings, emphasis, links, code, lists, and task markers are supported.
- Enter continues normal, numbered, and task lists.
- Scratchpad stores raw Markdown at
<workspace>/scratchpad.mdwithout frontmatter or wrapper fences. - Daily and Weekly
## Notessections use dynamically sizedtracker-notesfences so headings inside notes cannot alter document structure.
- Workspace folder.
- Derived Todo and Scratchpad file locations with Found/Missing status.
- Frontmatter mode:
OfforPersonal. - Rebuild subject history.
- Rebuild session history.
- Developer Mode for the app-controlled DevTools shortcuts and Inspect Element action.
History files are app-local and ignored by git:
subject-history.jsonsession-history.json
v1.2.0 objectives no longer use origin: planned or origin: unplanned. Preview the included migration before applying it to an older workspace:
npm run migrate:objectives -- <workspace-path>
npm run migrate:objectives -- <workspace-path> --writeBack up the workspace and review the dry-run output before applying the migration.
v1.3.0 stores the terminal ## Notes section in a dynamically sized tracker-notes fence so note headings cannot be mistaken for Daily or Weekly sections. Preview the migration first:
npm run migrate:notes -- <workspace-path>
npm run migrate:notes -- <workspace-path> --writeThe write pass creates a timestamped backup under <workspace-path>/.tracker-backups/ before changing recognized Daily logs or Weekly indexes. It skips already-wrapped files and malformed wrappers, and a second pass is a no-op.
Downgrade warning: v1.2.0 does not understand the tracker-notes boundary. Restore the timestamped backup before editing migrated files with v1.2.0, especially when notes contain ## headings.
Install Node.js and Rust, then:
npm install
npm run tauri devRun checks:
npm run test
npm run check
cargo test --manifest-path src-tauri/Cargo.toml
cargo check --manifest-path src-tauri/Cargo.tomlBuild the frontend only:
npm run buildBuild the Tauri release:
npm run tauri buildBuild the portable zip:
npm run package:portableThe portable zip is written to build-artifacts/tracker-widget-portable-v1.3.1.zip.