Coming from gh-dash

labdash has the shape gh-dash established: a query rendered as a table, several of those tables side by side, and a preview pane for the selected row. If you know one, this page maps it onto the other.

Concepts

gh-dashlabdash
prSections in the config fileThe Home groups, built in, plus the tabs you pin yourself
Editing the config to add a queueb browse, f filter, P pin
issuesSectionsThe To-dos view, built the same way
org:my-orgSelect the group in the browse tree. Its subgroups come with it
review-requested:@meYour review queue, the first group on Home
author:@meThe "Your merge requests" group on Home
GitHub search syntax in filtersTyped filter arguments, completed from your instance and checked at the keystroke
layout: widths, order, visibilityColumns drop by priority as the terminal narrows
theme.colorsAppearance settings: theme, density, icon set, date format, timezone
keybindings:Keys are fixed. The full list is the keyboard cheatsheet
repoPathsrepoPaths in settings, with the same glob support
--config--config, pointing at a settings file that holds instances, your account and appearance

Keys that carry over

KeyActionKeyAction
j kmove down and upoopen in the browser
h lprevious and next sectiony Ycopy branch, copy URL
Tabnext viewppreview on or off
/search loaded rows?help
rrefresh this sectionqquit

Three keys are new, and they are the ones that build a view: b, f and P. See the keyboard cheatsheet.

Where views live

A pinned view is written to a state file that labdash owns, next to your settings. It records the scope, the filter, the sort and the name, and it survives an upgrade.

There is no view file to commit to a repository, so a shared team dashboard is not something you check in. Each person builds their tabs in three keystrokes on their own machine.

What GitLab adds

Nested groups

Group.mergeRequests(includeSubgroups: true) returns every merge request in a nested group tree in one call. Selecting platform in the browse tree covers platform/core, platform/ingest and everything below them, in one wait rather than one per project. GitHub's org: is flat and has no equivalent.

Typed filter arguments

GitLab's merge request connection takes 46 typed arguments with real enums: state, draft, labels, author, reviewer, approvers, milestone, dates. labdash sends them as GraphQL variables and completes label, user and project names from your own instance, so a value cannot be misspelled and an impossible enum is rejected as you type it. See filtering.

detailedMergeStatus

GitLab answers why a merge request cannot merge, across 24 enum values, and labdash prints that answer in the row: conflicts, ci failed, needs 1, 3 threads open, blocked by 2. See merge blockers.

Merge trains

train 3/7 in the row, and a merge prompt that says it will queue the merge request rather than merge it. See merge trains.

To-dos

GitLab's to-do list is a queue with its own API: mark done, mark all done, snooze, restore, and filter by action or target. labdash gives it a view of its own, with a count badge on the switcher. See to-dos.