Milad Samimifar1k downloadsPlan projects and tasks as Markdown notes, track time against them, and review it on a dashboard. Gregorian or Jalali (Shamsi/Persian) calendar.
Plan projects and tasks as ordinary Markdown notes, track time against them, and see where that time actually went. Works in the Gregorian or the Jalali (Shamsi/Persian) calendar.
Everything lives in your vault as plain notes with frontmatter. There is no database and no lock-in: delete the plugin and your projects and tasks are still readable files.
![]()
![]()
Kanban board and time tracking. Tasks as cards in status columns, drag to change status. Start a timer on a task, pause it when you get pulled away, stop it when you are done. Logged hours are the time actually worked — a pause does not bill lunch as work. The timer survives a crash or a restart: it is stored on every state change and restored on load, telling you how long it thinks it has been running so you can keep or discard it. A timer keeps to its task even when the task's note is archived or renamed while it runs.
Timer in the status bar. While a timer runs, Obsidian's status bar shows its task and the time so far, so it stays in sight while you write in any note. Click it to pause or resume, stop and log, reset, or open the task.
Pomodoro. Switch it on in settings and the timer works in rounds: after 25 minutes of running time it pauses itself for a 5-minute break (every fourth break a 15-minute one) and starts again when the break is over. Only running time counts, so pausing by hand holds the round. Finished rounds are counted on the task and shown as 🍅 on its card. All the lengths are settings.
Edit logged time. Open a task and choose Edit logged time to see every session logged on it, with its day, start and end. Change a session's day, start time or length, or delete it, and the time entry note, the task's Time Log row and the totals of the task and its project all change together.
![]()
Backlog. Work you may do one day but have not taken on yet. It gets its own column, folded by default, with a one-line field for adding to it: type, Enter, next. Backlog tasks stay out of open tasks, overdue and project progress, and starting a timer on one moves it to active.
Foldable columns. Every column on either board has an arrow that folds it into a narrow bar, and the board remembers which ones you folded. A folded bar still takes a dropped card.
Full screen. A button on both boards lifts the board over the whole window, hiding the sidebars, ribbon, tab bar and status bar. It is one switch for both boards and is remembered; press it again or Esc to get everything back.
Right-to-left boards. A setting mirrors the Kanban and the projects board, so the first column starts on the right and cards read right to left. Each piece of text keeps the order of its own language.
Dashboard. Four tabs:
Every period can be stepped backwards and forwards, so past months and years are reachable rather than everything being pinned to today.
![]()
![]()
The forest turns a period's work into a landscape you can read at a glance: a grove per project, a tree per finished task, the bigger the tree the more hours it took. Sprouts are the work still in progress, flowers the pomodoros, and a grove gone warm is a project that has gone quiet. It is drawn from the notes you already have, and nothing is written back.
![]()
Filters and focus mode. Narrow either board down by project — type part of a name or pick one from the list — by priority, or on the Kanban board by task title too. A Focus button on both boards drops everything but the active column; toggle it on either board and the other follows, since it is one shared switch rather than two.
Group by project. The Kanban's By project button groups the cards by project: a row per project across the columns, or each project's tasks kept together inside every column, as chosen in settings. Groups fold, and stay folded. Pin a project to keep it at the top. Tasks with no project come next, ready to be given one, and the other projects are ordered by recent work, priority, unfinished tasks or name. Drag the edge of the project names to fit long names on one line.
![]()
Due dates. A calendar-aware date picker for tasks and projects — it draws in Gregorian or Jalali, whichever the calendar setting is, so a due date reads the same everywhere on the dashboard.
Archive. When a task or project reaches a closed status (done, cancel and quite unless you change the list in settings) it moves into an archive folder together with its time entries. Closing a project takes its tasks with it. Reopening walks it back, except that a task which is done in its own right stays put. Archived items still appear in the board and every report — only the files move.
Workspaces. Separate sets of folders — work and personal, say — each with its own projects, tasks, time entries and archive.
Calendar. Gregorian or Jalali (Shamsi/Persian), with the week starting on whichever day you use. Month grouping, week boundaries, seasons and quarters, digits and labels all follow the choice.
Totals that stay right. A project note's hours and task_count follow its tasks as they change. If the totals ever drift from the logged time, for example after editing notes by hand, Rebuild totals from logged time recounts every task and project in the workspace.
Folders are created for you on first run. Everything about them is configurable in settings.
A task is a note with frontmatter and a Time Log table:
---
type: task
title: "Write the release notes"
project: "[[website-relaunch]]"
status: "active"
priority: "medium"
due: "2026-08-20"
total_hours: 3.5
days_count: 2
workspace: "[[Work]]"
---
# Write the release notes
## Time Log
| Date | Hours | Start | End |
|------|-------|-------|-----|
| 2026-08-18 | 2 | 2026-08-18T09:00:00.000Z | 2026-08-18T11:00:00.000Z |
Anything you write beyond that template is yours, and the board marks cards that carry notes so you can find them without opening each one.
Each logged session also gets a small note of its own in the workspace's TimeEntries folder, holding its task, hours, start and end. Edit or delete sessions from the task dialog rather than by hand, so all three places stay in step.
| Command | What it does |
|---|---|
| Open kanban board | |
| Open project dashboard | |
| New task / New project | |
| New task in backlog | the backlog column's "+", from anywhere |
| Start timer on the open note | if the open note is a task |
| Start a timer without a task | choose the task while it runs or when you stop |
| Choose the task for the running timer | |
| Pause or resume the timer | |
| Stop the timer | logs the tracked time |
| Reset the timer | back to zero, still running, nothing logged |
| Discard the timer | throws it away |
| Toggle focus mode | active items only — shared between both boards |
| Toggle full screen for the boards | shared between both boards |
| Tidy archive | moves closed items, restores reopened ones |
| Rebuild totals from logged time | recounts every task's and project's totals |
| Pomodoro: end the break now | when Pomodoro is on |
| What's new | what changed in this version |
The plugin exposes a small versioned API so a companion plugin can create real tasks rather than reproducing the frontmatter format:
const pm = app.plugins.plugins["project-manager-with-time-tracking"]?.api;
if (pm?.version >= 1) {
const project = await pm.ensureProject(workspaceId, { title: "Website relaunch" });
await pm.createTask(workspaceId, {
title: "Write the release notes",
projectSlug: project.slug,
extra: { source_id: "abc-123" }, // your own id, for skipping duplicates later
});
}
listWorkspaces, listProjects, ensureProject, createTask and findTaskBy are available. findTaskBy(workspaceId, key, value) is how you tell whether you already imported something.
This project is offered for free so everyone can use it without restrictions. If you found this tool useful, you can support its continuous development and improvement through donations.
MIT — see LICENSE.