Skip to content

Overview

Relevant source files

The following files were used as context for generating this wiki page:

Purpose and Scope

This document introduces KanStack, a local-first markdown-based Kanban board desktop application. It explains the application's core purpose, design philosophy, technology stack, and key capabilities. For installation and usage instructions, see Getting Started. For detailed architectural information, see Architecture Overview.

What is KanStack?

KanStack is a desktop application for managing Kanban boards stored as markdown files. It reads and writes a TODO/ directory structure containing todo.md board files and individual card files in markdown format. The application provides a graphical interface for viewing and editing these files while maintaining the markdown files as the single source of truth.

The application is built as a desktop-native program using Tauri 2, combining a Vue.js 3 frontend with a Rust backend. All board and card data exists as plain markdown files on the local filesystem—there is no database, no cloud sync, and no proprietary data formats.

Sources: README.md:1-13, package.json:1-29, src-tauri/Cargo.toml:1-27

Core Design Philosophy

KanStack follows three fundamental principles:

Local-First Architecture

All data resides on the user's local filesystem. The application reads from and writes to markdown files in a TODO/ directory structure. No network requests are made, no external services are required, and the user maintains complete ownership of their data.

Markdown as Source of Truth

Board structure and card content are stored in human-readable markdown files that follow specific conventions. These files can be edited in any text editor, versioned with git, or processed by other tools. The application parses markdown to build its internal data model and serializes changes back to markdown for persistence.

Zero Database Dependency

The application maintains no database, cache files, or binary data stores. Application state is derived on-demand from markdown files. The only persistent state outside the workspace is user preferences stored in a config.md file in the application's data directory.

Sources: README.md:1-13, README.md:34-56

Technology Stack

The following table summarizes the core technologies used in KanStack:

LayerTechnologyVersionPurpose
Desktop FrameworkTauri2.xNative desktop application shell
Frontend FrameworkVue.js3.5.13Reactive UI components and state management
Frontend LanguageTypeScript5.7.2Type-safe frontend code
Frontend BuildVite5.4.14Fast development server and bundler
Backend LanguageRust2021 editionFile I/O, workspace operations, system integration
File Watchingnotify6.xFilesystem change detection
Serializationserde, serde_json, serde_yaml1.x / 0.9Data structure serialization

KanStack Technology Stack and Communication Flow

Sources: package.json:15-28, src-tauri/Cargo.toml:8-18

Workspace Structure and File Organization

KanStack workspaces follow a conventional directory structure. Each board is represented by a TODO/ directory containing a todo.md file, a cards/ subdirectory, and an optional README.md file.

Workspace Directory Structure

File Responsibilities

FilePurposeContent
todo.mdBoard structure definitionColumn definitions, card placement, section organization, sub-board links
cards/*.mdIndividual card contentCard metadata (frontmatter), full description, checklists, notes
README.mdBoard-level documentationNotes about the board itself (optional)
Sub-board TODO/Hierarchical organizationNested workspaces for project decomposition

Key Data Flow: Markdown to Application State

The application transforms markdown files through several stages to build its runtime state:

The reverse flow occurs when the user makes changes: the frontend serializes updated boards back to markdown, invokes Rust commands to write files, and receives an updated WorkspaceSnapshot to refresh the UI.

Sources: README.md:34-56

Core Features

Board Management

  • Multi-board workspaces: Open a root TODO/ directory and navigate to any discovered sub-boards
  • Hierarchical structure: Organize projects with parent-child board relationships
  • Column and section organization: Define custom columns with optional sections for grouping cards
  • Sub-board discovery: Automatically detect nested TODO/ directories and build board lineage

Card Operations

  • Full-text editing: Edit card content in a dedicated modal with live autosave
  • Metadata management: Track card properties via frontmatter (tags, priorities, timestamps)
  • Wikilink references: Link cards using [[card-slug]] syntax
  • Card movement: Drag cards between columns and sections, archive to hidden archive column
  • Multi-select operations: Select multiple cards for batch archiving or movement

Workspace Features

  • File watching: Automatic UI updates when markdown files change externally
  • Undo/redo: Full operation history with snapshot-based rollback
  • Keyboard shortcuts: Navigate and manipulate boards without mouse interaction
  • No lock-in: All data remains in standard markdown format, editable in any text editor

Sources: README.md:7-13

High-Level Application Architecture

The following diagram maps the conceptual system to actual code modules and data structures:

Component Responsibilities

Component/ModuleResponsibilityKey Types/Functions
App.vueApplication orchestrator, keyboard shortcuts, menu integrationCoordinates all composables
useWorkspace.tsWorkspace state management, board/card selectionLoadedWorkspace, applyWorkspaceMutation()
useBoardActions.tsBoard and card mutationsmoveCard(), createBoard(), archiveCard()
useCardEditor.tsCard editing session managementopenEditor(), saveCardContent()
kanbanParser.tsMarkdown parsingparseWorkspace(), KanbanParseResult
workspace.rsBackend workspace operationsload_workspace(), save_board_file()
loading.rsFile system snapshot collectioncollect_workspace_snapshot()

Sources: README.md:67-75

Application Lifecycle

A typical user session follows this flow:

  1. Initialization: User launches the application
  2. Workspace Selection: User opens a TODO/ directory via file dialog
  3. Loading: Backend reads all markdown files and creates WorkspaceSnapshot
  4. Parsing: Frontend parses markdown into structured KanbanParseResult
  5. Indexing: Parser output is indexed into LoadedWorkspace with efficient lookup maps
  6. Rendering: Vue components render the current board based on reactive state
  7. Interaction: User performs operations (move cards, edit content, create boards)
  8. Persistence: Operations serialize changes to markdown and invoke backend to write files
  9. Synchronization: File watcher detects changes and triggers workspace reload

Sources: README.md:14-32

Relationship to Other Documentation

This overview provides a conceptual introduction to KanStack. For more specific information: