Humble keyboard-driven terminal UI for your issues: GitHub Projects and local git-native issues.
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.
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.
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.
The easiest path is a prebuilt release binary. Install it with the one-line script:
curl -fsSL https://raw.githubusercontent.com/0xheartcode/lazydash/main/scripts/install.sh | shOr download a prebuilt archive from the
releases page and put the
lazydash binary on your PATH.
Or install with go:
go install github.com/0xheartcode/lazydash@latestMake sure $HOME/go/bin is in your PATH:
echo 'export PATH="$PATH:$HOME/go/bin"' >> ~/.bashrc # or ~/.zshrcOr build from source:
git clone https://github.com/0xheartcode/lazydash
cd lazydash
go build -o lazydash .lazydash # browse GitHub Projects + this repo's local issues
lazydash --config ~/.config/lazydash/config.yml
lazydash version # print the versionRun 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.
| 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) |
o |
Open in browser |
d |
Open in gh-dash |
p |
Open the full issue in a pager (bat, else $PAGER, else less) |
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) |
- Two backends, one UI. Browse and edit GitHub Projects and local git-native
issues from the same board and table views, switchable with
[/]. - Styled Markdown detail panel. Issue descriptions and bodies render as
styled Markdown in the detail panel, and
popens the full issue in an external pager (bat, else$PAGER, else less). - 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
ghCLI. - Offline cache. The last synced GitHub board is cached, so it stays browsable (read-only) when you're offline.
- Live GitHub views. GitHub boards and tables are fetched live from the Projects API, so the TUI matches the browser.
- Planned: timeline/roadmap view. A roadmap view is planned for a later release.
Config is loaded from the first location found:
--configflag$LAZYDASH_CONFIGenv var.lazydash.ymlin current directory$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: uOpen to contributions and PRs!
MIT
