Changelog
2026-08-15v0.52.0· Structured Categories
Added
-
Hash-based category chips (toggleable via Settings → Appearance → "Colored category chips", on by default): every category name renders in a chip with a stable color and icon derived from a hash of the name (FNV-1a into a 40-color palette, pastel background with near-black 90% text). Same category, same color, nothing stored. Applies to the "All tasks" section headers, the drawer/editor header chips, every board card, list row and collapsed stack.
-
Three new bundled themes appear in the picker without any install step:
shadcn(ultra-clean zinc neutral, the new default),vercel(black and white, mono display type, compact density) andlinear(dark-first violet with elevated glass popovers, ported from the community registry). -
Column colors render as a 3-4px accent bar on top of the column card (board view) and the section header (list view) instead of a faint full-column tint. The bar uses a new solid
COLUMN_BAR_MAP; the oldCOLUMN_COLOR_MAPtints were removed. -
kandown doctornow detects a pnpm workspace accidentally rooted at your home directory. If~/package.json,~/pnpm-workspace.yamland/or~/node_modulesexist together, pnpm treats~/as the workspace root for every project below it:pnpm devcan hang while scanning the whole home graph, installs may target the wrong virtual store, and the project's own lockfile can silently fall out of sync. The project itself looks perfectly normal, which is what makes this so hard to debug.The new check (
detectHomeWorkspaceinsrc/cli/lib/home-workspace.ts) requires at least two of the three markers before warning, so a lone straypackage.jsonnever triggers a false positive. It is advisory only —kandown doctorstill exits 0 — but prints the offending paths and a concrete fix (remove the files, or declare a localpnpm-workspace.yamlin each project). Covered by 5 regression tests insrc/cli/lib/__tests__/home-workspace.spec.ts.
Changed
- The default skin is now
shadcninstead of the lime house theme.DEFAULT_CONFIG.ui.skin, the demo seed and the unknown-id fallback all point at it. Thekandowntheme stays bundled and selectable. - The task category moved out of the title into a first-class frontmatter
field. Tasks previously carried it as a leading
[CATEGORY]bracket insidetitle:([UI] Fix the login button), parsed ad hoc by four different helpers. The source of truth is nowcategory: UIin the frontmatter, with the bracket form still accepted everywhere as a fallback for legacy files. The visual surface is unchanged: the web drawer chip, the "All tasks" grouping and the TUI category rows all render the same category from the structured field. - Filenames keep their category segment, now derived from the field.
tasks/t232_UI_fix_login_button.mdstill reads at a glance; changing the category in the drawer still auto-renames the file throughgit mv. - Creating a task still accepts a bracket title.
kandown create "[UI] Fix the button"and the web quick-add normalize the bracket into thecategory:field and store a clean title. - A one-shot migration script (
scripts/migrate-task-categories.ts) moves existing bracket titles in any kandown repo into the new field:npx tsx scripts/migrate-task-categories.ts --dry-run.
Notes
BoardTaskgained acategoryfield andtaskToBoardTasksurfaces it without printing a duplicate metadata entry on the card.buildTaskFilenamenow accepts the category explicitly, with the legacy title-bracket derivation as default, so old callers keep working.- Card and list-row selection checkboxes float over the content edge with a fade instead of reserving layout space; task ids render as a badge in the bottom-right corner of each card; collapsed stacks show the task count with a checklist icon.