-
Notifications
You must be signed in to change notification settings - Fork 0
Home
A terminal UI for monitoring CI/CD pipelines. Run it from any git repository and get an instant overview of pipeline runs and job statuses — no browser required.
Supports GitHub Actions and GitLab CI/CD (cloud and self-hosted).
- Installation
- Quick Start
- Configuration
- Authentication
- Interface Overview
- Keyboard Shortcuts
- Log Viewer
- Environment Variables
- Setting up OAuth Apps
brew tap waabox/gitdeck
brew install gitdeck# amd64
wget https://github.com/waabox/gitdeck/releases/latest/download/gitdeck_linux_amd64.deb
sudo dpkg -i gitdeck_linux_amd64.deb
# arm64
wget https://github.com/waabox/gitdeck/releases/latest/download/gitdeck_linux_arm64.deb
sudo dpkg -i gitdeck_linux_arm64.debsudo rpm -i https://github.com/waabox/gitdeck/releases/latest/download/gitdeck_linux_amd64.rpmRequires Go 1.24 or later.
git clone https://github.com/waabox/gitdeck.git
cd gitdeck
go build -o gitdeck ./cmd/gitdeck
mv gitdeck /usr/local/bin/cd /path/to/your/project
gitdeckgitdeck reads the origin remote from .git/config and automatically selects the right CI provider (GitHub Actions or GitLab CI).
# Print version
gitdeck --versiongitdeck stores its configuration at:
~/.config/gitdeck/config.toml
The file is created automatically the first time gitdeck saves a token after authentication. You can also create it manually before the first run.
# Number of recent pipelines to show in the list (default: 3)
pipeline_limit = 3
[github]
# OAuth App Client ID — only needed if you want to use your own app.
# gitdeck ships with a default client_id for github.com so this is optional.
client_id = ""
# OAuth access token. Written here automatically after first login.
# You can also paste a Personal Access Token (PAT) directly.
token = ""
[gitlab]
# OAuth App Application ID — only needed if you want to use your own app.
# gitdeck ships with a default client_id for gitlab.com so this is optional.
client_id = ""
# OAuth access token. Written here automatically after first login.
# You can also paste a Personal Access Token (PAT) directly.
token = ""
# Base URL of your GitLab instance. Leave empty for gitlab.com.
# Required for self-hosted GitLab.
url = ""By default gitdeck uses its own pre-registered OAuth apps for github.com and gitlab.com — no configuration needed. However if you prefer to use your own app (for example to keep tokens scoped to your organization, or for a self-hosted instance), register an OAuth app and set client_id in the config:
[gitlab]
client_id = "your_application_id_here"
url = "https://gitlab.yourcompany.com" # omit for gitlab.comSee Setting up OAuth Apps below for step-by-step instructions.
If you already have a PAT and don't want to go through the OAuth flow, paste it directly into the config:
[github]
token = "ghp_xxxxxxxxxxxxxxxxxxxx"
[gitlab]
token = "glpat-xxxxxxxxxxxxxxxxxxxx"gitdeck will use the token as-is and skip the OAuth flow entirely.
Environment variables always take precedence over the config file and require no file at all:
| Variable | Description |
|---|---|
GITHUB_TOKEN |
GitHub OAuth token or PAT. Overrides github.token. |
GITLAB_TOKEN |
GitLab OAuth token or PAT. Overrides gitlab.token. |
GITLAB_URL |
GitLab instance base URL. Overrides gitlab.url. |
export GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx
export GITLAB_URL=https://gitlab.yourcompany.com
gitdeckOn first run, if no token is present, gitdeck starts the OAuth Device Flow automatically:
No GitHub token found. Starting OAuth authentication...
Visit: https://github.com/login/device
Enter code: ABCD-1234
Waiting for authorization...
Authenticated. Token saved to /Users/you/.config/gitdeck/config.toml
The token is saved to the config file — subsequent runs are silent.
You can skip OAuth entirely by exporting a token directly:
export GITHUB_TOKEN=ghp_yourtoken
export GITLAB_TOKEN=glpat_yourtokenEnvironment variables always take precedence over the config file.
- Go to Settings → Developer settings → OAuth Apps → New OAuth App
- Set any name and homepage URL
- Set the callback URL to
http://localhost(unused for device flow) - Copy the Client ID into
~/.config/gitdeck/config.tomlunder[github]
- Go to User Settings → Applications → Add new application
- Enable the
read_apiscope - Tick Allow Device Authorization Grant
- Copy the Application ID into
~/.config/gitdeck/config.tomlunder[gitlab] - For self-hosted instances, also set
url = "https://your.gitlab.host"
gitdeck uses a hierarchical drill-down navigation: Pipelines → Jobs → Steps. Each level is a full-width screen. Press Enter to drill down, Esc to go back. If a job has no steps (common with GitLab CI), pressing Enter opens the logs directly.
gitdeck | gitdeck / ⎇ main a7e7cc7 / feat: redesign TUI header
────────────────────────────────────────────────────────────
Pipelines
> ● #22285124958 main 2m ago
✓ #22285124957 main 45s ago
✗ #22285124956 feat/auth 1h ago
────────────────────────────────────────────────────────────
#22285124958 by waabox
────────────────────────────────────────────────────────────
↑/↓: navigate enter: open ctrl+r: refresh r: rerun x: cancel q: quit
gitdeck | gitdeck / ⎇ main a7e7cc7 / feat: redesign TUI header
────────────────────────────────────────────────────────────
Jobs for Pipeline #22285124958
> ✓ build 12s
✗ test 38s
○ deploy --
────────────────────────────────────────────────────────────
↑/↓: navigate enter: steps l: logs esc: back r: rerun x: cancel q: quit
gitdeck | gitdeck / ⎇ main a7e7cc7 / feat: redesign TUI header
────────────────────────────────────────────────────────────
Steps for Job: test
> ✓ Checkout code 2s
✓ Install dependencies 15s
✗ Run tests 28s
○ Upload coverage --
────────────────────────────────────────────────────────────
↑/↓: navigate l: logs esc: back q: quit
Header — shows the repo name, current branch with ⎇ symbol, short commit SHA, and first line of the commit message.
Footer — context-aware keyboard hints that change depending on the current view.
| Icon | Meaning |
|---|---|
● |
Running |
✓ |
Success |
✗ |
Failed |
○ |
Pending |
⊘ |
Cancelled |
| Key | Action |
|---|---|
↑ / ↓
|
Navigate items / scroll logs |
Enter |
Drill down: Pipelines → Jobs → Steps (auto-opens logs if no steps) |
Esc |
Go back: Steps → Jobs → Pipelines / close log viewer |
ctrl+r |
Force refresh pipelines |
q / Ctrl+C
|
Quit |
| Key | Where | Action |
|---|---|---|
l |
Jobs, Steps | Open full log viewer for selected job |
r |
Pipelines, Jobs | Re-run selected pipeline (asks confirmation) |
x |
Pipelines, Jobs | Cancel selected pipeline (asks confirmation) |
| Key | Action |
|---|---|
↑ / ↓
|
Scroll one line |
PgUp / PgDn
|
Scroll one page |
g |
Jump to top |
G |
Jump to bottom |
Esc |
Close logs |
Press l from the Jobs or Steps view to open the full log output in a fullscreen scrollable panel.
gitdeck waabox/gitdeck [logs] build
────────────────────────────────────────────────────────────
Run actions/checkout@v4
with:
repository: waabox/gitdeck
...
────────────────────────────────────────────────────────────
↑/↓: scroll PgUp/PgDn: page g/G: top/bottom esc: back
Press Esc to return to the previous view.
gitdeck is safe to run in multiple terminals simultaneously (e.g. one per repository). Token refresh and config writes are coordinated across instances using file locking, so you won't lose your GitLab session when one instance refreshes its OAuth token.
- Config writes are atomic (crash-safe)
- GitLab token refresh is coordinated: only one instance refreshes, others adopt the new token from disk
- Startup authentication is serialized to prevent multiple Device Flow prompts
gitdeck handles internet disconnections gracefully instead of crashing:
- When the connection drops, a banner appears:
⚠ No internet connection — retrying automatically... - The auto-refresh tick stays alive and keeps retrying in the background
- If pipelines were already loaded, the list remains visible with the banner on top
- When connectivity returns, a transient
✓ Back onlinemessage confirms recovery and disappears after 3 seconds - Manual refresh with
ctrl+ralso works while offline without disrupting the UI
This applies to all network operations: pipeline loads, job details, log fetches, actions (rerun/cancel), and re-authentication flows.
| Variable | Description |
|---|---|
GITHUB_TOKEN |
GitHub personal access token or OAuth token. Overrides config file. |
GITLAB_TOKEN |
GitLab personal access token or OAuth token. Overrides config file. |
GITLAB_URL |
GitLab instance base URL (for self-hosted). Overrides config file. |