GitHub contribution streak no terminal.
Ano inteiro de commits em ASCII colorido, sem sair do shell.
@guuszz Β· Gustavo Oliveira
May 27, 2025 β May 27, 2026 Β· 1,247 contributions
Jan Fev Mar Abr Mai Jun
ββ ββ ββββββ ββ ββ ββββββββββββββββββ ββ ββ
Seg ββββββββ ββββ ββ ββββββββββββββββββββ ββββββ
ββββββ ββββββββββββββ ββββββββββββββββββ ββ
Qua ββββββββ ββββββ ββββββββββββββββββββββββββββββ
ββ ββββββββββββββββββββ ββββββββββ ββββββββ
Sex ββββββββββββ ββ ββββββββββββββββββββββββββββββ
ββ ββ ββββββββ ββββββββββββββββββ ββββββ
Less ββββββββ More
Current streak: 12 days π₯
Longest streak: 42 days (Mar 14 β Apr 24, 2026)
Active days: 287 / 365 (79%)
Cores reais no teu terminal β paleta GitHub (5 nΓveis de verde).
GitHub mostra o teu heatmap no perfil web. Mas quando vocΓͺ tΓ‘ no terminal codando, ver progresso requer abrir browser, esperar carregar, scrollar. gh-streak traz isso pra dentro do shell β ΓΊtil pra:
- β
Adicionar no teu prompt do shell (
PROMPT_COMMAND) β vΓͺ streak antes de cada comando - β PΓ΄r no MOTD de uma VPS β motiva self-hosters
- β
Compartilhar em screenshots de termo (
asciinema,freeze) - β
Usar em scripts (
gh-streak --json | jq .streak.current)
go install github.com/guuszz/gh-streak@latestGaranta que $GOPATH/bin estΓ‘ no $PATH.
Baixe do latest release o arquivo pra teu OS/arch:
# macOS arm64
curl -L https://github.com/guuszz/gh-streak/releases/latest/download/gh-streak_Darwin_arm64.tar.gz | tar xz
sudo mv gh-streak /usr/local/bin/
# Linux x86_64
curl -L https://github.com/guuszz/gh-streak/releases/latest/download/gh-streak_Linux_x86_64.tar.gz | tar xz
sudo mv gh-streak /usr/local/bin/brew install guuszz/tap/gh-streak # em breve# Tua prΓ³pria conta (auto-detecta via gh CLI ou git config)
gh-streak
# Outro usuΓ‘rio
gh-streak torvalds
# Ano especΓfico
gh-streak --year 2024 guuszz
# Sem cores (pra piping)
gh-streak --no-color | tee streak.txt
# JSON pra script
gh-streak --json | jq '.streak.current'gh-streak precisa de um token do GitHub pra ler o contribution calendar (a REST API nΓ£o expΓ΅e β sΓ³ GraphQL). Tenta as fontes nesta ordem:
GH_TOKENenv varGITHUB_TOKENenv vargh auth token(se GitHub CLI tiver autenticado)
Scope mΓnimo: read:user. Crie um aqui.
O REST API do GitHub nΓ£o expΓ΅e o contribution graph. SΓ³ o GraphQL via contributionsCollection.contributionCalendar:
query($login: String!, $from: DateTime!, $to: DateTime!) {
user(login: $login) {
contributionsCollection(from: $from, to: $to) {
contributionCalendar {
totalContributions
weeks {
contributionDays {
contributionCount
date
contributionLevel
}
}
}
}
}
}O contributionLevel Γ© um enum (NONE, FIRST_QUARTILE, ..., FOURTH_QUARTILE) que o GitHub jΓ‘ calculou β mapeamos pra 0..4 e usamos como Γndice na paleta de cores.
Current streak conta de hoje pra trΓ‘s, parando no primeiro dia com 0 contributions. TolerΓ’ncia: se hoje ainda tΓ‘ vazio, nΓ£o quebra (mesma regra do perfil do GitHub).
Longest streak Γ© um single pass O(n) pelo array de days, mantendo o run atual e o max.
Usa lipgloss pra cores true-color (com fallback ANSI 256 automΓ‘tico). Cada dia vira 2 chars (ββ) pra dar aparΓͺncia de "quadrado" em fontes monoespaΓ§adas.
Layout: 7 linhas (dias da semana, DomβSΓ‘b) Γ ~53 colunas (semanas). Labels Seg/Qua/Sex Γ esquerda, mΓͺs no rodapΓ©.
gh-streak/
βββ main.go # Flag parsing, CLI orchestration, JSON output
βββ github.go # GraphQL client + token discovery
βββ streak.go # Streak calc (current + longest)
βββ render.go # Heatmap + stats + colors (lipgloss)
βββ go.mod
βββ .github/
β βββ workflows/ci.yml # build + vet em cada push
β βββ workflows/release.yml # GoReleaser em cada tag
βββ .goreleaser.yaml # binaries Linux/macOS/Windows
- Single binary β
go buildgera 1 arquivo executΓ‘vel sem runtime - Cross-compile trivial β
GOOS=darwin GOARCH=arm64 go buildfrom any machine - stdlib generoso β
net/http,encoding/json,time,flagcobrem 90% do escopo - Startup instantΓ’neo β CLIs Node leva 100ms+ pra inicializar V8. Go = 10ms.
- Match com
ghCLI ecosystem β o prΓ³prio GitHub CLI Γ© Go
- Current + longest streak
- ASCII heatmap colorido (5 nΓveis)
- JSON output pra scripts
- Token discovery (env + gh CLI)
-
gh-streak compare <user1> <user2>β lado a lado -
gh-streak --shell-promptβ modo "1 linha" pra PS1 - Cache local (1h TTL) β evita hammer na API
- Homebrew tap
- gh CLI extension (
gh extension install guuszz/gh-streak)
PRs welcome! LΓͺ o CONTRIBUTING.md e abre issue antes de feature grande.
MIT Β© Gustavo Oliveira