Kei Kato1k downloadsManage tasks on an interactive Gantt timeline where each note is a single task. Drag bars to reschedule, link FS/SS/FF dependencies, set milestones, and edit details in a side panel.
English | 日本語
An interactive project-management Gantt for Obsidian. One Markdown file = one task; a configured folder is shown and edited as a "table + timeline" Gantt — drag bars to reschedule, link dependencies, set milestones, sort and filter, and move tasks between folders by dragging.
Requires Obsidian 1.7.2 or later.
Open a folder as a Gantt from the left-column ribbon button, or by right-clicking the folder → Open as Gantt:

The folder opens as a table + timeline, with groups, bars, milestones, and dependency arrows:

Click a task to open the detail panel and edit its dates, status, assignee, progress, and body:

Projects/Cleanup)..md files inside them become tasks.start/end frontmatter. Every column the table can show is editable in place — just double-click the cell. Start and Due open a calendar, Progress takes a percentage (0–100; blank or 0 clears it), Status opens a dropdown, Assignee is a text field that suggests names already used in the board, and Tags opens a small editor with a chip per tag (× to remove) and an add field that suggests the vault's existing tags. Enter or clicking away saves, Esc cancels.The UI follows Obsidian's display language. Supported: English, Japanese, Korean, Chinese (Simplified & Traditional), French, Spanish, and Russian; any other language falls back to English.
An options row above the table shapes how the board is displayed.
Group by folder, status, or assignee, and color by status or assignee (with a legend):

Sort by clicking a column header; click it again to flip ascending/descending (↑/↓):

Choose columns with the gear button — show or hide Start, Due, Progress, Assignee, Status, and Tags. Any column shown here can be edited by double-clicking its cell. The column layout and sort are remembered across sessions:

Flat view lists every task in one sorted list, ignoring folders and nesting:

Progress line draws a jagged line down the board from today, bending to each task's achieved progress: left of today means behind schedule, right means ahead. Per row, the line sits at the point on the bar matching the task's progress — so a task due last week but only 40% done pulls the line back to its 40% mark. Tasks at 100% and tasks that haven't started yet (and aren't due to) stay on the today line, as do folder rows and rolled-up parent bars. A task past its start date with no progress pulls the line back to its start date. Its color is configurable in Settings → Task Gantt → Progress line color.

A filter row below the options narrows the board. Click Add filter and pick a field — Name, Status, Status group, Assignee, Tag, Start date, or Due date — then set its condition. Each filter shows as a chip you can click to edit or remove with ×.

With two or more filters, choose Show items matching → Match all (AND) or Match any (OR) on the right.
Open Presets for one-click filter sets. Built-in presets are No dates (no bar), Has dates, Overdue, Unassigned, Completed, and Incomplete. The last two read the status group rather than status names: Completed is everything in the Completed group, and Incomplete is everything that is neither Completed nor Cancelled — active work, deferred work, and tasks with no status at all. Build any combination of filters and save it as a preset by typing a name — saved presets can be re-applied or deleted, and Clear filters removes them all. Filters and presets persist across sessions.

When grouped by folder, drag a task row onto a folder to move the task into it (or onto another task to drop it into that task's folder). Links are updated automatically, and the move is undoable with Ctrl/Cmd+Z or the undo button. Empty folders stay visible as rows so you always have a drop target; the Show empty folders toggle (on by default) controls this.
Give a task a parent (a single wikilink to another task) and it nests under that parent in the table, with a chevron to collapse or expand. When grouped by folder, drag a task onto another task to make it a subtask — it moves into the parent's folder with its whole subtree; drag it onto a folder to detach it back to the top level. Cycles are blocked, and every move is undoable. The Roll up toggle draws a parent's bar (and its Start/Due cells) as the span of its descendants. Set or clear the parent from the detail panel.
Tasks use Obsidian's native tags (frontmatter tags: plus inline #tag), so they stay in sync with Obsidian's search and tag pane. Group by Tag to see a task under each of its tags — a multi-valued task appears in several groups — filter by tag, and show a Tags column of chips. When grouped by tag, drag a task onto a tag group to add that tag, distinct from a folder drop, which moves the task. Add or remove tags in the detail panel, or double-click the Tags cell to open the same editor there. Either way, tags are written to frontmatter tags: — a #tag written in the body is shown but can't be removed from here.
Every tag starts from a single Default tag color — Obsidian's own tag color unless you change it in Settings → Task Gantt → Tag colors — and you can override any individual tag on top of that. Folders get an automatic color from their name instead.
Right-click a folder heading, a tag heading, or a tag chip to change or reset its color. Setting a color registers that tag under Per-tag colors in settings; resetting removes it again, so the list holds exactly the tags you have deliberately coloured — everything else follows the default. You can also add a tag there by picking it from your vault's tags, and removing one asks for confirmation, since the settings tab has no undo. Rows are listed alphabetically. Folder colors are right-click only.
If the video doesn't play above, watch it here.
Press + New task to create a dated note in the current folder and rename it immediately. You don't have to start there, though: every note inside the target folder already appears as a row — including notes with no dates yet — so you can also click an existing note and set Start / Due in the detail panel to turn it into a scheduled task. Empty cells are double-click editable too, so you can fill a blank value straight from the table.
Each task is a single Markdown file. The schedule lives in frontmatter; the description is the body.
---
start: 2026-02-04
end: 2026-02-07
status: in-progress
assignee: kato
progress: 40
after:
- "[[Sweeping]]" # predecessor (dependency arrow)
---
# Wiping
The body is the task description (shown in the detail panel).
| Frontmatter | Meaning |
|---|---|
start / end |
Start / end date YYYY-MM-DD (bar position and length). A time of day can be added as YYYY-MM-DDTHH:mm+09:00 (edit via the detail panel; the offset follows the Timezone setting). |
status |
Status ID (defined in settings, reflected in bar color; its status group drives the Completed / Incomplete filters). |
assignee |
Assignee (label shown next to the bar). |
progress |
Progress 0–100 (fill inside the bar; editable with the detail-panel slider, or by double-clicking the Progress column). |
after |
Array of wikilinks to predecessors (dependency arrows; violations turn red). |
milestone |
true for a diamond (zero duration). |
gcal |
true opts the task into Google Calendar sync (only used when Sync flagged tasks only is on). |
gcalId |
Set automatically once the task is pushed to Google Calendar — the linked event's ID. Don't edit by hand. |
Milestones: a task that has only an end date (no start) is automatically treated as a milestone and drawn as a diamond. Setting milestone: true does the same. To turn a milestone back into a ranged task, give it a start date.
The task name is the file name (without extension); the group is the parent subfolder name. Frontmatter key names can be changed in settings.
Sample data for a quick try lives in examples/Cleaning Project お掃除プロジェクト/ (point the target folder at it).
Drag from a bar's round handle to another bar to create a dependency. The connected ends decide the type: FS (finish→start), SS (start→start), FF (finish→finish). SS/FF successors snap to their predecessor when you reschedule. Click a dependency line to remove it (undo with Ctrl/Cmd+Z or the undo button).
Open Settings → Task Gantt to configure the default folder, subfolder recursion, default zoom, and the date display format (YYYY/MM/DD, DD/MM/YYYY, or MM/DD/YYYY; stored dates always stay ISO YYYY-MM-DD).
The Timezone setting (system or a fixed GMT offset, listed with representative cities) controls how times of day are displayed and saved. Changing it re-displays stored times in the new offset.

The Progress line color setting sets the color of the jagged line drawn by the Progress line view option, with a button to reset it to the default amber.
Statuses are fully customizable — add, edit, or delete them. Each status has an id (matches the status frontmatter value), a label, a group, and a color reflected in the bar.
The group is what tells the plugin whether a task is finished. There are four, borrowed from Wrike and not extensible: Active (being worked on), Completed (done), Deferred (paused — on hold, blocked, waiting), and Cancelled (dropped). Every status belongs to exactly one, and the Completed / Incomplete filter presets read only the group, never the status name — so a status called Shipped counts as finished as long as it sits in the Completed group. If no status is in the Completed group, settings say so and the Completed preset stays empty.
Upgrading from 2.8.x: existing statuses are assigned a group once, guessed from their id and label (
done/完了→ Completed,cancelled/中止→ Cancelled,on hold/blocked/保留→ Deferred, everything else → Active). Check the list after upgrading and correct anything the guess got wrong.
You can also rename the frontmatter keys the plugin reads (start, end, status, assignee, after, progress, milestone) to match your own vault conventions.

Task Gantt can post reminders for tasks that have a time of day to Discord and/or Slack via incoming webhooks. In Settings → Task Gantt → Notifications, set the webhook URLs, choose the targets (start / due), and pick the lead times (1 week / 1 day / 1 hour / 10 minutes before, or at the exact time). Use Send a test message to verify the webhook instantly.


Task Gantt can keep tasks and a Google calendar in two-way sync: task changes (create / reschedule / delete) are pushed as events, and moving or deleting those events in Google Calendar flows back into the task's frontmatter. Each direction can be toggled independently in Settings → Task Gantt → Google Calendar.
The plugin has no server, so it uses your own Google Cloud project:
127.0.0.1 (loopback). Then pick the calendar to sync (a dedicated calendar is recommended).
gcal: true flag in their frontmatter sync (opt-in; toggle it per task in the detail panel — which also shows an Open in Google Calendar link once synced). Turn off Sync flagged tasks only to sync every dated task in the scope folder instead.gcalId frontmatter key (set automatically — don't edit it by hand).Example — Test1 and Test2 carry gcal: true and pushed through as events; Test3 (no flag) stayed local only. The Test3 from GC event and the 七夕 holiday were created directly in Google Calendar and never became tasks:

calendar.events and calendar.calendarlist.readonly scopes. The OAuth refresh token, client ID, and secret are stored in plain text in the plugin's data.json inside your vault — treat that file accordingly (be careful when the vault itself is synced or shared).npm install # install deps
npm run dev # watch build
npm run build # type-check + production build
npm test # headless model tests
Copy main.js / manifest.json / styles.css into <vault>/.obsidian/plugins/task-gantt/ to enable it.
See docs/adr/ for the rationale behind design decisions (latest: ADR-0005) and CONTEXT.md for terminology.
Auto-scheduling (critical path), sub-day time granularity, and cross-folder aggregation are not implemented. Custom-field columns are planned.
MIT — see LICENSE.
English | 日本語
プロジェクト管理ツールのようなタスク管理 UI を Obsidian で実現するプラグインです。1 ファイル = 1 タスクとし、指定フォルダ配下を 「表+タイムライン」ガントで表示・編集します。バーのドラッグで日程変更、依存の作成、マイルストーン、ソート・フィルタ、ドラッグでのフォルダ移動などができます。
Obsidian 1.7.2 以降が必要です。
左列のリボンボタン、またはフォルダの右クリック →**「Open as Gantt」**から Gantt として開きます:

「表+タイムライン」で開き、グループ・バー・マイルストーン・依存の矢印が表示されます:

タスクをクリックすると詳細パネルが開き、日付・状態・担当・進捗・本文を編集できます:

Projects/お掃除)。.md がタスクになります。start/end に書き戻します。テーブルに表示できる列はすべて、セルをダブルクリックすればその場で編集できます。 開始・期限はカレンダー、進捗は % の直接入力(0–100。空欄または 0 で未設定)、ステータスはドロップダウン、担当者はボード内で既に使われている名前を候補に出すテキスト欄、タグは詳細パネルと同じエディタ(タグごとのチップと × による削除+Vault 内の既存タグを候補に出す追加欄)が開きます。Enter またはフォーカスを外すと保存、Esc で取消します。UI 表示は Obsidian の表示言語に追従します。対応言語:英語・日本語・韓国語・中国語(簡体/繁体)・フランス語・スペイン語・ロシア語(その他は英語にフォールバック)。
表の上のオプション行で、ボードの見せ方を調整できます。
グループ化(フォルダ/ステータス/担当者)と色分け(ステータス/担当者・凡例付き):

ソートは列ヘッダをクリック。もう一度クリックで昇順/降順を切替(↑/↓):

列の表示は歯車ボタンから、開始・期限・進捗・担当者・ステータス・タグを出し分け。ここに出せる列はすべてセルのダブルクリックで編集できます。列レイアウトとソートはセッションをまたいで保存されます:

フラット表示は、フォルダや入れ子を無視して全タスクを1本のソート済みリストで表示します:

稲妻線は、今日を基準にした垂線を各タスクの実績到達点まで折り曲げた折れ線です。今日より左に折れれば遅れ、右なら進みを意味します。各行の点は、タスクの progress に対応するバー上の位置に置かれます(先週が期限なのに 40% のタスクは、線をその 40% 地点まで引き戻します)。100% のタスク、まだ開始日が来ていない未着手タスク、フォルダ行、ロールアップ中の親バーは今日線上を素通りします。開始日を過ぎているのに進捗 0% のタスクは、線を開始日まで引き戻します。線の色は設定 → Task Gantt → 稲妻線の色で変更できます。

オプション行の下のフィルタ行でボードを絞り込めます。フィルタを追加から項目(名前/ステータス/ステータスグループ/担当者/タグ/開始日/期限日)を選び、条件を設定します。各フィルタはチップで表示され、クリックで編集、**×**で削除できます。

フィルタが2件以上あるときは、右端の 表示するタスク → すべてに一致(AND)/いずれかに一致(OR)で結合方法を選べます。
プリセットからワンクリックでフィルタ構成を切り替えられます。組み込みプリセットは 日付なし(バーなし)/日付あり/期限切れ/未割り当て/完了済み/未完了。後ろの 2 つはステータス名ではなくステータスグループを見ます:完了済みは完了グループのタスク、未完了は完了でもキャンセルでもないタスク(アクティブ・延期・ステータス未設定)です。任意のフィルタ構成に名前を付けてプリセットとして保存でき、保存したプリセットは再適用・削除が可能です。フィルタをクリアで全解除。フィルタとプリセットはセッションをまたいで保存されます。

フォルダでグループ化しているとき、タスク行をドラッグしてフォルダにドロップするとそのフォルダへ移動できます(別タスクへドロップすると、そのタスクと同じフォルダへ)。リンクは自動更新され、移動は Ctrl/Cmd+Z または取り消しボタンで元に戻せます。空のフォルダも行として表示されるので常にドロップ先になります(空フォルダを表示トグル=既定ON で切替)。
タスクに parent(別タスクへの単一 wikilink)を与えると、表でその親の下に入れ子表示され、シェブロンで折りたたみできます。フォルダでグループ化中は、タスクを別タスクへドラッグするとサブタスク化(親のフォルダへサブツリーごと移動)、フォルダへドラッグすると親を解除してトップレベルへ戻します。循環は禁止され、移動はすべて取り消し可能です。ロールアップトグルで、親のバー(と開始・期限セル)を子孫全体の範囲として描けます。親の設定・解除は詳細パネルからも行えます。
タスクは Obsidian ネイティブの tags(フロントマター tags: +本文 #tag)を使うので、Obsidian の検索・タグペインと同期します。タグでグループ化すると、各タグの下にそのタスクが表示され(多値のタスクは複数グループに登場)、タグでの絞り込みや、チップ表示のタグ列も使えます。タグでグループ化中は、タスクをタグのグループへドラッグするとそのタグを付与できます(フォルダへのドロップ=移動とは別動作)。タグの追加・削除は詳細パネル、またはタグセルのダブルクリックで同じエディタを開いて行えます。どちらもフロントマターの tags: に書き込むため、本文中に書いた #tag は表示されますがここからは削除できません。
タグの色はすべて タグの既定色 を土台にし、そこから個別に上書きします。既定色は 設定 → Task Gantt → タグの色 で指定でき、未設定なら Obsidian 本体のタグ色に従います。フォルダは従来どおり名前から自動で色が付きます。
フォルダの見出し・タグの見出し・タグのチップを右クリックして、色の変更/リセットができます。色を指定すると、そのタグが設定の個別のタグに登録され、リセットすると登録が外れます。つまり一覧には自分で色を決めたタグだけが並び、それ以外は既定色に従います。設定側からは Vault のタグを選んで追加でき、削除には確認が入ります(設定画面には取り消しが無いため)。並びはタグ名順です(フォルダの色は右クリックのみ)。
上で動画が再生されない場合は こちら からご覧ください。
+ 新規タスクで現在のフォルダに日付付きノートを作り、すぐ名前を付けられます。もちろんそこから始める必要はありません。対象フォルダ内のノートは、まだ日付が無いものも含めてそのまま行として表示されるので、既存ノートをクリックして詳細パネルで 開始 / 期限 を入力すれば、そのままスケジュール付きタスクになります。各セルは値が空のままでもダブルクリックで編集できるので、表から直接入力しても構いません。
各タスクは 1 つの Markdown ファイル。スケジュールはフロントマター、説明は本文に書きます。
---
start: 2026-02-04
end: 2026-02-07
status: in-progress
assignee: kato
progress: 40
after:
- "[[掃き掃除]]" # 先行タスク(依存=矢印)
---
# 拭き掃除
本文がタスクの説明(詳細パネルに表示)。
| フロントマター | 意味 |
|---|---|
start / end |
開始 / 終了日 YYYY-MM-DD(バーの位置と長さ)。YYYY-MM-DDTHH:mm+09:00 形式で時刻も設定可(詳細パネルで編集。オフセットはタイムゾーン設定に従う) |
status |
ステータス ID(設定で定義、バー色に反映。所属するステータスグループが完了済み/未完了フィルタの根拠) |
assignee |
担当者(バー脇にラベル表示) |
progress |
進捗 0–100(バー内の塗り。詳細パネルのスライダー、または進捗列のダブルクリックで編集) |
after |
先行タスクへの wikilink 配列(依存=矢印、違反は赤) |
milestone |
true で菱形(期間ゼロ) |
gcal |
true で Google カレンダー同期(後述)の対象にする(フラグ付きタスクのみ同期がオンのときだけ判定に使用) |
gcalId |
タスクを Google カレンダーへ Push すると自動で入る、紐付け先イベントの ID。手動編集不可 |
マイルストーン: end(終了日)だけがあり start(開始日)が無いタスクは、自動的にマイルストーンと判定され菱形で描画されます。milestone: true でも同じです。通常タスクに戻すには start(開始日)を与えてください。
タスク名はファイル名(拡張子なし)。グループは直上のサブフォルダ名。フロントマターのキー名は設定で変更できます。
examples/Cleaning Project お掃除プロジェクト/ に動作確認用のサンプルがあります(対象フォルダにそれを指定)。
バーの丸ハンドルから別のバーへドラッグすると依存を作成します。つないだ端で種類が決まります:FS(終了→開始)・SS(開始→開始)・FF(終了→終了)。SS/FF の後続は、先行の日程変更に追従します。依存線をクリックで切断(Ctrl/Cmd+Z または取り消しボタンで戻せます)。
設定 → Task Gantt から、既定フォルダ・サブフォルダの再帰・既定ズーム・日付の表示フォーマット(YYYY/MM/DD/DD/MM/YYYY/MM/DD/YYYY。保存値は常に ISO YYYY-MM-DD)を設定できます。
タイムゾーン設定(システム / 固定GMTオフセット・代表都市付き一覧)で時刻の表示・保存に使うタイムゾーンを選べます。変更すると保存済みの時刻が新しいオフセットに換算されて表示されます。

稲妻線の色設定で、表示オプションの稲妻線で描かれる折れ線の色を変更できます(既定の橙に戻すボタン付き)。
ステータスは自由に追加・編集・削除できます。各ステータスは id(フロントマターの status 値と対応)・ラベル・グループ・色(バー色に反映)を持ちます。
グループは「そのタスクが終わっているか」をプラグインが判断する唯一の根拠です。Wrike に倣った 4 種固定で、増やすことはできません:アクティブ(作業中)・完了(終了)・延期(保留・ブロック・待ち)・キャンセル(中止)。各ステータスはちょうど 1 つに属し、フィルタプリセットの完了済み/未完了はグループだけを見ます(ステータス名は見ません)。そのため リリース済み という名前でも、完了グループに入れておけば完了として扱われます。完了グループのステータスが 1 つも無い場合は設定画面に注意が出て、完了済みプリセットは常に 0 件になります。
2.8.x からの更新時:既存のステータスには、id とラベルからグループを一度だけ推測して設定します(
done/完了→ 完了、cancelled/中止→ キャンセル、on hold/blocked/保留→ 延期、それ以外 → アクティブ)。更新後に一覧を確認し、外れているものは直してください。
プラグインが読むフロントマターのキー名(start / end / status / assignee / after / progress / milestone)も、各自の Vault の慣習に合わせて変更できます。

時刻を設定したタスクの開始・期限を、Incoming Webhook 経由で Discord / Slack に通知できます。設定 → Task Gantt → 通知 で Webhook URL・対象(開始/期限)・通知タイミング(1週間前・1日前・1時間前・10分前・時刻ちょうど)を設定してください。テスト送信ボタンで Webhook の疎通をすぐ確認できます。


タスクと Google カレンダーを双方向で同期できます。タスクの作成・日程変更・削除はイベントとして反映され、Google カレンダー側でのイベント移動・削除はタスクのフロントマターへ書き戻されます。設定 → Task Gantt → Google カレンダー で方向ごと(Push / Pull)に ON/OFF できます。
プラグインにはサーバーがないため、ユーザー自身の Google Cloud プロジェクトを使います。
127.0.0.1(ループバック)で認可を受け取ります。その後同期先カレンダーを選択してください(専用カレンダーの利用を推奨)。
gcal: true フラグを付けたタスクだけが同期されます(オプトイン。詳細パネルのトグルで切替でき、同期済みタスクには Google カレンダーで開く リンクも表示されます)。フラグ付きタスクのみ同期をオフにすると、対象フォルダ内の日付付きタスク全てが対象になります。gcalId キーに自動で保存されます(手動編集は不可)。例:Test1 と Test2 は gcal: true を付けて Push され、イベントとして反映されています。Test3 (no flag) はフラグが無いためローカルのみに留まっています。一方 Test3 from GC と祝日「七夕」は Google カレンダー側で直接作られたもので、タスクとしては取り込まれていません:

calendar.events と calendar.calendarlist.readonly のみです。OAuth のリフレッシュトークン・クライアント ID・シークレットは Vault 内の data.json に平文保存されます。Vault 自体を同期・共有している場合はご注意ください。npm install # 依存をインストール
npm run dev # 監視ビルド
npm run build # 型チェック+本番ビルド
npm test # ヘッドレスのモデルテスト
main.js / manifest.json / styles.css を <vault>/.obsidian/plugins/task-gantt/ にコピーして有効化。
設計判断の経緯は docs/adr/(最新は ADR-0005)、用語は CONTEXT.md を参照。
自動スケジューリング(クリティカルパス)・時刻粒度・複数フォルダ横断は未実装。カスタムフィールド列は予定。
MIT ライセンス(LICENSE を参照)。