kanban-lite 1.0.4 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +90 -103
- package/dist/cli.js +0 -0
- package/dist/extension.js +24 -19
- package/dist/mcp-server.js +0 -0
- package/dist/standalone-webview/{icons-Dx9MGYqN.js → icons-BRNYvs1k.js} +45 -35
- package/dist/standalone-webview/icons-BRNYvs1k.js.map +1 -0
- package/dist/standalone-webview/index.js +18 -18
- package/dist/standalone-webview/index.js.map +1 -1
- package/dist/{webview/react-vendor-DkYdDBET.js → standalone-webview/react-vendor-OgWxJ5nb.js} +2 -2
- package/dist/{webview/react-vendor-DkYdDBET.js.map → standalone-webview/react-vendor-OgWxJ5nb.js.map} +1 -1
- package/dist/standalone-webview/style.css +1 -1
- package/dist/standalone.js +75 -8
- package/dist/webview/{icons-Dx9MGYqN.js → icons-BRNYvs1k.js} +45 -35
- package/dist/webview/icons-BRNYvs1k.js.map +1 -0
- package/dist/webview/index.js +18 -18
- package/dist/webview/index.js.map +1 -1
- package/dist/{standalone-webview/react-vendor-DkYdDBET.js → webview/react-vendor-OgWxJ5nb.js} +2 -2
- package/dist/{standalone-webview/react-vendor-DkYdDBET.js.map → webview/react-vendor-OgWxJ5nb.js.map} +1 -1
- package/dist/webview/style.css +1 -1
- package/package.json +5 -4
- package/src/extension/KanbanPanel.ts +3 -0
- package/src/extension/SidebarViewProvider.ts +22 -20
- package/src/webview/App.tsx +1 -1
- package/src/webview/assets/standalone-theme.css +125 -16
- package/src/webview/components/KanbanColumn.tsx +2 -2
- package/src/webview/components/Toolbar.tsx +12 -2
- package/src/webview/standalone-shim.ts +5 -0
- package/dist/standalone-webview/icons-Dx9MGYqN.js.map +0 -1
- package/dist/webview/icons-Dx9MGYqN.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
# Kanban Lite
|
|
2
2
|
|
|
3
|
-
A
|
|
3
|
+
A lightweight kanban board stored as plain markdown files. Manage your tasks via a **web UI**, **CLI**, **REST API**, or **MCP server** for AI agents. Everything is human-readable, version-controllable, and lives right in your project.
|
|
4
4
|
|
|
5
|
-
[](https://open-vsx.org/extension/borgius/kanban-lite)
|
|
5
|
+
[](https://www.npmjs.com/package/kanban-lite)
|
|
7
6
|

|
|
8
7
|
|
|
9
8
|

|
|
@@ -18,32 +17,46 @@ npx skills add https://github.com/borgius/kanban-lite
|
|
|
18
17
|
|
|
19
18
|
See [SKILL.md](SKILL.md) for the full skill reference covering MCP tools, CLI, and REST API.
|
|
20
19
|
|
|
20
|
+
## Quick Start
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Install globally
|
|
24
|
+
npm install -g kanban-lite
|
|
25
|
+
|
|
26
|
+
# Initialize a board in your project
|
|
27
|
+
kl init
|
|
28
|
+
|
|
29
|
+
# Start the web UI
|
|
30
|
+
kl serve
|
|
31
|
+
|
|
32
|
+
# Or create your first card from the terminal
|
|
33
|
+
kl add --title "My first task" --priority high
|
|
34
|
+
```
|
|
35
|
+
|
|
21
36
|
## Features
|
|
22
37
|
|
|
23
|
-
###
|
|
38
|
+
### Web UI
|
|
24
39
|
|
|
25
|
-
- **5-column workflow**: Backlog, To Do, In Progress, Review, Done
|
|
26
|
-
- **Sidebar view**: Access the board from the activity bar without opening a panel
|
|
40
|
+
- **5-column workflow**: Backlog, To Do, In Progress, Review, Done (fully customizable)
|
|
27
41
|
- **Drag-and-drop**: Move cards between columns and reorder within columns
|
|
28
42
|
- **Split-view editor**: Board on left, inline markdown editor on right
|
|
29
43
|
- **Layout toggle**: Switch between horizontal and vertical board layouts
|
|
44
|
+
- **Real-time updates**: WebSocket-powered live sync across clients
|
|
45
|
+
- **Light & dark mode** support
|
|
30
46
|
- **Keyboard shortcuts**:
|
|
31
47
|
- `N` - Create new feature
|
|
32
48
|
- `Esc` - Close dialogs
|
|
33
49
|
- `Cmd/Ctrl + Enter` - Submit create dialog
|
|
34
|
-
- `Enter` in title - Move to description field
|
|
35
|
-
- `Shift + Enter` in title - Add new line
|
|
36
|
-
|
|
37
50
|
|
|
38
51
|
### Feature Cards
|
|
39
52
|
|
|
40
53
|

|
|
41
54
|
|
|
42
|
-
|
|
43
55
|
- **Priority levels**: Critical, High, Medium, Low (color-coded badges)
|
|
44
56
|
- **Assignees**: Assign team members to features
|
|
45
57
|
- **Due dates**: Smart formatting (Overdue, Today, Tomorrow, "5d", etc.)
|
|
46
|
-
- **Labels**: Tag features with multiple labels
|
|
58
|
+
- **Labels**: Tag features with multiple labels
|
|
59
|
+
- **Attachments**: Attach files to cards
|
|
47
60
|
- **Auto-generated IDs**: Based on title and timestamp (e.g., `implement-dark-mode-2026-01-29`)
|
|
48
61
|
- **Timestamps**: Created and modified dates tracked automatically
|
|
49
62
|
|
|
@@ -53,90 +66,21 @@ See [SKILL.md](SKILL.md) for the full skill reference covering MCP tools, CLI, a
|
|
|
53
66
|
- **Assignee filter**: Filter by team member or show unassigned items
|
|
54
67
|
- **Label filter**: Filter by specific labels
|
|
55
68
|
- **Due date filters**: Overdue, due today, due this week, or no due date
|
|
56
|
-
- **Clear filters button**: Reset all filters at once
|
|
57
69
|
|
|
58
70
|
### File Organization
|
|
59
|
-
- **
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
- Rich text editing with Tiptap markdown editor
|
|
63
|
-
- Inline frontmatter editing (dropdowns for status/priority, inputs for assignee/due date/labels)
|
|
64
|
-
- Auto-save functionality
|
|
65
|
-
- Live settings updates without reopening the board
|
|
66
|
-
- Auto-refresh when files change externally
|
|
67
|
-
- Theme integration with VSCode/Cursor (light & dark mode)
|
|
68
|
-
|
|
69
|
-
### AI Agent Integration
|
|
70
|
-
- **Claude Code**: Default, Plan, Auto-edit, and Full Auto modes
|
|
71
|
-
- **Codex**: Suggest, Auto-edit, and Full Auto modes
|
|
72
|
-
- **OpenCode**: Agent integration support
|
|
73
|
-
- AI receives feature context (title, priority, labels, description) for informed assistance
|
|
71
|
+
- **Plain markdown**: Cards are standard markdown files with YAML frontmatter
|
|
72
|
+
- **Status subfolders**: Automatically organized into subfolders by status
|
|
73
|
+
- **Git-friendly**: Everything is version-controllable
|
|
74
74
|
|
|
75
75
|
## Installation
|
|
76
76
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
### Open VSX (VSCodium, Cursor, etc.)
|
|
81
|
-
Install from [Open VSX](https://open-vsx.org/extension/borgius/kanban-lite) or search for "Kanban Lite" in the Extensions view.
|
|
82
|
-
|
|
83
|
-
### From VSIX (Manual)
|
|
84
|
-
1. Download the `.vsix` file from the releases
|
|
85
|
-
2. In VSCode: Extensions > `...` > Install from VSIX
|
|
86
|
-
3. Select the downloaded file
|
|
87
|
-
|
|
88
|
-
## Usage
|
|
89
|
-
|
|
90
|
-
1. Open the command palette (`Cmd+Shift+P` / `Ctrl+Shift+P`)
|
|
91
|
-
2. Run **"Open Kanban Board"**
|
|
92
|
-
3. Start creating and managing features
|
|
93
|
-
|
|
94
|
-
Features are stored as markdown files in `.kanban/` within your workspace, organized into status subfolders:
|
|
95
|
-
|
|
96
|
-
```markdown
|
|
97
|
-
---
|
|
98
|
-
id: "implement-dark-mode-toggle-2026-01-25"
|
|
99
|
-
status: "todo"
|
|
100
|
-
priority: "high"
|
|
101
|
-
assignee: "john"
|
|
102
|
-
dueDate: "2026-01-25"
|
|
103
|
-
created: "2026-01-25T10:30:00.000Z"
|
|
104
|
-
modified: "2026-01-25T14:20:00.000Z"
|
|
105
|
-
labels: ["feature", "ui"]
|
|
106
|
-
order: 0
|
|
107
|
-
---
|
|
108
|
-
|
|
109
|
-
# Implement dark mode toggle
|
|
110
|
-
|
|
111
|
-
Add a toggle in settings to switch between light and dark themes...
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## Configuration
|
|
115
|
-
|
|
116
|
-
Board configuration is stored in `.kanban.json` at your workspace root. This file is shared across all interfaces (VSCode extension, standalone server, CLI).
|
|
117
|
-
|
|
118
|
-
```json
|
|
119
|
-
{
|
|
120
|
-
"columns": [
|
|
121
|
-
{ "id": "backlog", "name": "Backlog", "color": "#6b7280" },
|
|
122
|
-
{ "id": "todo", "name": "To Do", "color": "#3b82f6" },
|
|
123
|
-
{ "id": "in-progress", "name": "In Progress", "color": "#f59e0b" },
|
|
124
|
-
{ "id": "review", "name": "Review", "color": "#8b5cf6" },
|
|
125
|
-
{ "id": "done", "name": "Done", "color": "#22c55e" }
|
|
126
|
-
],
|
|
127
|
-
"showPriorityBadges": true,
|
|
128
|
-
"showAssignee": true,
|
|
129
|
-
"showDueDate": true,
|
|
130
|
-
"showLabels": true,
|
|
131
|
-
"compactMode": false
|
|
132
|
-
}
|
|
77
|
+
```bash
|
|
78
|
+
npm install -g kanban-lite
|
|
133
79
|
```
|
|
134
80
|
|
|
135
|
-
Columns are fully customizable — add, remove, rename, or recolor them from the board UI, CLI, or REST API.
|
|
136
|
-
|
|
137
81
|
## CLI
|
|
138
82
|
|
|
139
|
-
Manage your kanban board from the terminal
|
|
83
|
+
Manage your kanban board from the terminal using `kanban-lite` or the shorthand `kl`:
|
|
140
84
|
|
|
141
85
|
```bash
|
|
142
86
|
# List all cards
|
|
@@ -185,7 +129,7 @@ kl settings update --compactMode true # Update a setting
|
|
|
185
129
|
# Workspace
|
|
186
130
|
kl pwd # Print workspace root path
|
|
187
131
|
|
|
188
|
-
# Start
|
|
132
|
+
# Start web server
|
|
189
133
|
kl serve # Start on port 3000
|
|
190
134
|
kl serve --port 8080 --no-browser # Custom port, no auto-open
|
|
191
135
|
|
|
@@ -197,7 +141,7 @@ Use `--json` for machine-readable output. Use `--dir <path>` to specify a custom
|
|
|
197
141
|
|
|
198
142
|
## Standalone Server
|
|
199
143
|
|
|
200
|
-
Run the kanban board as a
|
|
144
|
+
Run the kanban board as a web application with a full REST API:
|
|
201
145
|
|
|
202
146
|
```bash
|
|
203
147
|
# Using the CLI
|
|
@@ -211,7 +155,7 @@ kanban-md --port 8080 --dir .kanban --no-browser
|
|
|
211
155
|
```
|
|
212
156
|
|
|
213
157
|
The server provides:
|
|
214
|
-
- **Web UI** at `http://localhost:3000` —
|
|
158
|
+
- **Web UI** at `http://localhost:3000` — a full React-based kanban board
|
|
215
159
|
- **REST API** at `http://localhost:3000/api` — full programmatic access
|
|
216
160
|
- **WebSocket** — real-time updates for connected clients
|
|
217
161
|
|
|
@@ -415,6 +359,57 @@ await sdk.updateColumn('testing', { name: 'QA' })
|
|
|
415
359
|
await sdk.removeColumn('testing')
|
|
416
360
|
```
|
|
417
361
|
|
|
362
|
+
## Data Storage
|
|
363
|
+
|
|
364
|
+
Cards are stored as markdown files with YAML frontmatter in `.kanban/` within your project:
|
|
365
|
+
|
|
366
|
+
```markdown
|
|
367
|
+
---
|
|
368
|
+
id: "implement-dark-mode-toggle-2026-01-25"
|
|
369
|
+
status: "todo"
|
|
370
|
+
priority: "high"
|
|
371
|
+
assignee: "john"
|
|
372
|
+
dueDate: "2026-01-25"
|
|
373
|
+
created: "2026-01-25T10:30:00.000Z"
|
|
374
|
+
modified: "2026-01-25T14:20:00.000Z"
|
|
375
|
+
labels: ["feature", "ui"]
|
|
376
|
+
order: 0
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
# Implement dark mode toggle
|
|
380
|
+
|
|
381
|
+
Add a toggle in settings to switch between light and dark themes...
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
## Configuration
|
|
385
|
+
|
|
386
|
+
Board configuration is stored in `.kanban.json` at your project root:
|
|
387
|
+
|
|
388
|
+
```json
|
|
389
|
+
{
|
|
390
|
+
"columns": [
|
|
391
|
+
{ "id": "backlog", "name": "Backlog", "color": "#6b7280" },
|
|
392
|
+
{ "id": "todo", "name": "To Do", "color": "#3b82f6" },
|
|
393
|
+
{ "id": "in-progress", "name": "In Progress", "color": "#f59e0b" },
|
|
394
|
+
{ "id": "review", "name": "Review", "color": "#8b5cf6" },
|
|
395
|
+
{ "id": "done", "name": "Done", "color": "#22c55e" }
|
|
396
|
+
],
|
|
397
|
+
"showPriorityBadges": true,
|
|
398
|
+
"showAssignee": true,
|
|
399
|
+
"showDueDate": true,
|
|
400
|
+
"showLabels": true,
|
|
401
|
+
"compactMode": false
|
|
402
|
+
}
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
Columns are fully customizable — add, remove, rename, or recolor them from the web UI, CLI, or REST API.
|
|
406
|
+
|
|
407
|
+
## AI Agent Integration
|
|
408
|
+
- **Claude Code**: Default, Plan, Auto-edit, and Full Auto modes
|
|
409
|
+
- **Codex**: Suggest, Auto-edit, and Full Auto modes
|
|
410
|
+
- **OpenCode**: Agent integration support
|
|
411
|
+
- AI receives feature context (title, priority, labels, description) for informed assistance
|
|
412
|
+
|
|
418
413
|
## Development
|
|
419
414
|
|
|
420
415
|
### Prerequisites
|
|
@@ -430,13 +425,13 @@ pnpm install
|
|
|
430
425
|
# Start development (watch mode)
|
|
431
426
|
pnpm dev
|
|
432
427
|
|
|
433
|
-
# Build for production
|
|
428
|
+
# Build for production
|
|
434
429
|
pnpm build
|
|
435
430
|
|
|
436
431
|
# Build individually
|
|
437
|
-
pnpm build:extension
|
|
438
432
|
pnpm build:cli
|
|
439
433
|
pnpm build:mcp
|
|
434
|
+
pnpm build:standalone-server
|
|
440
435
|
|
|
441
436
|
# Run tests
|
|
442
437
|
pnpm test
|
|
@@ -448,28 +443,20 @@ pnpm typecheck
|
|
|
448
443
|
pnpm lint
|
|
449
444
|
```
|
|
450
445
|
|
|
451
|
-
### Debugging
|
|
452
|
-
|
|
453
|
-
1. Press `F5` in VSCode to launch the Extension Development Host
|
|
454
|
-
2. Open the command palette and run "Open Kanban Board"
|
|
455
|
-
3. Make changes and reload the window (`Cmd+R`) to see updates
|
|
456
|
-
|
|
457
446
|
### Tech Stack
|
|
458
447
|
|
|
459
|
-
**
|
|
460
|
-
**Webview**: React 18, Vite, Tailwind CSS, Zustand, Tiptap
|
|
448
|
+
**Web UI**: React 18, Vite, Tailwind CSS, Zustand, Tiptap
|
|
461
449
|
**SDK/CLI/MCP**: TypeScript, Node.js, @modelcontextprotocol/sdk
|
|
462
450
|
|
|
463
451
|
### Architecture
|
|
464
452
|
|
|
465
453
|
```
|
|
466
454
|
src/
|
|
467
|
-
sdk/ #
|
|
455
|
+
sdk/ # Core SDK (no external dependencies)
|
|
468
456
|
cli/ # CLI tool (built on SDK)
|
|
469
457
|
mcp-server/ # MCP server (built on SDK)
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
webview/ # React frontend (shared by extension + standalone)
|
|
458
|
+
standalone/ # Standalone web server (uses SDK)
|
|
459
|
+
webview/ # React frontend
|
|
473
460
|
shared/ # Shared types
|
|
474
461
|
```
|
|
475
462
|
|
package/dist/cli.js
CHANGED
|
File without changes
|
package/dist/extension.js
CHANGED
|
@@ -7116,6 +7116,9 @@ var KanbanPanel = class _KanbanPanel {
|
|
|
7116
7116
|
case "removeColumn":
|
|
7117
7117
|
await this._removeColumn(message.columnId);
|
|
7118
7118
|
break;
|
|
7119
|
+
case "toggleTheme":
|
|
7120
|
+
await vscode2.commands.executeCommand("workbench.action.toggleLightDarkThemes");
|
|
7121
|
+
break;
|
|
7119
7122
|
}
|
|
7120
7123
|
},
|
|
7121
7124
|
null,
|
|
@@ -8163,12 +8166,7 @@ var SidebarViewProvider = class {
|
|
|
8163
8166
|
|
|
8164
8167
|
<div class="separator"></div>
|
|
8165
8168
|
|
|
8166
|
-
<div
|
|
8167
|
-
<div class="section-header">
|
|
8168
|
-
<span>In Progress</span>
|
|
8169
|
-
</div>
|
|
8170
|
-
<ul class="feature-list" id="inProgressList"></ul>
|
|
8171
|
-
</div>
|
|
8169
|
+
<div id="columnSections"></div>
|
|
8172
8170
|
|
|
8173
8171
|
<script nonce="${nonce}">
|
|
8174
8172
|
(function() {
|
|
@@ -8214,30 +8212,37 @@ var SidebarViewProvider = class {
|
|
|
8214
8212
|
statRows.appendChild(row);
|
|
8215
8213
|
}
|
|
8216
8214
|
|
|
8217
|
-
//
|
|
8218
|
-
const
|
|
8219
|
-
|
|
8220
|
-
|
|
8221
|
-
|
|
8222
|
-
|
|
8215
|
+
// Column sections with their features
|
|
8216
|
+
const sectionsContainer = document.getElementById('columnSections');
|
|
8217
|
+
sectionsContainer.innerHTML = '';
|
|
8218
|
+
for (const col of columns) {
|
|
8219
|
+
const colFeatures = features.filter(f => f.status === col.id);
|
|
8220
|
+
if (colFeatures.length === 0) continue;
|
|
8221
|
+
|
|
8222
|
+
const section = document.createElement('div');
|
|
8223
|
+
section.className = 'section';
|
|
8223
8224
|
|
|
8224
|
-
|
|
8225
|
-
|
|
8226
|
-
|
|
8227
|
-
|
|
8225
|
+
const header = document.createElement('div');
|
|
8226
|
+
header.className = 'section-header';
|
|
8227
|
+
header.innerHTML = '<span>' + escapeHtml(col.name) + '</span>';
|
|
8228
|
+
section.appendChild(header);
|
|
8229
|
+
|
|
8230
|
+
const list = document.createElement('ul');
|
|
8231
|
+
list.className = 'feature-list';
|
|
8232
|
+
for (const f of colFeatures) {
|
|
8228
8233
|
const li = document.createElement('li');
|
|
8229
8234
|
li.className = 'feature-item';
|
|
8230
8235
|
li.title = f.title;
|
|
8231
8236
|
li.innerHTML =
|
|
8232
|
-
'<span class="feature-dot" style="background:' +
|
|
8237
|
+
'<span class="feature-dot" style="background:' + col.color + '"></span>' +
|
|
8233
8238
|
'<span class="feature-title">' + escapeHtml(f.title) + '</span>';
|
|
8234
8239
|
li.addEventListener('click', () => {
|
|
8235
8240
|
vscode.postMessage({ type: 'openFeature', featureId: f.id });
|
|
8236
8241
|
});
|
|
8237
8242
|
list.appendChild(li);
|
|
8238
8243
|
}
|
|
8239
|
-
|
|
8240
|
-
section
|
|
8244
|
+
section.appendChild(list);
|
|
8245
|
+
sectionsContainer.appendChild(section);
|
|
8241
8246
|
}
|
|
8242
8247
|
}
|
|
8243
8248
|
|
package/dist/mcp-server.js
CHANGED
|
File without changes
|