🍱 Bento: A Kanban Board for VS Code
Why I built thisI found myself always switching between different productivity apps, Notion, Trello, Todoist, and I couldn't bring myself to stay organised! Everything was too bloated, had too many features, and led me in so many different directions that I would spend more time organising and optimising what to do rather than actually doing it! So I built this really minimal Kanban board extension for VS Code. This is also especially good because any AI agents I use in my workspace will have access to my tasks without having to use any sort of MCP server. Now, for most of my hobby projects, I don't have to worry about tracking my todos or progress! Features
Requirements
InstallFrom the VS Code MarketplaceBento is now published on the VS Code Marketplace! Install Bento From Marketplace
From a
|
| Command | What it does | How to run |
|---|---|---|
| Open Bento Board | Creates or opens todo.md in the kanban view |
Command Palette (Cmd/Ctrl+Shift+P) |
| Open as Bento | Switches from markdown text to the kanban board | Title bar checklist icon on todo.md |
| Open as Text | Switches from the kanban board back to markdown | Title bar file-text icon, or editor ⋯ menu |
Keyboard shortcuts
Click a card to focus it first. Shortcuts work in the kanban webview (not VS Code's global keybindings).
| Key | Action |
|---|---|
| ↑ / ↓ / ← / → | Move focus between cards (left-to-right, top-to-bottom) |
| Space | Toggle complete on the focused card |
| Enter | Start editing title & description |
| Tab / Shift+Tab | Switch between title and description while editing |
| Escape | Stop editing |
| V + arrow | Move the focused card (within column or into adjacent column) |
| Delete / Backspace | Delete the focused card |
The todo.md format
The board is plain markdown. You can hand-edit it in any text editor and the kanban will catch up the next time it's open:
# Todo
- [ ] Buy milk
remember oat milk too
- [ ] Read a book
# Doing
- [ ] Build a kanban extension
# Done
- [x] Drink coffee
Rules:
# Headingbecomes a column.- [ ] taskis an open card.- [x] taskis a completed card.- The line directly after a card (when it isn't another card or a column heading) becomes that card's description.
- Blank lines are ignored.
How it works
The extension registers a custom text editor for any file matching **/todo.md. The editor is a sandboxed webview that:
- Parses the markdown into
Cardand column objects on first load. - Renders cards into draggable lists with SortableJS.
- Posts messages to the extension host whenever you edit, drag, complete, add, or delete anything.
- The extension host applies a
WorkspaceEditthat replaces the whole file with a re-serialised version, so your changes hit disk and Git sees normal markdown diffs. - A
workspace.onDidChangeTextDocumentlistener keeps the webview in sync if you (or another tool) edittodo.mddirectly.
Development
npm install
npm run watch # esbuild + tsc in watch mode
Press F5 to launch the extension dev host. Source lives in src/extension.ts (extension host) and media/ (webview).
Changelog
See CHANGELOG.md for release history.
License
MIT. Do whatever you want with this! (just don't blame me 😮)
Roadmap
Shipped
- [x] Kanban custom editor for
todo.mdin VS Code. - [x] Drag-and-drop cards between columns and reorder columns on the board.
- [x] Inline editing for card titles and descriptions.
- [x] Completion toggle with strike-through styling.
- [x] Card & column controls: add cards, add columns, right-click delete.
- [x] Two-way markdown sync: board edits save to
todo.md; file edits re-render the board. - [x] VS Code Marketplace: published and installable.
Next up
- [ ] Toolbar toggle: flip between kanban and markdown from the editor title bar (like Mermaid).
- [ ] Extension icon: 128×128 PNG for the Marketplace listing.
- [x] Keyboard shortcuts: navigate, edit, complete, move, and delete focused cards.
- [x] README polish: requirements section, commands table, CHANGELOG link.
- [x] Demo assets: better GIF (screenshots added).
- [ ] Marketplace search screenshot: once Bento shows up in search.
- [ ] Upload v0.0.2: push README/GIF/screenshots to the Marketplace listing.
Polish
- [ ] Stress testing: empty
todo.md, no columns, unicode, long text, 50+ cards, rapid drag-drop. - [ ] Light-theme fix: replace hardcoded colours with VS Code CSS variables.
- [ ] Empty-state UI: hint when
todo.mdhas no columns yet.
Ideas (starfruit: only if I keep scope minimal)
- [ ] Landing page: static site on a
.dino.icusubdomain. - [ ] Walkthrough video: short demo on YouTube, linked from the README.
- [ ] Due date syntax: optional
@2026-08-15pills on cards. - [ ] Card colours / labels: optional tag syntax (e.g.
#urgent,:red:).
