A terminal interface for managing markdown-based tasks. Built in Rust on top of mdbase-rs, compliant with the TaskNotes spec.
Tasks live as markdown files with YAML frontmatter in your vault. The TUI reads and writes them directly — no database, no sync service.
From source:
cargo install --git <repo-url> --bin tasknotes-tuiPrebuilt binaries for Linux x86_64, macOS (Intel and Apple Silicon), and Windows are attached to GitHub Releases.
Your vault needs an mdbase.yaml and a task type definition. If you already have a TaskNotes-compatible vault, point the TUI at it:
tasknotes-tui --root /path/to/vaultThe TUI reads two config files from the vault root:
tasknotes.yaml— TaskNotes spec config: field mapping, defaults, archive behavior, status values.tasknotes-tui.yaml(optional) — TUI-specific config: keybinds and view slots.
To see the default TUI config:
tasknotes-tui print-default-configNumber keys 1–9 switch between configured view slots. The defaults:
| Key | View | Shows |
|---|---|---|
1 |
Open | Open tasks |
2 |
Date | Tasks for the focused date |
3 |
Overdue | Past-due tasks |
4 |
All | All non-archived tasks |
5 |
Tracked | Tasks with an active timer |
6 |
Archived | Archived tasks |
7 |
Project | Tasks linked to the active project |
A mini calendar sits in the top pane. The highlighted day is the focused date, and days with tasks are marked.
h/lor arrow keys — move by dayPgUp/PgDn— move by weekg— jump to today
When the date view (2) is active, the task list shows tasks for the focused date.
| Key | Action |
|---|---|
x or Space |
Toggle completion |
z |
Archive / restore |
T |
Start / stop time tracking |
S |
Skip / unskip a recurring instance |
P |
Toggle active project on selected task |
n |
Create task (multi-step: title, dates, priority, status, recurrence) |
c |
Quick create (title only, scheduled to focused date, linked to active project if set) |
e |
Edit title |
i |
Open in $EDITOR |
d |
Edit due date |
s |
Edit scheduled date |
p |
Edit priority |
t |
Edit status |
R |
Edit recurrence rule |
A |
Edit recurrence anchor |
When editing due or scheduled dates, a date picker opens:
- Arrow keys or
h/l— move by day j/k— move by weekH/L— move by montht— jump to todayc— clear the value/— switch to manualYYYY-MM-DDentryEnter— save
Ctrl-P opens a fuzzy-filterable command palette with all available actions.
/ opens live search across tasks.
Shift-P treats the selected task as the active project context. Running it again on the same task clears the active project.
The active project is shown in the State pane. When an active project is set:
- quick create links new tasks to that project via the
projectsfield - the default Project view (
7) shows tasks whoseprojectslinks resolve to the active project - switching views does not clear the active project
Views are configured in tasknotes-tui.yaml under the views key. Built-in view kinds:
all,open,date,overdue,tracked,archivedstatus— filter by a status valueexpression— filter using mdbase expression syntax
Expression views have access to task fields (status, priority, due, scheduled, etc.) and special variables (focusDate, today, isCompleted, isTracked, isArchived, path).
Project-aware expression helpers are also available:
hasActiveProjectactiveProjectPathactiveProjectTitleisActiveProjectprojectPaths— resolved project targets for the current task
views:
6:
label: "Doing Today"
kind: "expression"
expression: 'status == "doing" && (scheduled == focusDate || due == focusDate)'
7:
label: "Project"
kind: "expression"
where: "hasActiveProject && projectPaths.contains(activeProjectPath) && path != activeProjectPath"Keybinds map keys to commands. Multiple keys can map to the same command.
keybinds:
ctrl-p: command_palette
n: create_task
c: quick_create_task
shift-p: set_active_project
i: open_in_editor
shift-t: toggle_time_tracking
h: focus_prev_day
l: focus_next_dayArchive behavior is configured in tasknotes.yaml:
archive:
move_on_archive: false
folder: "TaskNotes/Archive"
tag: "archived"
field: "archived"T starts or stops a timer on the selected task. Active timers show in the task list and detail pane. View 5 (Tracked) shows all tasks with a running timer.
Tasks can have recurrence rules (RRULE syntax) with an anchor of either scheduled or completion. S skips the current instance without completing it.
cargo run --bin tasknotes-tui -- --root /path/to/vault
cargo run --bin tasknotes-tui -- --root /path/to/vault --focus-date 2026-03-29# Seed sample data
tasknotes-tui --root docs/demo-vault seed-demo-vault
# Render a snapshot to stdout
tasknotes-tui --root docs/demo-vault --focus-date 2026-03-29 \
render-snapshot --width 120 --height 32The repo includes adapters for running the TaskNotes spec test suite:
npm run conformance:test
npm run conformance:test:rust
npm run conformance:test:reference # against the mdbase-tasknotes reference impl