lazydash

command module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 25, 2026 License: MIT Imports: 1 Imported by: 0

README

lazydash

Humble keyboard-driven terminal UI for your issues — GitHub Projects and local git-native issues.

A browser (and editor) for your projects, in your terminal.

demo

Why

Are you too lazy to SWITCH from CLI to the browser like me ? Use lazydash.

Your code travels with git clone; your GitHub issues don't. lazydash speaks to both worlds from one keyboard-driven UI: your GitHub Projects boards, and local git-native issues that live in the repo itself and work with no network at all. Same board, same table, same keys — online or offline.

Also thinking of renaming it lazyview, since with alias lazydash = ld, which may already be taken by lazydocker.

Open an issue if you have a better name.

I will be working on this on and off.

Backends

lazydash reads and writes through pluggable backends and shows them side by side in one project list (tagged gh / local when you have both):

Backend Where issues live Needs network Manage (create/comment/close/move)
GitHub Projects github.com yes comment, close/reopen, move card (needs gh CLI)
Local (git-native-issue) this repo, under refs/issues/ no full: create, comment, close/reopen, move, label, assign, undo

Backends are auto-detected: GitHub when gh is authenticated, local when the current repository has any refs/issues/*. Restrict them with the sources config key.

Install

For GitHub, gh CLI authenticated (gh auth login) — also used to write (comment / close / move). For local issues you only need git; nothing else, no network.

go install github.com/0xheartcode/lazydash@latest

Make sure $HOME/go/bin is in your PATH:

echo 'export PATH="$PATH:$HOME/go/bin"' >> ~/.bashrc  # or ~/.zshrc

Or build from source:

git clone https://github.com/0xheartcode/lazydash
cd lazydash
go build -o lazydash .

Usage

lazydash                                    # browse GitHub Projects + this repo's local issues
lazydash --config ~/.config/lazydash/config.yml

Run it inside a repository to work with that repo's local issues offline. The local backend reads issues straight from git plumbing, and authors writes as git commits under refs/issues/, so it interoperates with the git issue CLI and needs no extra tooling.

Keybindings

Key Action
j / k Move down / up
h / l Move left / right (board columns)
tab / shift+tab Next / previous pane
enter Load project · open card details
esc Close details / cancel a modal
[ / ] Cycle project views (Board → Table → Roadmap)
o Open in browser
d Open in gh-dash
r Refresh
? Help
q Quit

Write actions (shown only for writable sources, gated per backend capability):

Key Action
c New issue
m Comment on the selected card
x Close / reopen (with confirmation)
M Move to another column (single-select field)
L / a Set labels / assignee (local)
u Undo last change (local issues)

Features

  • Two backends, one UI. Browse and edit GitHub Projects and local git-native issues from the same board/table/roadmap views, switchable with [ / ].
  • Fully offline for local issues. Create, comment, close, move, label, assign and undo — all authored as git commits under refs/issues/, no network, no external binary.
  • Manage GitHub too. Comment, close/reopen and move cards between columns via the authenticated gh CLI.
  • Offline cache. The last synced GitHub board is cached, so it stays browsable (read-only) when you're offline.
  • Live GitHub views. GitHub boards/tables/roadmaps are fetched live from the Projects API, so the TUI matches the browser.

Config

Config is loaded from the first location found:

  1. --config flag
  2. $LAZYDASH_CONFIG env var
  3. .lazydash.yml in current directory
  4. $XDG_CONFIG_HOME/lazydash/config.yml (default: ~/.config/lazydash/config.yml)
defaults:
  sources: []                    # backends to enable: ["github", "local"]. empty = auto-detect both
  orgs: []                       # additional GitHub orgs to show projects from
  ignoreProjects: []             # projects to hide e.g. ["owner/name", "name"]
  ignoreOrgs: []                 # orgs to hide e.g. ["myorg"]
  onlyProjects: []               # if set, show only these projects
  onlyOrgs: []                   # if set, use only these orgs
  refreshIntervalMinutes: 5

keybindings:
  openInBrowser: o
  openInGhDash: d
  refresh: r
  help: "?"
  quit: q
  prevView: "["
  nextView: "]"
  # write actions
  create: c
  comment: m
  toggleState: x
  move: M
  labels: L
  assign: a
  undo: u

Contribute

Open to contributions and PRs!

License

MIT

Documentation

Overview

Command lazydash is a keyboard-driven terminal UI for browsing and managing issues from one place: GitHub Projects boards and local git-native issues (issues stored in the repository under refs/issues/).

Run it inside a repository to work with local issues fully offline — create, comment, close, move and undo — or anywhere to browse and edit your GitHub Projects. It auto-detects which backends are available. See the README for keybindings and configuration.

Directories

Path Synopsis
internal
api
Package api is the GitHub Projects v2 data source: it wraps the go-gh GraphQL client and maps GitHub's schema onto lazydash's backend-neutral core model.
Package api is the GitHub Projects v2 data source: it wraps the go-gh GraphQL client and maps GitHub's schema onto lazydash's backend-neutral core model.
cache
Package cache persists the last successfully-loaded board per project so a board stays browsable when its source is unreachable — a GitHub project you synced earlier can still be read offline.
Package cache persists the last successfully-loaded board per project so a board stays browsable when its source is unreachable — a GitHub project you synced earlier can still be read offline.
core
Package core holds lazydash's backend-neutral domain model: the projects, boards, cards and fields that every source (GitHub Projects, local git issues) maps onto and that the TUI renders.
Package core holds lazydash's backend-neutral domain model: the projects, boards, cards and fields that every source (GitHub Projects, local git issues) maps onto and that the TUI renders.
source
Package source defines the backend abstraction lazydash renders through.
Package source defines the backend abstraction lazydash renders through.
source/github
Package github adapts the GitHub Projects v2 client (internal/api) to the source.Source interface: it resolves the viewer, aggregates user and org projects, applies the config include/exclude filters, and loads boards.
Package github adapts the GitHub Projects v2 client (internal/api) to the source.Source interface: it resolves the viewer, aggregates user and org projects, applies the config include/exclude filters, and loads boards.
source/local
Package local is the offline backend: it reads (and later writes) git-native-issue issues stored as commit chains under refs/issues/ in the repository lazydash is launched in.
Package local is the offline backend: it reads (and later writes) git-native-issue issues stored as commit chains under refs/issues/ in the repository lazydash is launched in.
tui
tui/components/picker
Package picker is a modal single-choice list used to pick a field option (which column to move a card to, a priority, a state).
Package picker is a modal single-choice list used to pick a field option (which column to move a card to, a priority, a state).
tui/components/prompt
Package prompt is a small modal text field used to collect a single- or multi-line value (an issue title, a comment, a label list).
Package prompt is a small modal text field used to collect a single- or multi-line value (an issue title, a comment, a label list).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL