Git-based kanban board TUI
Project description
ganban
git-based Trello replacement TUI
Overview
Open a repo with ganban and it reads from a ganban orphan branch. The board
is just directories (columns) containing symlinks (cards) pointing to
canonical card files. Everything is plain markdown, works with any text
editor, and syncs via git.
Data Model
Cards
Canonical card files live in .all/ with 3-digit numeric IDs:
.all/
001.md
002.md
003.md
Card format:
# Title of the card
Main description goes here, displayed in the body.
## Notes
Subsequent sections become sidebar panels in the TUI.
## Comments
**@user 2024-01-15**: Append-only, TUI adds name + date automatically.
## Links
- blocks [#42](../.all/042.md)
- see also [#7](../.all/007.md)
- Title from first
# heading, not front-matter - Content before first
##= main body - Each
##= collapsible sidebar section ## Comments= special append-only widget## Links= relationships, rendered specially- Cross-references: type
#42, stored as[#42](../.all/042.md)so links work everywhere - Front-matter only for optional extras (tags, color, custom fields)
Tags on separate lines for clean merges:
tags:
- first
- second
Columns
Directories with 1-digit numeric prefix for ordering:
1.backlog/
2.in-progress/
3.done/
- Title from
index.mdfirst# heading, or normalized from dirname in-progress→In progress- Hidden columns start with
.(e.g.,.all) - Optional
index.mdfor description and metadata
Board Layout
Cards appear in columns as symlinks with 2-digit position prefix:
1.backlog/
01.fix-login-bug.md -> ../.all/001.md
02.add-feature.md -> ../.all/003.md
2.in-progress/
01.refactor-api.md -> ../.all/002.md
- Symlink name = position + slug (derived from card title)
- Moving card between columns = delete + create symlink
- Reordering within column = rename symlinks
- Archiving = just delete the symlink, card stays in
.all/ - Orphaned cards (in
.all/but not linked) accessible via TUI
Numbering
Default digits: 3 for .all/, 1 for columns, 2 for symlinks. Can extend with
hex or base64 if needed, but integers are the default.
Git Integration
Reading/Writing Without Checkout
Operates on the ganban branch without checking it out, using git plumbing:
git show ganban:pathto readgit hash-object,git mktree,git commit-treeto write- Or GitPython equivalents
Sync Workflow
- Commit before pull (TUI enforces this)
git pull --rebaseon tasks branch- Reload board
- If conflicts, show conflict UI
Conflict Handling
- Content conflicts: git markers show in markdown, user edits them out
- Broken symlinks: highlight red, user picks destination or deletes
- Column renames: broken links surface as red cards, same fix
Multi-Remote Sync
- One upstream (push target)
- Optional peer remotes (extra fetch sources)
- Fetch all remotes periodically
- On detecting changes: commit local, rebase, push upstream
- Changes propagate opportunistically through whoever can reach upstream
Philosophy
- Permissive: don't be prescriptive, let users mess with files
- Resilient: handle broken states gracefully, offer to fix
- Minimal: derive what you can (titles, order), front-matter is opt-in
- Portable: works with any markdown renderer, any git host, any editor
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ganban-0.1.0.tar.gz.
File metadata
- Download URL: ganban-0.1.0.tar.gz
- Upload date:
- Size: 26.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1e93bc730e3b4c97b672e9a7d4d8af84ec8587bfcbdcd3d80248cf44c756d7dd
|
|
| MD5 |
24f83168b191274b23d78d84034cb3b0
|
|
| BLAKE2b-256 |
a10845e14552d8aac7d29ed5b8b47f76c2f7fba0b7d142a5f308f3e08bd37508
|
File details
Details for the file ganban-0.1.0-py3-none-any.whl.
File metadata
- Download URL: ganban-0.1.0-py3-none-any.whl
- Upload date:
- Size: 34.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
964bc2be87000077d59c332368c7a45e8222be47df817653b664d39d9a9fbef8
|
|
| MD5 |
b7bb81b91563447b283c8e1f575b132a
|
|
| BLAKE2b-256 |
046be19f4a0dd074407024d4b4d29309962c306c7c3be21af70ec38419397251
|