Skip to content
kandown
GitHubnpm
98 releases

Changelog

2026-07-25

v0.35.0House Green

  • Added: Kandown finally has its own theme, and it is the default — a kandown preset built from the brand palette registered on the website: #88E138 brand lime (the logo arrow) as the dark-mode primary, #7AD12A as its light-background variant, #0CE931 (the hero shader green) reused as the success token, #F1FFB8 for accent surfaces and #EBEBEB for neutral borders, on 4px radius to match the website. Because lime cannot carry white text at any usable contrast, primary-foreground is a near-black green in both modes (7.9:1 light, 11.2:1 dark) rather than the usual white. Every other foreground/background pair passes WCAG AA in both modes.
  • Fixed: The default skin silently resolved to VercelDEFAULT_CONFIG.ui.skin already read 'kandown', but LEGACY_SKIN_MAP still aliased kandown to vercel from before the FABLE_UI theme system, so every fresh project opened in monochrome instead of the brand colors. The alias is gone, the preset now sits first in THEME_PRESETS (and is therefore the [0] fallback for an unknown id), and normalizeSkinId falls back to kandown instead of vercel.
  • Changed: Website hero rewritten — the technical breadcrumb (Local-first / MIT / Node / npm) is replaced by a short free, open-source, local promise, and the headline is reframed around Markdown tasks built for AI agents, long-running work, and the web/TUI/CLI trio. The shared tagline and description used for SEO and machine-readable docs were aligned with it.
  • Added: Demo mode — a third backend for the web UI that answers the Kandown REST API from an in-memory Map instead of a disk, so the whole application can run in a browser tab with no CLI, no server and no storage. It plugs in at apiFetch (src/lib/filesystem.ts) via registerDemoApi(), which is why the board, drawer, editor, search, archive and drag-and-drop all work without knowing anything changed — nothing is mocked. Built with pnpm build:demo, which also drops vite-plugin-singlefile in favour of a normal chunked build. The entire feature is compiled out of the bundle npx kandown ships, behind the __KANDOWN_DEMO_BUILD__ define.
  • Fixed: Header task counter rendered [object Object] tasksuseAnimatedNumber returns a Motion MotionValue, which has to be rendered by a motion.* component that subscribes to it; wrapping it in String() stringified the object itself. Every user of the web board saw this on every screen.
  • Fixed: Repository root could open as a project named templates — implicit project resolution now checks the current directory and walks upward for the nearest valid .kandown/kandown.json instead of recursively scanning child directories. This keeps the live board anchored to the canonical root .kandown/ + tasks/ layout, works from nested paths such as src/, and prevents packaged init assets under templates/ from being mistaken for a project.
  • Changed: Removed downward child-project auto-discovery — launching Kandown from a directory above a project no longer guesses which descendant board to open. Run it inside the intended project (or one of its subdirectories), or pass an explicit --path, for deterministic selection.
  • Cleaned: Removed accidentally committed templates/daemon.json runtime state and templates/kandown.html generated output. The configuration, documentation, and welcome-task seeds required by kandown init remain in templates/.