Skip to content
brycekottkePublic

About

vim-style GitHub Projects v2 kanban board TUI written in Go

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

5 Commits

Folders and files

Repository files navigation

ghtui

A terminal kanban board TUI for GitHub Projects and local task management.

Features

  • Kanban board view with vim-style navigation
  • GitHub Projects v2 integration (create, edit, move issues)
  • Local board mode — no GitHub required, data stored in ~/.config/ghtui/
  • Profile selector at startup — switch between GitHub and local boards
  • Vim insert mode in all text fields (normal/insert/paste support)
  • Full terminal width/height utilization
  • Per-column card scrolling with ↑/↓ indicators
  • Search/filter with /
  • Command mode with :wq (save) and :q (discard)

Installation

# Build using the Docker compile script
~/git/slicktrail/docker-projects/compile-ghtui/compile.sh

The binary is installed to ~/bin/ghtui-dir/ghtui.

Configuration

Profiles (~/.config/ghtui/profiles.conf)

Created automatically on first run. Edit to add more profiles:

# GitHub profile — connects to a GitHub Project board
[work]
type = github
config = ~/.config/ghtui/work.json

# Local profile — stores data in ~/.config/ghtui/boards/personal.json
[personal]
type = local

At startup, ghtui presents a profile selector. Use j/k to move and enter to select.

GitHub config (~/.config/ghtui/config.json)

Required for GitHub profiles:

{
  "github_token": "ghp_yourtoken",
  "org": "your-org",
  "project_number": 1,
  "assignee": "your-github-login",
  "repo": "your-org/your-repo"
}

Multiple GitHub profiles can each point to a different config file via the config key in profiles.conf.

Local boards

Local board data is stored at ~/.config/ghtui/boards/<profile-name>.json.

New local boards start with three columns: Backlog, In Progress, Done.

Keybindings

Board (normal mode)

Key Action
h / l Move between columns
j / k Move between cards
H / L Move selected card left/right
enter Open card detail
C / shift+c Create new issue
n New column (local boards only)
/ Search/filter cards
r Refresh board
:q Quit

Create / detail form

Key Action
j / k Move between fields
enter Open field for editing
i / a Enter vim insert mode
esc Back to field normal mode
ctrl+shift+v Paste from clipboard
:wq Save and close
:q Discard and close

GitHub forms include Assignee and Status fields. Local forms show Title and Body only — the card is placed in the first column automatically.

Column create prompt (local only)

Type a name and press enter to create. esc cancels.

Local board data format

{
  "columns": [
    {
      "name": "In Progress",
      "cards": [
        {
          "id": 1,
          "title": "My task",
          "body": "Details here",
          "status": "In Progress",
          "created_at": "2026-07-24T12:00:00Z",
          "updated_at": "2026-07-24T12:00:00Z"
        }
      ]
    }
  ],
  "next_id": 2
}

About

vim-style GitHub Projects v2 kanban board TUI written in Go

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages