A custom Obsidian Bases view that displays data in a kanban board layout with drag-drop support for organizing items across configurable columns.
- Configurable Grouping - Group items using standard Bases properties
- Drag-Drop Cards - Move cards between columns (visual feedback)
- Reorder Columns - Drag column headers to reorganize
- Persistent Layout - Column order saved in base view settings
- Virtual Scrolling - Smooth performance with 100+ items
- All Properties Displayed - Shows all visible properties on cards
- Robust Error Handling - Helpful error messages and debug logging
For development, use mise tasks which auto-builds and installs:
mise run devThis will:
- Install dependencies (cached with bkt)
- Configure Obsidian vault path (if first time)
- Symlink plugin to vault
- Watch for source changes
- Auto-rebuild on every change
Then reload Obsidian (Win + P > Reload app) to see changes.
For now, use BRATS to install the plugin:
- Go to Settings → Community plugins → BRAT
- Find and click Add beta plugin
- Paste the plugin repo URL:
https://github.com/zenobi-us/obsidian-bases-kanban-view - Click Add plugin
- Go to Settings → Community plugins → Installed plugins
- Search for Kanban Bases View and enable it
- Configuration occurs in the Base view
- Open a Base file
- Click the view selector dropdown (top-right)
- Select "Kanban"
- Click the Sort icon
- Add a "Group by" property
- Board updates automatically
Non uniform grouping values
If your notes have disparate values, consider using a formula property to standardize grouping.
formulas:
normalisedStatus: |-
if(
note.status.containsAny("todo", "pending", "planned"),
"Todo",
if(
note.status.containsAny("in-progress", "in-development", "active"),
"In Progress",
if(
note.status.containsAny("in-review", "reviewing", "testing"),
"In Review",
if(
note.status.containsAny("done", "closed", "cancelled"),
"Done",
"Backlog"
)
)
)
)Then group by normalisedStatus for consistent columns.
Fallback group for unmatched items
formulas:
normalisedIssueKind: |-
if(
file.path.contains("epic"),
"epic",
if(
file.path.contains("story"),
"story",
if(
file.path.contains("task"),
"task",
if(
file.path.contains("decision"),
"decision",
if(
file.path.contains("research"),
"research",
"unknown"
)
)
)
)
)Displaying values in the card is currently a controlled affair.
- Open the Base options dropdown
- Expand the Cards section
- Pick the formula/property to display for each field.
- Drag cards between columns to move them
- Visual feedback during drag (opacity + shadow)
- Drop zone highlights on hover
- Moving cards updates the options.GroupBy property value with a slugified version of the column name
Cards can be dragged between columns to change their grouping property.
Make sure you pick the correct field to update in the Columns section of Base options.
- Swimlanes (2D grouping)
- Filter integration
- Create/edit items inline
- Keyboard navigation
- Custom card templates
- Using a note as the template for rendering cards
For bug reports or feature requests:
- Test with the current code
- Note console errors
- Document steps to reproduce
- Describe expected vs actual behavior