spinechoarcanist95 downloadsManage Action notes on a lightweight, frontmatter-driven Kanban board — no Dataview required. Drag-and-drop cards, custom statuses and priorities, due-date tracking, and days-in-status aging, standalone or embedded inline.
Manage Action notes on a lightweight, frontmatter-driven Kanban board for Obsidian — no Dataview or Bases required.
Action Kanban turns a folder of notes, called Actions, into a Kanban board. You can open it as its own view or embed it directly inside another note, like a daily note. Each Action note becomes a card. Its status field decides which column it lands in, and priority groups it within that column. Drag and drop a card to change its status or reorder it within its priority group, and a self-healing order field remembers exactly how you arranged things. Everything driving the board lives in the notes' own YAML frontmatter, so there's no separate database and no need for the Dataview plugin or Obsidian's own Bases feature — Action Kanban reads and writes frontmatter directly and doesn't rely on either.


🤖 This plugin's code is written entirely by Claude (Anthropic's AI model), directed by the maintainer, and audited for security, performance, and code quality before every release. See About this project for details.
There are plenty of other great Kanban plugins for Obsidian, and it's worth knowing they exist — one of them might genuinely be the better fit for you. Of everything out there, Bases Kanban comes closest to what I actually need from a board, even though its underlying approach is quite different from this plugin's: it's built on top of Obsidian's native Bases feature, while Action Kanban reads and writes your notes' frontmatter directly and needs neither Bases nor the Dataview plugin. What Action Kanban focuses on: the ability to embed the board directly inside a daily note, and the markers I rely on to stay on top of my actions — priority, due date, and time spent in a status, borrowed straight from Jira.
The name "Action" is a deliberate choice: Obsidian already has a native notion of a task — the - [ ] checkbox, and the popular Tasks plugin built around it, which I also use heavily. Calling these cards "Tasks" would create naming collisions in my own vault, so "Action" is the term this plugin uses instead.
The result is a small, opinionated plugin: your notes' frontmatter is the board. No sync, no separate database, no manifest file tracking card order — just fields on the notes you already have. Priority, due date, and time-in-status are built in as first-class markers, and the board drops straight into a daily note instead of living only in its own separate tab.
Action Kanban reads and writes plain YAML frontmatter directly on your notes — there's no separate database, so this is worth understanding before you point it at real notes. Inside your configured Actions folder, the plugin automatically manages these frontmatter keys: Type (or whatever you rename the type field to), status, priority, order, status_changed, and whatever field you set as the due date (default Due Date).
Check whether any of these keys are already used for something unrelated on notes that would fall inside your Actions folder — if they are, Action Kanban may read or overwrite values you didn't intend it to touch. In particular, status_changed and order aren't just read — the plugin automatically writes them into a note's frontmatter the first time the board loads a note that's missing them, whether or not you ever open the plugin's own note-creation flow. See the Frontmatter reference below for exactly which fields get auto-written versus left alone.
Action Kanban makes one network request, entirely opt-in and off by default:
Bing "image of the day" background (Settings → Appearance → Background image → Auto-update from Bing). While this is turned on, once per calendar day the plugin fetches Bing's public daily wallpaper — a small metadata request to www.bing.com/HPImageArchive.aspx, then the image itself from www.bing.com — and uses it as the board's background. No vault content or personal data is sent in either request. The downloaded image is saved to a file inside your vault, in the same folder as your background-image path setting but under its own filename, so it never overwrites a background you chose manually. The photo credit is shown as a small attribution line in the board's corner while this is active.
With this setting off (the default), the plugin makes no network requests at all.
order and status_changed fields auto-populated on load; you never have to set them by hand.
Effort: 3.isDesktopOnly: false), so it should load, but it hasn't been tested on mobile by the maintainer yet — drag-and-drop in particular is untested on touch. Feedback via an issue is welcome.Updates are offered automatically through Obsidian, the same as any other Community Plugin.
SpinEchoArcanist/action-kanbanBRAT will check the repository's manifest.json for new versions and offer updates automatically — useful if you want a build ahead of what's currently on the Community Plugins directory.
main.js, manifest.json, and styles.css.<your-vault>/.obsidian/plugins/action-kanban/.With manual installs you'll need to repeat this process yourself for future updates.
A note only ever becomes a card if both of these are true:
Actions.Type, containing the value Action — configured under Settings → Action Kanban → Structure → Note identification.Open the settings tab and check both before creating anything:
Actions. You can point this at any folder, including a nested path (e.g. 5 Tasks/Actions). If it doesn't exist yet, don't worry — it's created automatically the first time you add a note via New Action (step 2 below).Type. This is the name of the YAML key, and it's just as configurable as its value — worth knowing if Type is already used for something else in your vault (e.g. Type: Book, Type: Person).Action. The value that field must contain.So out of the box, with no settings changed, a card needs to be inside the Actions folder with Type: Action in its frontmatter. Change either the folder or the field/value pair here first if the defaults don't fit your vault.
With the folder set, click New Action in the board's toolbar (or run New Action Note from the Command Palette). This creates a note directly inside your Actions folder with the type field, status, and priority already filled in — no manual YAML editing required.
Prefer to tag an existing note instead? Move it into the Actions folder and add the frontmatter yourself, matching whatever field/value you configured in step 1 — with the defaults, that's just:
---
Type: Action
---
Ribbon icon (dashboard icon) or Command Palette → Open board.
For notes you tag by hand rather than creating via New Action, the plugin auto-writes status_changed and order the first time the board loads them, if they're missing; status and priority fall back to sensible display defaults (1 todo / medium) on any note that omits them.
To embed a board inline instead of opening it in the sidebar, place your cursor in any note (a daily note is a natural fit) and run Command Palette → Embed board (or the callout variant, for a collapsible box).

"Required?" below distinguishes three cases, not two: Yes means the note isn't recognized as an Action at all without it. No — auto-added means you never have to set it yourself, but the plugin will write it into the note's frontmatter the first time the board loads a note that's missing it. Plain No means the plugin never writes it; it's either purely a display fallback or a feature that's simply not shown if it's absent.
| Field | Customizable? | Required? | If missing | Notes |
|---|---|---|---|---|
Type |
Field name: yes · Required value: yes | Yes | Note isn't recognized as an Action | Both configured under Settings → Structure → Note identification. Defaults: field Type, value Action. Accepts a plain scalar or a single-item YAML list. |
status |
Field name: no, always status · Valid values: yes |
No | Defaults to your first "To Do"-style status (1 todo out of the box) for display only — never written to the file |
The key itself can't be renamed, but the whole set of valid values is yours to define under Settings → Structure → Statuses. |
priority |
Field name: no, always priority · Values: no |
No | Defaults to medium for display only — never written to the file |
Always exactly high, medium, or low — neither the key nor the 3 values can be changed. See Known limitations. |
status_changed |
Field name: no, always status_changed |
No — auto-added | Written to the note automatically, with today's date, the first time the board loads it | Accepts a plain scalar date (status_changed: 2026-08-19) or a single-item YAML list. |
| Due date | Field name: yes | No | No due-date rail shown — never auto-written | Configured under Settings → Structure → Note identification, default Due Date. Whatever you set, due_date / Due Date / dueDate are also always recognized as fallbacks. Accepts a plain scalar or a single-item YAML list. |
order |
No — plugin-managed, not user-facing | No — auto-added | Written to the note automatically, the first time the board loads it, with a value placing the card after your existing ones | Leave it out entirely; you shouldn't need to edit it by hand. |
| (meta fields) | Field name: yes, fully your choice | No | — | Only shown if you've added it as a "card meta field" in Settings (experimental). You choose both the frontmatter key and its display label. |
This repository includes Action_Template.md as a starting example — it's a Templater template, entirely optional to use as-is. You're free to write your own instead; the plugin only cares about the frontmatter fields listed above, not how they got there.
What the example template does:
Type, status, priority, tags, and an empty Description field.status_changed, order, and the due-date field blank, letting Action Kanban fill them in on the next board load.To wire it up:
Action_Template.md into your Templater templates folder.If you don't want to install Templater at all, just use Action Kanban's own New action button/command instead — it creates a bare note with sensible default frontmatter and zero external dependencies.
Drag a card onto another column. If that column maps to exactly one status, the move happens immediately — the card's status is updated and status_changed is stamped with today's date.
If the target column maps to more than one status, a small picker appears so you can choose which one:

Drag a card up or down within the same priority group (or anywhere in the column, if priority grouping is off). The new position is saved to the card's order field and is preserved even if the card later moves to a different column and back.
Dropping a card onto a different priority group is intentionally a no-op — priority changes always go through the priority picker below, so drag-and-drop and priority changes never fight each other.
Click a card's chevron icon to open the priority picker:

The card is appended to the end of its new priority group.
Use the toolbar's New action button, or Command Palette → New action note. Unless "Skip name prompt" is enabled in Settings, you'll be asked for a title; the note is then created with default frontmatter and opened automatically.
Click anywhere on a column's header to collapse it to a compact strip, and click again to expand it. This state is remembered across restarts — and shared by every board you have open (the standalone view and any embeds), since it's tracked per column, not per board.
Turning on Tilt collapsed columns in Settings changes the collapsed appearance to a narrow, full-height vertical strip with a rotated title (Trello-style), instead of the default short header-only box.
When "Group cards by priority" is on, click a priority separator (the High/Medium/Low label between groups of cards) to collapse that lane. This collapses the same tier in every column at once, keeping the board's swim lanes aligned — and it's remembered across restarts, the same as column collapse.
The toolbar has All / High / Medium / Low buttons. High/Medium/Low can be combined (multi-select); click All to clear any active filter.
Insert ```action-kanban``` (or use the "Embed Action Kanban board" / "…in a callout" commands) anywhere in a note. Embedded boards auto-refresh whenever a note in your Actions folder changes.
You can pre-filter an embedded board to a single priority by adding a filter: line inside the code block:
```action-kanban
filter: high
```
You can give an embedded board a title bar by adding a title: line — click the bar (or press Enter/Space while it's focused) to collapse the whole board down to just that bar:
```action-kanban
title: This Week
```
Both lines can be combined in the same embed. Collapse state isn't remembered between sessions — an embedded board always opens expanded.
A column can map to more than one status — useful if you want, say, two different "waiting" reasons to visually collapse into a single "Waiting" column. See the Settings reference below for how to configure this; see Moving a card between statuses above for what happens when you drag a card into one.
All of Action Kanban's Command Palette entries are prefixed with "Action Kanban: " by Obsidian automatically.
| Command | What it does |
|---|---|
| Open board | Opens the standalone board view, or reveals it if it's already open. |
| New action note | Creates a new Action note — prompts for a title unless "Skip name prompt" is enabled in Settings. |
| Refresh board | Manually refreshes any open standalone board(s). |
| Embed board | Inserts an empty ```action-kanban``` code block at the cursor. |
| Embed board in a callout | Inserts the same embed, wrapped in a collapsible [!note]+ callout. |
Settings are organized into four tabs: Structure (folders, statuses, columns, card fields), Behaviour (due-date window, done cutoff, ring size, and similar runtime tuning), Appearance (colors and background image), and Debugging.
| Setting | Description |
|---|---|
| Actions folder | Vault folder scanned for Action notes (subfolders included). Has autocomplete on Obsidian 1.4.10+. |
| Setting | Description |
|---|---|
| Frontmatter type field | YAML key used to identify Action notes. Default Type. |
| Frontmatter type value | Value that field must contain. Default Action. |
| Due date field | YAML key for the due date. Default Due Date (also recognizes due_date / dueDate automatically). |
Each status you define maps to one frontmatter value. Configure a label, an ID (must exactly match what you write in status:), a color, and whether it counts as a "Done" status (which enables the auto-hide-old-cards behavior for any column it's placed in). Each status appears in the Columns table below as a colored pill you click to toggle its assignment.

Each column groups one or more statuses under a single label. Every status should be assigned to exactly one column — the settings tab will warn you if any status isn't assigned anywhere.
Optional extra frontmatter fields shown as small chips under a card's title (e.g. "Assignee: Alex" · "Estimate: 3"). Add a row with a display label and the frontmatter key to pull from; a field only appears on a card if that note has a non-empty value for it.
⚠️ This feature is newer and less battle-tested than the rest of the plugin. It works, but treat it as experimental for now.
| Setting | Description |
|---|---|
| Due date warning window (days) | How many days before the due date the countdown rail starts filling toward urgent. Default 7. |
| Done cutoff days | Cards in a "Done" column older than this many days (by status_changed) are hidden, replaced with a "N older cards hidden" note. 0 disables hiding. Default 3. |
| Days-in-status ring size | Diameter in pixels of each card's aging ring. Default 7, range 0–10.5. |
| Group cards by priority | ON: cards are grouped by priority within each column, aligned as swim lanes across all columns — the same priority tier occupies the same row height everywhere on the board, even in columns where it's empty. A tier with zero cards anywhere is omitted entirely. OFF: a single flat list per column, sorted by manual order; priority is still shown on the card but doesn't affect its position. |
| Max visible cards per priority lane | Caps how tall a priority lane can grow before that column scrolls internally, expressed as an approximate number of cards (exact height varies with meta chips, due-date bar, and title length). 0 or empty means unlimited. Default 12. Only applies while "Group cards by priority" is on. |
| Skip name prompt on new action | ON: "New Action" creates a note titled "Untitled" immediately, no prompt. Useful if a Templater Folder Template already asks for the name itself. OFF (default): Action Kanban asks for a title. |
| Tilt collapsed columns | ON: collapsed columns become narrow vertical strips instead of header-only boxes. OFF (default). |
| Setting | Description |
|---|---|
| Custom colours | Override the board's toolbar, board, column, and card background colors independently for light and dark themes. Off by default, in which case Obsidian's standard theme colors are used everywhere. |
| Accent colours | Replace Obsidian's default accent color with a themed palette for the toolbar's active state, column-header hovers, and similar accents. Off by default. |
| Background image | Show an image behind the whole board. Off by default. |
| Background image path | Vault-relative path to an image (e.g. Attachments/board-bg.png). A path outside the vault won't work — only vault-relative paths are supported. Ignored while "Auto-update from Bing" is on. |
| Auto-update from Bing | Once a day, replaces the background with Bing's "image of the day" instead of a manually-chosen image. See Network use. Off by default. |
| Overlay contrast | How solid toolbar buttons and column backgrounds stay over a background image — higher keeps controls more readable, lower shows more of the image through them. |
| Setting | Description |
|---|---|
| Enable debug logging | Writes detailed diagnostic messages to the developer console. Leave off unless troubleshooting — it's verbose. |
Most settings above note that existing open boards need a manual refresh to pick up a change — closing and reopening the board (or hitting its refresh button) is enough.
Type (or your renamed field), status, priority, order, status_changed, and your configured due-date field are all read by the plugin, and order/status_changed specifically get written automatically if missing. If any of these are already used for something unrelated on notes that fall inside your Actions folder, check for conflicts before enabling the plugin — see A note on frontmatter keys above.high, medium, low. Unlike Statuses and Columns, there's no way to rename, add, or remove priority levels.Action Kanban was designed, specified, and tested by SpinEchoArcanist — every feature, naming decision, and bug report is theirs. The implementation itself — main.js, styles.css, and this README — was written entirely by Claude, Anthropic's AI model, across a series of development sessions directed by the maintainer.
What this actually looks like in practice: I don't write the code myself, but every session works from a fixed protocol, not a loose description handed off and shipped as-is. I state requirements precisely, Claude quotes the exact existing code before changing it and reports what changed rather than assuming, and nothing goes in without me testing it manually in a live Obsidian vault first. On top of that, before any release I have Claude run dedicated audits — security (injection, unsafe file writes, unsanitized paths), memory-leak and lifecycle checks, performance, and Obsidian's own community-plugin submission requirements — the same categories a human code reviewer would check, just run by AI against explicit checklists instead of by me reading every line myself. That's a real, structured process, not an unsupervised one — decide for yourself whether it's the right trade-off for your vault.
If you run into a bug or have a feature request, feel free to open an issue — fixes and changes will likely go through the same human-directed, AI-implemented process.
status_changed and the due-date field are now correctly read even if either is ever written as a single-item YAML list, matching how Type, status, and priority already worked. See the updated Frontmatter reference and Known limitations.:has() selector and redundant scrollbar properties) were replaced with equivalent, more targeted styling.title: embed parameter).This project is licensed under the MIT License — see LICENSE for details.