Skip to content
kandown
GitHubnpm
98 releases

Changelog

2026-07-26

v0.37.0Two Views

Added

  • The TUI now has a list view, and it is the default. One task per line with ID · Age · Status · Priority/Owner/Deps · Tags · Description, using the full terminal width instead of splitting it across five kanban columns that truncate every title to ~15 characters. The selected row expands downward so its whole title is readable; every other row stays exactly one line.
  • Tab swaps list ⇄ board. Neither view replaces the other — the selection is carried across by task id, so you land on the same task in both. The choice is persisted per project in .kandown/kandown.json under a new tui section (defaultView, showDetailPane, listSort).
  • A live detail pane under the list, following the selection with id, title, status, priority, owner, assignee, tags, blockers, checklist progress, last-update age and file path. Toggle it with z.
  • New list keys: h/l move the selected task one column left/right (through the same dependency gate as every other move, and undoable with u), s cycles the sort (status, age, priority, id), [/] jump to top/bottom, PgUp/PgDn page, and the mouse wheel scrolls.
  • An updated: frontmatter timestamp, stamped by every write path — CLI, MCP and web. It powers the Age column and the age sort. Deliberately not the file mtime, which git clone resets: on a fresh checkout an mtime-based age would report the same value for every task.
  • A blocked filter mode (f), listing tasks that are waiting on a dependency.

Changed

  • The changelog is now one file per release. changelogs/vX.Y.Z.md holds the full notes for each version, and CHANGELOG.md at the root is a generated index — version, date, release name and per-type change counts, linking to each file. The old single 798-line file made every release edit the same few lines at the top, so every in-flight branch conflicted with every other, and git log -p CHANGELOG.md was unreadable. A release now adds a file instead of editing a shared one, and a link to changelogs/v0.36.0.md is stable and guessable forever. Generated by pnpm changelog, verified by pnpm changelog:check in CI, and staged automatically by the pre-commit hook alongside the codemap — the index cannot go stale.

  • GitHub release notes are read straight from the version file rather than sliced out of the index with an awk range, which was one heading-format change away from silently publishing an empty release body.

  • The full history ships with the npm package. changelogs/ joins CHANGELOG.md in the published files, so the notes for every version are readable offline from node_modules.

  • One lockfile for pnpm 9 and pnpm 11. pnpm-workspace.yaml now declares the minimum supported pnpm version (9.15) and lists the exact patch range pnpm 11 parses, so a freshly cloned repo installs cleanly on either line without the lockfile being rewritten. Local installs no longer churn pnpm-lock.yaml between pnpm 9 and pnpm 11, and CI sees a stable lockfile across versions.

Fixed

  • / search and f filter did nothing. Both were stored in TUI state and advertised in the cheatsheet, but never applied to the rendered tasks — the features had been dead since they were added. They now drive a real filter pipeline shared by both views, matching on id, title, tags and assignee. The dependency gate deliberately still resolves against the unfiltered board, so narrowing the search can never unlock a blocked move.
  • Esc in the TUI quit immediately even with a search or filter active, throwing away the narrowing you had just typed with no way back. It now clears the search and filter first, and only quits when neither is set.
  • The "Search docs" button in the website header did nothing on every non-docs page. The dialog was mounted inside the docs layout while the trigger button lived in the global header, so clicking it (or pressing ⌘K) on the home page fired an event no listener was registered for. SearchDialog now mounts once in the root layout so the trigger, the global ⌘K shortcut, and the dialog are present on every page.
  • docs/RELEASE.md claimed the CLI parses CHANGELOG.md and prints it during auto-updates. It does not, and never did — nothing in src/ or scripts/ reads the file. The stale claim had been shaping how the changelog was written for several releases.