Each location has its own board library. Switching never copies, merges, or deletes boards.
Kanban without the noise. Single file, your folder, your data — no servers, no accounts, no telemetry.
What you can do
.kanzen.json files in a folder you pick — sync them via Dropbox / iCloud / git for free.This intro only shows once. The ? button in the header has the full help.
What's your name? It's used to track who made changes to cards. You can change it later in settings.
Stored locally only. KanZen has no servers, no accounts, no telemetry.
Deploy your own revision-safe Worker to sync boards across devices. KanZen never sees your passphrase — boards are AES-GCM encrypted client-side. Review current Cloudflare pricing before deployment. Setup guide
Agents and scripts in this tab can read your boards and ask for changes through window.kanzen, and through WebMCP where the browser has it. Every change waits for your approval in 🤖.
Device id:
Agents can read your boards. Every change an agent asks for waits here until you approve it. Approved changes show in the activity feed as made via an agent.
Kanban without the noise. Single HTML file, your folder, your data. No server, no account, no board limits.
Click 📁 to connect a folder. KanZen writes each board as a sorted-key, pretty-printed .kanzen.json file you can read, back up, sync with Dropbox / iCloud / Syncthing / git — multi-device for free, no server. The folder handle is remembered between sessions in browsers that support it (Chrome). Without a folder, boards live in this browser's IndexedDB and you can still export them as JSON anytime.
When a folder is connected, KanZen polls the disk every 5 seconds. If another tool (or another device via git/Dropbox) changes a board file, KanZen reloads it automatically and toasts "Board updated from disk". Your own writes are write-locked for 2 s so you never see your own save bounce back at you.
For boards you collaborate on via git, Settings → Team mode splits the board into a folder: _board.json (columns, members, labels), cards/<id>.json (one file per card), and _activity.jsonl (append-only log). Each card edit only rewrites that card's file, so two people editing different cards never produce a merge conflict. Lossless toggle in both directions.
Optional. Deploy your own revision-safe Cloudflare Worker (setup guide) and configure it in Preferences → Cloud sync. Boards are AES-GCM encrypted client-side with a passphrase you control — KanZen never sends the passphrase to the Worker. Board name, editor, edit time, and device ID remain plaintext routing metadata. The cloud icon in the header turns green when synced.
Auto-save runs every 5 seconds when there are unsaved changes; destructive actions (delete card / column / board) save immediately. Snapshots (📸) capture the full board so you can compare or restore. Auto-snapshot before destructive actions is on by default.
Nothing leaves your machine. Even share URLs encode the board into the hash fragment, which is never sent to any server — not even to the host where this site lives.
| 📁 | Connect folder. Save boards to disk as .kanzen.json files. |
| 📸 | Snapshots. Take, restore, or compare snapshots — card-level diff with added / removed / modified. Auto-snap before destructive actions and optional daily auto-snap. |
| 📜 | Activity feed. Every change to the board with relative timestamps. |
| 🔗 | Share. The whole board encoded into a URL hash fragment, optionally AES-GCM-encrypted with a passphrase. Compressed with the browser-native CompressionStream API (zero CDN dependencies on modern browsers), with a size gate (green ≤8 K, yellow ≤64 K, blocked beyond). QR code for in-person handoff. |
| ⚙ | Settings. Board name, columns, WIP limits, members, labels, background (8 gradients, 8 solids, custom). |
| ⇅ | Import / export. KanZen JSON, CSV, Markdown, or Trello JSON import. |
| ↶ ↷ | Undo / redo. 50 deep per board. |
| ⤓ | Install. Add as an app (only appears when the browser exposes the prompt). |
| ◐ | Theme. Toggle dark / light. |
Click any card to edit. You get a markdown description (live preview), checklist with progress bar, due date, priority, labels, members, file attachments (embedded in the board JSON), and threaded comments. The card face shows label chips, priority badge, due date, members, checklist progress, attachment count, and 💬 comment count.
Add, rename, reorder by dragging the header, collapse to save space. Set a soft WIP limit per column — KanZen highlights it when you exceed it but doesn't block you.
Drag cards between or within columns. Drag column headers to reorder columns. On the calendar view, drag a card between days to update its due date.
Switch between Board (kanban), List (sortable table — click any column header to sort), and Calendar (month grid — drag a card between days to set its due date) using the pills on the right of the filter bar. The view sticks per board.
Filter by label, priority, due-date bucket (overdue / today / this week / no date), or member. Non-matching cards dim instead of hiding, so you keep the board's shape and your WIP limits stay meaningful.
Press / to focus the search box. Matches both card titles and descriptions; same dimming behaviour as filters.
| N | New card in the focused column (or first column) |
| E / Enter | Edit focused card |
| / | Focus search |
| ← → ↑ ↓ | Move card focus |
| Cmd/Ctrl+Z | Undo |
| Cmd/Ctrl+Shift+Z | Redo |
| Esc | Close modals |
Long-press any card to bring up a "Move to…" popover with all other columns.
Everything you can do in KanZen is also a tool an agent can call: the same commands, with the same checks. Agents reach them through WebMCP where the browser supports it, through window.kanzen in this tab, or through a cross-tab channel you can open in Preferences.
Agents can read boards, cards, activity and snapshots, and can change what this tab shows (board, view, filters). Every change to your data arrives as a proposal under 🤖 in the header. Approve it and it applies; reject it and nothing happens. Before an approved agent change removes data, KanZen takes a safety snapshot.
Choosing where boards live, cloud-sync credentials, sending a board to the cloud, your name, installing the app, opening the cross-tab channel, and approving proposals stay with you. Agents can see that these exist, but cannot do them.
The activity feed marks every agent change as "via agent" with the door it came through. 🤖 lists this tab's agent calls.
window.kanzen.manifest() lists every tool and its JSON-schema input. window.kanzen.tools.create_card({column_id, title}) returns a proposal id; get_proposal reports the outcome. window.kanzen.on('change', fn) follows edits.