Obsidban

unlisted

by Oliver Teo

Trello/Jira-style Kanban boards. Organise work into columns and cards with drag-and-drop, checklists, links, and live search.

Updated 12d agoMIT
View on GitHub

Kanbanote

A Jira/Trello-style Kanban board as an Obsidian panel view. Organise work into boards, columns, and cards — fully local, no external services.

CI


Features

  • Multiple boards — create as many boards as you need, switch between them from the header dropdown
  • Columns — add, rename (double-click the title), reorder (drag the grip handle), and set a colour accent per column
  • Cards — title, rich description (Write/Preview), tags, due date, assignees, checklist, and vault file links
  • Drag and drop — move cards between columns or reorder within a column; drag column headers to reorder columns
  • Live search — filter cards across all columns in real time without leaving the board
  • Multiple assignees — assign one or more people to a card; shown as initials bubbles on the card face
  • Checklist with progress — add checklist items with a progress bar; count shown in the heading
  • Links — attach any vault file to a card via fuzzy search; click to open in a new tab
  • Activity log — every create, edit, move, and checklist change is timestamped and shown inside the card
  • Overdue indicators — due dates past today turn red on the card face
  • Settings — default board, toggle due dates and tags on card faces, custom data file path

Data storage

Board data is saved to a regular vault file (kanban/boards.json by default). Because it is a plain vault file, it is picked up automatically by sync tools like S3sync. Settings (default board, display toggles, data file path) are stored in the plugin's private storage and are not synced — they remain device-local.


Installation

This plugin is not yet published to the Obsidian Community Plugins list. Install manually by building from source.

Prerequisites

  • Node.js 25+ — verify with node --version
  • nvm (recommended) — run nvm use in the repo root to switch automatically

1 — Clone and build

git clone https://github.com/OliverTeo288/kanbanote.git
cd kanbanote
npm install
npm run build

This produces main.js, manifest.json, and styles.css in the repo root.

2 — Copy files into your vault

Option A — deploy script (recommended)

./scripts/deploy-local.sh /path/to/your/vault

Vault path resolution order if you omit the argument:

  1. OBSIDIAN_VAULT environment variable
  2. Auto-detect: first directory under ~/Documents that contains .obsidian/

Option B — manual copy

VAULT="/path/to/your/vault"
mkdir -p "$VAULT/.obsidian/plugins/kanbanote"
cp main.js manifest.json styles.css "$VAULT/.obsidian/plugins/kanbanote/"

3 — Enable in Obsidian

  1. Open Settings → Community plugins
  2. If you see a Safe mode banner, click Turn on community plugins
  3. Under Installed plugins, find Kanbanote and toggle it on
  4. Close settings — the Kanban board ribbon icon appears in the left sidebar

Plugin not showing up?

  • Confirm the three files exist at <vault>/.obsidian/plugins/kanbanote/
  • Restart Obsidian, then check Settings → Community plugins → Installed plugins
  • On macOS, if the vault is in iCloud Drive, wait for files to finish syncing before restarting

Install via BRAT

You can also install directly from this repo using BRAT (no manual build needed):

  1. Install and enable the BRAT plugin from Community Plugins
  2. Run BRAT: Add a beta plugin from the command palette
  3. Enter: OliverTeo288/kanbanote

How to use

Opening the board

  • Click the grid icon in the left ribbon
  • Run Kanbanote: Open board from the command palette (Cmd/Ctrl + P)

Creating your first board

  1. Click + New board in the board header, or run Kanbanote: Create new board from the command palette
  2. Enter a board name and click Create
  3. Three columns are created automatically: To Do, In Progress, Done

Boards

ActionHow
Switch boardUse the dropdown in the top-left of the board header
Search cardsType in the search bar — all columns filter in real time
Rename boardClick (board options) → Rename board
Add columnClick Add column, or click + Add column at the right edge of the board
Delete boardClick Delete board

Columns

ActionHow
Rename columnDouble-click the column title, type, then press Enter or click away
Reorder columnDrag the grip handle () in the column header
Set column colourClick (column options) → Change color — choose a preset or use the colour picker
Add cardClick + in the column header
Delete columnClick Delete column — only available when the column is empty

Cards

ActionHow
Create cardClick + in a column header
Edit cardClick any card to open the edit modal
Move cardDrag to any column, or drop onto a specific card to insert before it
Delete cardOpen the card → Delete card, or right-click → Delete card

Card fields

FieldNotes
TitleRequired. Displayed on the card face.
DescriptionMarkdown supported. Use the Write tab to edit, Preview tab to render.
AssigneesAdd one or more names. Shown as initials bubbles on the card face (first 2 visible, overflow as +N).
Due dateDate picker. Turns red on the card face when past today.
TagsAdd individual tags as chips. Shown as coloured pills on the card face (requires Show tags setting).
ChecklistAdd items with a progress bar. Count shown as done/total in the section heading.
LinksAttach vault files via fuzzy search. Click a link to open the file in a new tab. Shown as a link-count badge on the card face.

Settings

Settings → Kanbanote

SettingDescription
Board data fileVault-relative path for boards.json. Change this to move your data file. Reload the plugin after changing.
Default boardWhich board opens when you first open the view
Show due dates on cardsToggle due date display on card faces
Show tags on cardsToggle tag pill display on card faces

Development

Setup

git clone https://github.com/OliverTeo288/kanbanote.git
cd kanbanote
nvm use          # switches to Node 25 via .nvmrc
npm install

Scripts

CommandDescription
npm run devWatch mode — rebuilds on every save
npm run buildProduction build (minified bundle)
npm run typecheckTypeScript type-check only, no bundle
npm run lintESLint
npm run lint:fixESLint with auto-fix
npm run auditnpm audit --audit-level=high
npm run validatetypecheck + lint + audit (run before committing)
./scripts/deploy-local.shBuild + copy artefacts into a local vault

Project structure

src/
├── main.ts          Plugin entry — registers view, commands, settings tab, persistence, migration
├── types.ts         Board / Column / Card / ChecklistItem / ActivityEntry / KanbanSettings interfaces
├── store.ts         BoardStore — in-memory CRUD with activity logging; triggers persist on every mutation
├── utils.ts         nanoid, formatDate, isOverdue, timeAgo, isSafeVaultPath, isSafeColor, FOCUS_DELAY_MS
└── ui/
    ├── boardView.ts  KanbanBoardView (ItemView) — board/column/card rendering, DnD, live search
    ├── boardModal.ts NewBoard / RenameBoard / AddColumn / SetColumnColor / Confirm modals
    ├── cardModal.ts  Create / edit card modal — chip fields, checklist, attachments, activity log
    └── settings.ts   Settings tab

CI / CD

Two GitHub Actions workflows run on every push:

WorkflowTriggerWhat it does
ci-release.ymlPush / PR / semver tagESLint with PR annotations, TypeScript type-check, production build. On a semver tag (1.2.3): stamps versions, creates a GitHub Release, attaches main.js, manifest.json, styles.css.
dependency-scan.ymlDaily 02:00 UTC / push to mainnpm audit (HIGH+CRITICAL), Trivy vulnerability + secret + licence scans.

To release a new version:

git tag 1.2.0
git push origin 1.2.0

No v prefix on tags.


Roadmap

  • Mobile drag and drop (touch events)
  • Archive / hide column (without deleting cards)
  • Card cover images
  • Board-level labels / swimlanes

License

MIT © 2025 Oliver Teo

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.