Skip to content
Back to projects
Open Source / Developer Tools / 2026

kanren

Plain-text, git-backed kanban where every card is a markdown file. A single Go binary serves a local drag-and-drop board and a CLI that edit the same files, so tasks live as plain text next to your code — git as history and sync, no server, no database, no account.

kanren

Case studies

Case 01

One File Store, Two Frontends

Built kanren as a single Go binary where each card is a plain markdown file in a cards/ folder and a .kanren.yml describes the columns. The CLI and the drag-and-drop web board are thin adapters over one package that owns all file access, so they can never disagree about the board.

Problem
Most kanban tools lock tasks inside a server, database, or account, so you cannot version them with your code or edit them offline. A CLI and a web board built separately would inevitably drift and disagree about the same board.
System focus
A shared card/store/web package as the single source of truth; markdown-with-frontmatter card format; git as history and sync; fsnotify file-watching to keep the board live; SortableJS for drag-and-drop columns.
Outcome
A git-native task tracker you own as plain text: edit from the terminal or a live web board interchangeably, sync with git, and keep tasks in the same repo as the work — with zero infrastructure.

Highlights

  • Every card is a plain .md file with frontmatter — tasks live as text next to your code, versioned and diffable in git
  • A single Go binary runs both a local drag-and-drop web board and a full CLI (add, ls, mv, edit) that edit the same files
  • Moving a card rewrites only its status line, keeping git diffs minimal and reviewable
  • The board watches the cards/ folder with fsnotify and refreshes live, so a CLI edit or a git pull shows up without a reload
  • No server, no database, no account — any folder you run kanren in becomes a board via .kanren.yml
Gofsnotifygoccy/go-yamlSortableJS

Stack

GofsnotifySortableJSHTMLCSSJavaScript
Open project