Markdown Task Manager

A single-file, local-first Kanban board that turns plain Markdown files into a drag-and-drop task manager, with no server, database, or account required.

533stars
Mozilla Public License 2.0

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
68/100Good
Development Activity52
Maintenance88
Community60
Maturity32
Momentum40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
53/100Fair
Architecture55
Code Quality40
Innovation62
Learning Curve55

Markdown Task Manager is a standalone, single-HTML-file Kanban board that uses the browser’s File System Access API to read and write tasks directly to plain Markdown files (kanban.md and archive.md) on your local disk. There’s no server, no database, no account, and no installation beyond downloading one HTML file and opening it in a Chromium-based browser.

Because tasks live as plain text, the board doubles as a git-friendly task tracker: files can be committed, diffed, and reviewed alongside code, and multiple projects are supported through a recent-projects switcher backed by IndexedDB for remembered folder handles. The board itself supports customizable columns, drag-and-drop, priorities, categories, multi-user assignment, tags, due dates, subtasks with progress bars, and a hand-rolled Markdown-to-HTML renderer for task descriptions and notes.

The project leans deliberately into AI-assisted development workflows: it defines a strict Markdown task format and ships ready-made instruction files (and a dedicated Claude Code skill) for Claude, GitHub Copilot, ChatGPT, Gemini, Qwen, and other assistants, so an AI pair programmer can create, update, and archive tasks in the same file a human edits, with each change traceable back to git commits.

The entire app builds from a small set of numbered JavaScript and CSS partials concatenated by a custom Node build script into one dependency-free HTML file, keeping the codebase easy to audit and the output trivially portable — copy the file anywhere, or centralize one copy and point it at different project folders.

What You Get

  • Single-file, zero-install Kanban board that runs entirely in the browser
  • Direct read/write access to local kanban.md and archive.md files via the File System Access API
  • Customizable columns, drag-and-drop, priorities, tags, categories, multi-user assignment, and due dates
  • Subtasks with checkable items and an automatic progress bar per task
  • Multi-project support with a recent-projects switcher persisted in IndexedDB
  • Built-in dark mode, responsive layout, and touch drag-and-drop for mobile
  • Ready-made AI assistant integration (Claude, Copilot, ChatGPT, Gemini, and more) via a strict Markdown task format and a dedicated Claude Code skill
  • Multilingual UI (English, French, German, Simplified Chinese)

Common Use Cases

  • Solo developers who want a lightweight, git-versioned Kanban board without spinning up Trello or a project-management SaaS
  • Teams that want task data to live in the repo itself, reviewable in pull requests alongside code changes
  • Developers pairing with AI coding assistants who want tasks, subtasks, and progress notes captured in a strict, machine-readable Markdown format
  • Users who need an offline-first task tracker with no account, subscription, or server dependency
  • Distributed or remote teams synchronizing tasks through git instead of a hosted tool

Under The Hood

Architecture The app builds via build.mjs, which concatenates numbered partials from src/scripts (01-state.js through 12-init.js) and src/styles into a single self-contained task-manager.html, with no bundler or module system — plain global-scope classic scripts relying on load order (numeric filename prefixes) and shared mutable state (tasks, config, directoryHandle in 01-state.js). It’s a monolithic single-page app decomposed by concern (state, storage, io, markdown, board, filters, columns-form, task-detail, archive, i18n, generate, init), but with no module boundaries or dependency injection — everything communicates through shared globals and DOM queries. That’s intentional given the project’s goal of a single dependency-free HTML file, but it makes the codebase tightly coupled; changing the shape of the core tasks array would ripple through storage, markdown, board, and archive files alike.

Tech Stack No frontend framework is used — vanilla JS, HTML, and CSS only. Persistence relies on two browser-native mechanisms: the File System Access API (showDirectoryPicker, file handles) to read/write kanban.md/archive.md directly on disk, and IndexedDB (03-storage.js) to remember recent project directory handles across sessions. Build tooling is a small custom Node script (build.mjs) with html-minifier-terser as the sole devDependency, concatenating src/styles/.css and src/scripts/.js (ordered by numeric filename prefix) into placeholders in src/index.html, with an optional —dev unminified mode. There’s no bundler, no test runner, and no CI configuration. The deployment target is simply the static HTML file itself; only Chromium-based browsers (Chrome, Edge, Opera 86+) are supported since the File System Access API isn’t available in Firefox or Safari.

Code Quality No test files or CI configuration exist in the repository — quality assurance appears to rely on manual testing. Error handling is present but ad hoc: async functions wrap IndexedDB and File System Access calls in try/catch with console.error and user-facing notifications, but there’s no centralized error boundary. The custom Markdown-to-HTML renderer shows some security awareness — it escapes HTML before applying formatting and validates link URL schemes to block javascript:/data: URIs — but is a hand-rolled regex-based parser rather than a battle-tested library, which raises the risk of edge-case bugs. Naming is descriptive and consistent, but there’s no TypeScript, no linter or formatter configuration, and no module system — scripts run as classic globals relying on load order, which is fragile at this codebase’s size.

What Makes It Unique The distinctive design choice is treating Markdown files themselves as the single source of truth for a Kanban board, using the File System Access API to read and write kanban.md/archive.md directly with no server, database, or account, so task data stays plain-text, git-diffable, and editable by hand. The project explicitly designs around AI-assisted workflows: it ships a companion Claude Code skill and instruction templates for several AI assistants so an AI pair-programmer can create and update tasks in the same strict Markdown format a human would edit, giving a lightweight audit trail linked to git commits. That’s a specific and current niche — AI-native task tracking — rather than a novel UI or parsing algorithm, since the Kanban board and Markdown rendering themselves use standard techniques.

Self-Hosting

Licensing Model Mozilla Public License 2.0 (MPL-2.0) — a permissive, file-level copyleft license. You can use, modify, and distribute the code, including commercially, but modified versions of the MPL-2.0-covered source files must remain under MPL-2.0 with their source made available.

Self-Hosting Restrictions None found. There is no separate paid tier, license key, or gated feature set — it’s a single static HTML file with no backend to restrict.

Enterprise Features None — there is no enterprise or paid tier. All functionality (Kanban board, filters, multi-project support, archiving, AI-assistant integration) ships in the one open-source HTML file.

Cloud vs Self-Hosted Not applicable — there is no hosted or cloud offering. The application runs entirely client-side in the browser and reads/writes directly to local files; nothing is sent to a server.

License Key Required No.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers

Search