Tour

The interface is five regions and four rows of chrome. Everything else on screen is data.

tour-annotated

The five regions

#RegionRowsWhat it owns
1Context bar1The active view, the instance and user, how long since the last refresh, remaining rate limit, and any offline or read-only badge
2Tabs1Home, then every view you pinned, with row counts, scrolling horizontally when there are more than fit
3TableflexThe data
4Preview paneflexDetail of the selected row
5Footer1The running task on the left, the keys available right now on the right

Chrome costs four rows out of thirty-two, which is why no logo sits permanently in the header. A sixth region is usually zero rows tall: the filter bar, which appears while you are searching or editing a filter.

Reading a row

 →  Add retry budget to the i…  ingest        @dana   2/2  ✔  ready      2h
 │  │                           │             │       │    │  │           │
 │  │                           │             │       │    │  │           └─ updated, relative
 │  │                           │             │       │    │  └───────────── why it cannot merge
 │  │                           │             │       │    └──────────────── head pipeline
 │  │                           │             │       └───────────────────── approvals: have / need
 │  │                           │             └───────────────────────────── author
 │  │                           └─────────────────────────────────────────── project
 │  └─────────────────────────────────────────────────────────────────────── title
 └────────────────────────────────────────────────────────────────────────── selection marker

A pipeline row reads the same way, with the same keys: project, ref, pipeline number, duration, failure reason, and how long ago.

 →  ✖ gateway  main             #88231   4m 02s  script_failure          2m

The leftmost column carries a marker rather than a column of its own:

MarkerMeaning
the selected row
draft
changed since the last refresh
multi-selected

title, blockers and pipeline never drop, however narrow the terminal is. Every other column drops in a fixed priority order as the window shrinks.

Browse, filter, pin

You start on Home, which needs none of these three keys. They cover the questions Home does not answer: a team's queue, a release branch, a group's CI.

KeyDoes
bBrowse your whole GitLab tree, most-used groups first. Enter scopes the dashboard to whatever you highlight, and the scope survives a view switch.
fFilter by state, draft, labels, authors, reviewers, approvals and dates. Values complete from your own instance, and a value GitLab would reject is rejected at the keystroke.
PPin the scope and filter on screen as a tab. Name it in one prompt, and it is still there tomorrow.

Common keys

KeyDoesKeyDoes
j kmove down and uprrefresh this section
h lprevious and next sectionTabnext view
/search the loaded rowspshow or hide the preview
oopen in the browserLlogs of the failing job
?every key, groupedqquit

Arrow keys, Enter and Esc do everything the vim keys do. Both vocabularies are complete, so nobody is locked out for not knowing vim and nobody who knows vim has to reach for an arrow key.

/ and f are different jobs. / narrows what is already on screen and issues no request. f changes what labdash asks GitLab for.

Key conventions

Lowercase acts on the row, uppercase escalates or reverses it. x closes and X reopens. d marks one to-do done and D marks all of them. r refreshes this section and Ctrl+R refreshes everything.

A key means the same verb in every view. R retries. x stops. m makes it go, merging a merge request or playing a manual job. L shows logs.

Two behaviours worth knowing before they surprise you:

  • Esc never quits, and q never goes back. Esc moves back exactly one level. On a dashboard it clears a search or a selection, and with nothing to clear it does nothing. It will not throw away a half-typed comment without asking.
  • There are no timed key sequences. A chord is Ctrl-prefixed and instant. A g-then-g with a timeout produces mystery input on a slow SSH link, so labdash has none.

The help overlay

tour-preview

? opens the overlay, generated from the same keymap the application runs on. The keyboard cheatsheet on this site comes from that keymap too, with labdash keys --markdown, so the two cannot drift.

The command palette

Ctrl+K lists every action labdash has, with its key, filtered as you type. It is the answer to "there must be a way to do this" when you do not know what the thing is called.

❯ appr
  →  Approve merge request                              v
     Approve all selected                              ⇧V
     Show approval rules                                ]
  ── unavailable here ──────────────────────────────────
     Approve deployment            needs an environment row

Actions you cannot use from the current row are shown, with the reason, rather than hidden. That is how you find out the tool does something you have not reached yet.

Ctrl+P is the other half. It jumps to any project or group you have access to, matched on a fragment of the path, without walking the browse tree:

❯ plat/ing                                    2 of 1841
  →  platform/ingest              group · 41 open MRs
     platform/ingest-replay       group ·  3 open MRs

Browse is for exploring. Ctrl+P is for returning somewhere you already know the name of.

Toasts

A completed action reports in a toast: retried #88224 → #88232. It dismisses itself after a few seconds or on any key, and it never takes focus, so you can keep moving down the table while it is on screen. Anything that failed stays in the footer instead, with the reason.

Terminal width

The layout has real breakpoints, and each one is a window somebody works in.

ColumnsLayoutPreviewColumns shown
under 56A notice with the current and required widthnonenone
56–79One pane, two-line rows, tabs collapse to ‹ 2/5 Needs My Review ›full-screen on Entertitle, blocker, CI
80–119One pane, one-line rowsbottom, 40%+ approvals, project, updated
120–159Splitright, 38%+ author, labels
160 and upSplitright, 34%+ diff size, threads, branch

The preview sits at the bottom below 120 columns and on the right at or above it. A right-hand pane on a 90-column terminal squeezes the table into uselessness.

tour-narrow
The same screen at 96 columns. The preview moved to the bottom, two columns dropped, and title, blocker and CI stayed.
dashboard → pipeline detail → job trace      the deepest legitimate path
dashboard → MR detail       → thread         the other one

Nothing goes deeper than three levels. Reading code at the fourth level belongs in the browser or your editor, one o away.

Next

Browse your GitLab, filter it, and pin the result.