coderef

Lazygit

Rounded corners. Active panel: green bold border. Inactive panel: default/muted.
DownloadRaw
Lazygit

Build with the Lazygit look.

Palette, type and components from this DESIGN.md, applied to a sample hero.

Palette

At a glance

Theme
dark
Typefaces
System
Sections
10
Length
1,734 words

Add it to your project

Then prompt your agent

Design System · Lazygit

Light and dark previews, tokens and a ready-to-use package, generated from this DESIGN.md. No AI involved: the same file always produces the same output.

Generating design system…

DESIGN.md

DownloadRaw

Lazygit — TUI Design System

The simple terminal UI for git commands. Based on Lazygit — the most popular TUI git client with 54k+ stars.

1. Theme Overview

  • Mood: Functional, clean, panel-driven
  • Density: Dense — multi-panel layout maximizing information on screen
  • Target: Git tools, version control UI, multi-panel dashboards, file managers
  • Terminal: 16-color works, 256-color recommended

2. Color Palette

Semantic Roles

Role Hex ANSI 256 ANSI 16 Usage
Background #000000 0 black Terminal default (transparent)
Foreground #d4d4d4 252 white Default text
Primary #22c55e 34 green Active panel border, current branch
Secondary #3b82f6 33 blue Selected line bg, keybinding hints
Accent #06b6d4 38 cyan Search mode, branch recency, cherry-pick
Success #22c55e 34 green Upstream synced ✓, added lines
Warning #eab308 220 yellow Diverged status ↓↑, marked commits
Error #ef4444 196 red Unstaged changes, removed lines
Muted #6b7280 243 bright black Inactive borders, secondary text
Surface #1e3a5f 24 blue Selected line background

Git-Specific Colors

Name Hex ANSI 16 Usage
Staged #22c55e green Staged files
Unstaged #ef4444 red Unstaged/modified files
Untracked #ef4444 red New untracked files
Merged PR #d946ef magenta Merged pull requests
Open PR #22c55e green Open pull requests
Closed PR #ef4444 red Closed pull requests
Unknown remote #d946ef magenta Unknown remote ?
Cherry-picked cyan bg + blue fg cyan bg Cherry-picked commit highlight
Marked base yellow bg + blue fg yellow bg Marked base commit for rebase
Branch recency #06b6d4 cyan Time since last commit on branch
Commit graph per-author color varies Colored lines in commit graph

3. Typography & ASCII Art

  • Header font: None — plain text panel titles
  • Body text: plain terminal font
  • Emphasis: bold for active panel titles, key shortcuts
  • Code/values: default color, context from position

Text Hierarchy

Level Style Example Usage
Panel title BOLD + positioned in border Status, Files, Branches
Active content Foreground Selected panel content
Inactive content Muted Unselected panel content
Keybindings Secondary (blue) Bottom help bar
Branch name Primary (green) + * Current branch
Diff header BOLD File paths in diff

4. Borders & Box Drawing

Primary Border (Active Panel)

╭── Branches ──────────────╮
│ * main                    │
│   feature/auth            │
│   fix/typo                │
╰───────────────────────────╯

Rounded corners. Active panel: green bold border. Inactive panel: default/muted.

Parts Table

Part Character Usage
top_left ╭ Panel corners
top_right ╮
bottom_left ╰
bottom_right ╯
horizontal ─
vertical │
cross ┼
tee_down ┬
tee_up ┴
tee_right ├
tee_left ┤

Border Style Options

Lazygit supports multiple border styles in config:

Style Characters Look
rounded (default) ╭╮╰╯─│ Modern, smooth corners
single ┌┐└┘─│ Classic straight corners
double ╔╗╚╝═║ Heavy, emphatic
bold ┏┓┗┛━┃ Thick single-line
hidden no visible border Borderless panels

Border States

  • Active panel: Primary (green) + bold
  • Inactive panel: Muted (gray / terminal default)
  • Search mode: Accent (cyan) + bold

Dividers

  • Panel internal: no dividers — items are listed directly
  • Panel title: embedded in top border

5. Components

Multi-Panel Layout

╭─ Status ──╮╭─ Diff ──────────────────────╮
│ main      ││                              │
│ ↑0 ↓0     ││  @@ -1,3 +1,4 @@            │
╰───────────╯│  func main() {               │
╭─ Files ───╮│ -    old()                    │
│ M app.go  ││ +    new()                    │
│ A util.go ││ +    logger.Info("done")      │
╰───────────╯│  }                            │
╭─ Branches ╮│                              │
│ * main    ││                              │
│   dev     ││                              │
╰───────────╯╰──────────────────────────────╯
  • Left sidebar (~33%): stacked panels (Status, Files, Branches, Commits, Stash)
  • Right main area (~67%): diff view, commit details, merge panel
  • mainPanelSplitMode: flexible — main panel can split horizontal/vertical
  • Bottom: command log (collapsible, 8 lines default)
  • portraitMode: auto — stacks all panels vertically in narrow terminals (<100 cols)

Panel Navigation

  ╭─ Files (3) ────── 1 of 3 ─╮
  │ M src/app.go               │ ← active: green border
  │ A src/util.go              │
  │ D old/legacy.go            │
  ╰────────────────────────────╯
  • Active panel: Primary (green bold) border
  • Panel title: left-aligned in border
  • Item count: (3) after title
  • Position: 1 of 3 right-aligned in border

File Status Icons

  M src/app.go        (modified — yellow or green if staged)
  A src/util.go       (added — green)
  D old/legacy.go     (deleted — red)
  R src/old → new.go  (renamed — purple)
  ? README.md         (untracked — red)
  • Status letter prefix: colored by git status
  • Staged: green background
  • Unstaged: red text

Branch List

  * main              ✓ origin ↑0 ↓0
    feature/auth      3d ago
    fix/typo          1w ago   PR #42 ●
  • * for current branch in Primary (green)
  • ✓ for synced, ↑↓ for ahead/behind in Warning (yellow)
  • Recency in Accent (cyan)
  • PR status circles: green (open), red (closed), magenta (merged)

Diff View

  @@ -1,3 +1,4 @@
   func main() {
  -    old()
  +    new()
  +    logger.Info("done")
   }
  • Added +: Success (green)
  • Removed -: Error (red)
  • Context: Foreground
  • Hunk header @@: Accent (cyan)

Keybinding Bar

  [q]uit  [enter] expand  [space] stage  [/] filter  [?] help
  • Keys in []: Secondary (blue)
  • Description: Muted

Status Bar

  main → origin/main · ✓ synced · 3 files changed

6. Layout & Spacing

  • Min terminal width: 80
  • Ideal terminal width: 120+
  • Padding inside panels: 0 lines top/bottom, 1 char left
  • Gap between panels: 0 (panels share borders)
  • Indent level: 2 spaces

Alignment Principles

  • Left sidebar + right main area (resizable)
  • Panels stack vertically in sidebar
  • In narrow terminals (portraitMode): stack all panels vertically
  • Zero wasted space — every pixel carries information

7. Icons & Indicators

Purpose Icon Fallback (ASCII)
Success ✓ +
Error ✗ x
Warning ! !
Current * *
Synced ✓ ok
Ahead ↑ ^
Behind ↓ v
Unknown ? ?
Modified M M
Added A A
Deleted D D
Renamed R R
Copied C C
Spinner |/- |/-
PR Open ● o
PR Merged ● *
PR Closed ● x

Nerd Fonts (Optional)

Disabled by default (nerdFontsVersion: """). When enabled ("2" or "3"):

  • 700+ file-type icons with per-type hex colors
  • Python: \ued1b, JavaScript: \U000f031e, etc.
  • Each icon has a specific color matching the language/filetype

Commit Graph

  * 2d4f8a1  feat: add auth module       (main)
  │ * a1b2c3  fix: handle edge case      (feature/auth)
  │/
  * 9e8d7c6  refactor: clean up utils
  * 1234567  initial commit
  • Colored lines per author — each contributor gets a unique graph line color
  • Commit length indicator shown by default
  • Cherry-picked commits: cyan background + blue text
  • Marked base commits (for rebase): yellow background + blue text

8. Animation & Motion

Spinners

  • Default: \|/- at 100ms — classic ASCII
  • Loading: simple text “Loading…” with spinner prefix

Transitions

  • No animated transitions — instant panel switches
  • Cursor moves between panels instantly
  • animateExplosion: true (default) — plays a visual explosion effect when nuking the working tree (git clean -fd). A fun easter egg that rewards destructive operations with drama

Progress

  • No progress bars — use counters: 1 of 12
  • Spinner prefix for loading states

9. Agent Prompt Guide

Quick Reference

Background: terminal default (transparent)
Foreground: terminal default
Active:     green bold  (active panel border, current branch)
Selected:   blue bg     (highlighted item)
Search:     cyan bold   (search mode border)
Staged:     green       (staged files)
Unstaged:   red         (unstaged changes)
Synced:     green ✓     (upstream ok)
Diverged:   yellow ↑↓   (ahead/behind)
Border:     ╭─╮│╰─╯    (rounded)
Style:      multi-panel, dense, functional, green=active cyan=search

Example Prompts

  • “Build a git TUI: Lazygit style, left sidebar with stacked panels (Status/Files/Branches/Commits), right diff panel, rounded borders, green active panel, blue selection highlight”
  • “Create a multi-panel dashboard: Lazygit layout, rounded borders, green for active panel, muted for inactive, bottom keybinding bar in blue, zero-gap between panels”
  • “Design a file manager TUI: Lazygit-inspired panel layout, rounded borders with embedded titles, M/A/D status prefixes, green/red for status colors”

Do’s and Don’ts

Do

  • Use rounded borders — it’s the Lazygit signature
  • Use green for the active panel border — immediately recognizable
  • Use multi-panel layout — sidebar + main area
  • Embed panel titles in the top border
  • Show item counts and position in borders
  • Use keyboard shortcut hints at the bottom

Don’t

  • Don’t use heavy/double borders — Lazygit is lightweight
  • Don’t waste space — panels should share borders, zero gap
  • Don’t colorize everything — use color for meaning (status), not decoration
  • Don’t use background colors for panels — only for selected line
  • Don’t hide keybinding hints — discoverability is key
All terminal designs →

Brand names describe the visual style only; coderef is not affiliated with or endorsed by any brand listed. Licenses