README file from
GithubProperty Kanban
A kanban task board for Obsidian driven entirely by note frontmatter properties. Task notes are the single source of truth: creating, moving, and deleting cards on the board updates the note properties instantly — and editing notes updates the board.
Features
Kanban board
- Cards are grouped automatically by any frontmatter field
- Cards within columns can be sorted automatically by any frontmatter property, ascending or descending
- Drag & drop cards between columns → frontmatter updates automatically
- Click a card title to open the note (if the note is already open in another tab, jumps to that tab instead of opening a duplicate)
- File changes, creations, and deletions are detected in real time and the board refreshes automatically
First-run setup (automatic sample tasks)
The first time you open the board, if the task folder contains no notes yet, the plugin creates the folder and seeds four sample tasks.
- The sample note bodies explain basic usage (moving cards, adding tasks, customizing the board, swimlanes), generated in English, Japanese, or Chinese (Simplified/Traditional) following your Obsidian language setting
- The sample properties match the default card display properties (category / project / due / created), so the colored tags and due dates render out of the box
- The board opens in swimlane view (lane:
project× column:status); with two differentprojectvalues included, the two-dimensional layout is visible from the start - This happens only once, on the first board open. Folders that already contain notes are left untouched, and existing notes are never modified
- Delete the sample cards from the board whenever you no longer need them
Swimlanes
Group in two dimensions using two properties:
- Lane: the outer grouping (e.g. project) → horizontal rows
- Column: the grouping within each lane (e.g. status) → columns inside each row
┌─ Project A ──────────────────────────────┐
│ | To do | In progress | Done | │
│ | card | card | card | │
└──────────────────────────────────────────┘
┌─ Project B ──────────────────────────────┐
│ | To do | In progress | Done | │
│ | card | card | card | │
└──────────────────────────────────────────┘
Cards can be dragged between lanes as well — both the lane and column frontmatter fields are updated at once.
Card creation
- Create from the "+ New task" button at the top of the board, or "+ Add card" in each column
- Values auto-detected from the frontmatter of existing tasks are shown as suggestions
- You can also type a brand-new value to set a new property value on the spot
- Fields whose Obsidian property type is Date or Date & time get a native calendar picker instead of a text box, and the value is written in Obsidian's own format (
YYYY-MM-DD/YYYY-MM-DDTHH:mm:ss). Untyped fields whose existing values all look like dates get the picker too - A Markdown note with frontmatter is created in the configured folder
Card deletion
- Hover over a card to reveal the
⋯menu button - Choosing "Delete" moves the note to the trash
- A confirmation dialog is shown (check "Don't ask again" to skip it in the future)
- On deletion, parent links of its child notes are cleared and the note is removed from its parent's children list automatically
Quick action button
Show a one-click button on cards that sets a specific frontmatter field to a preset value (e.g. set status to "Done").
- Enable it under "Quick action button" in the settings and configure the label, target field, and value
- The button is hidden on cards that already have the target value
- Clicking it updates the note frontmatter instantly and shows a notice
Parent/child links
Manage parent/child relationships between cards as frontmatter wikilinks, so you can follow the hierarchy in Obsidian's graph view and backlinks.
- Data model: the child note's parent link (e.g.
parent: "[[Parent task]]") is the source of truth; the parent note's children list (a list of wikilinks) is derived data generated by the plugin - Set parent: card
⋯menu → "Set parent…" opens a fuzzy search (the card itself and its descendants are excluded to prevent cycles) - Remove parent:
⋯menu → "Remove parent" - Add child: parent card's
⋯menu → "Add child…" opens the create modal with the parent pre-selected - Multi-level: since the hierarchy follows parent links, grandchildren and deeper levels work too
- Rebuild: if lists get out of sync from manual edits, use "Rebuild parent/child links" in the settings or the command palette to regenerate all children lists
Board options (⚙)
Click the gear icon in the header to open the board options popover:
| Option | Description |
|---|---|
| Lane / Column | Switch the frontmatter fields used for grouping |
| Sorting | Sort cards within columns by one frontmatter property, ascending or descending. Numbers compare numerically, cards missing the property go last; "None" keeps the natural order |
| Zoom | Zoom the board in/out (50%–200%) |
| Card properties | Toggle which properties are shown on cards |
| Column order | Reorder lanes/columns (drag & drop) and toggle their visibility |
Card display properties
Configure which frontmatter fields are shown as tags on cards.
- Add or remove any field — pick one from the fields found in your task folder notes, or type a field name manually
- Pick a color per field (blue, green, red, yellow, purple, gray, orange, pink, teal)
- Toggle from the settings or the board options popover
Installation
From the community plugin browser (recommended)
- Open Settings → Community plugins → Browse
- Search for "Property Kanban"
- Install and enable
Manual installation
- Download
main.js,manifest.json, andstyles.cssfrom the latest release - Create the folder
.obsidian/plugins/property-kanban/in your vault - Copy the three files into that folder
- Reload Obsidian and enable "Property Kanban" under Settings → Community plugins
Usage
- Enable the plugin
- Click the dashboard icon in the left ribbon, or run
Property Kanban: Open boardfrom the command palette - The board opens. On first open, the task folder and four sample tasks with a short usage guide are created automatically, shown as swimlanes (lane:
project× column:status) - To match your own notes, pick any frontmatter properties as the lane/column in the ⚙ board options — columns are generated automatically from the values your notes actually use (set Column to "None" for a one-dimensional board)
Settings
| Setting | Description | Default |
|---|---|---|
| Task folder | Folder path where task notes are stored | tasks |
| Card display properties | Frontmatter fields shown on cards, with colors | category, project, due, created |
| Quick action: show button | Show the quick action button on cards | off |
| Quick action: button label | Text shown on the card | Done |
| Quick action: target field | Frontmatter field to update | status |
| Quick action: value to set | Value written when the button is clicked | Done |
| Parent field name | Frontmatter field written to child notes for the parent link | parent |
| Children field name | Frontmatter field auto-generated on parent notes | children |
| Maintain children list | Keep a wikilink list of children on parent notes (off = parent link only) | on |
| Add empty parent field to new cards | Write an empty parent field even without a parent | off |
Grouping (lane/column), ordering, visibility, and zoom are configured from the board options popover and saved automatically.
The plugin UI is in English by default and switches to Japanese or Chinese (Simplified/Traditional) following the Obsidian interface language.
How it works
- Frontmatter is read and written by parsing file content directly (no dependency on the metadata cache)
- Grouping fields and column values are auto-detected from task note frontmatter
- Board refreshes are debounced (150 ms) to coalesce rapid file events
- Card deletion uses
fileManager.trashFile()— notes are moved to the trash, never permanently deleted - No data ever leaves your vault; the plugin makes no network requests
Development
# Install dependencies
npm install
# Development build (watch mode)
npm run dev
# Production build
npm run build
# Type check + ESLint + tests
npm run check