Renders your GitHub contribution graph and pull requests as an animated Minecraft Oak, Sakura, Spruce, or Birch Tree with transparent background, live weather, and gamer collectibles.
- Minecraft Tree Biomes 🌸🌲⚪🌳🌴🪵🏜️🌿🔥🌌 — choose between 10 authentic biomes: Oak, Sakura / Cherry Blossom, Taiga Spruce, Golden Birch, Lush Jungle, Dark Oak, Savanna Acacia, Mangrove Swamp, Crimson Nether, or Warped Nether.
- Minecraft Biome Canopies — weekly commits drive the lushness and color intensity levels (Level 0 dormant to Level 4 rich emerald/pink/cyan/amber) across the 14 canopy blocks.
-
Minecraft Pet Companions 🐾 (Wolf 🐺, Fox 🦊, Cat 🐱, Parrot 🦜) — tamed red-collared Wolf (tail-wagging with active streaks
$\ge 14\text{d}$ ), sleeping/waking orange Fox (curled up during day, alert at night for streak$\ge 7\text{d}$ ), cute Tuxedo Cat, and dancing Red Macaw Parrot (with tri-color wings & head-bobbing dance). - Roasting Campfire 🔥 — crackling campfire with rising smoke particles and flying ember sparks during high-velocity sprint periods.
- Milestone Treasure Chests 📦 (Wood, Iron, Gold, Diamond, Ender 🔮) — treasure chests sitting flush on the lawn leveling up as your total commit milestones grow, culminating in the Ender Chest with glowing Eye of Ender and floating portal particles!
- Seasonal Holiday Modes 🎃🎄🎆 — auto-detects or manual Halloween (glowing Jack-o'-Lantern & flying spooky ghosts), Holiday Christmas (twinkling canopy fairy lights & wrapped gifts), and New Year Fireworks (colorful sky starbursts).
-
Wooden & Milestone Stat Signposts 🪧 (Wood, Gold 🪙, Diamond 💎) — a pixelated signpost displaying your live streak with smart auto-scaling (
14d,100d,1.2k), leveling up with glowing ink & royal crowns for Century Club ($\ge 100\text{d}$ ) and 1-Year ($\ge 365\text{d}$ ) streaks! - Minecraft Bee 🐝 & Streak Beehive 🍯 — an animated buzzing bee with fluttering wings and a wooden beehive on the trunk celebrating your active commit streak.
-
Underground Ore Blocks 💎 (Netherite, Gold, Diamond, Emerald, Lapis Lazuli, Redstone) — embedded in the dirt layer featuring creator-exclusive Netherite (
@nivinvysakh), Lapis Lazuli exclusively for verifiednivinvysakh/gh-treecontributors, and productivity milestone ores. - Minecraft Flowers 🌸 (Open PRs) — up to 4 colorful flowers (Poppies, Dandelions, Tulips, Sakura) planted on the lawn.
- Minecraft Red Apples 🍎 (Merged PRs) — up to 4 ripe red apples hanging beneath the canopy leaf blocks.
- Minecraft Golden Apples 🍏✨ (Assigned PRs / Reviews) — up to 4 enchanted golden apples placed on the lawn.
- Live Weather & Day/Night Cycle ☀️🌕🌧️❄️☁️ — real-time weather integration (via Open-Meteo) rendering animated Sun, Starry Night Moon & twinkling stars, Rain streaks & splashes, Snowfall & snow caps, or Drifting clouds.
- Transparent Background — pure alpha transparency that seamlessly blends into dark and light GitHub profiles and READMEs.
Classic Oak 🌳 (tree-type: oak) |
Sakura Cherry Blossom 🌸 (tree-type: sakura) |
|---|---|
| Classic Oak, Wolf Pet, Campfire & Chest | Cherry blossom pinks, Cat Pet & falling petals |
Taiga Spruce 🌲 (tree-type: spruce) |
Birch Forest ⚪ (tree-type: birch) |
|---|---|
| Dark coniferous needles, Fox & spruce bark | White notched birch bark & Wolf pet |
Lush Jungle 🌴 (tree-type: jungle) |
Dark Oak Forest 🪵 (tree-type: dark_oak) |
|---|---|
| Tropical rainforest emeralds & Parrot pet | Deep shadow canopy & Wolf pet |
Savanna Acacia 🏜️ (tree-type: acacia) |
Mangrove Swamp 🌿 (tree-type: mangrove) |
|---|---|
| Warm sunset amber leaves & Fox pet | Bayou olive foliage, swamp roots & Campfire |
Crimson Nether 🔥 (tree-type: crimson) |
Warped Nether 🌌 (tree-type: warped) |
|---|---|
| Nether crimson hyphae & floating red spores | Bioluminescent cyan canopy & cyan spores |
Starry Night 🌕✨ (weather: night) |
Rainy 🌧️ (weather: rain) |
|---|---|
| Starry night sky, alert Fox & Moon | Slanted rain streaks & splashes |
Snowy ❄️ (weather: snow) |
Cloudy ☁️ (weather: cloudy) |
|---|---|
| Fluttering snow & snow-capped leaves | Multi-layered drifting overcast clouds & Fox |
gh-tree turns your GitHub contributions into living Minecraft collectibles and milestones:
| Companion / Character | Side / Position | Dynamic Appearance & Behavior | Condition / Override |
|---|---|---|---|
|
Human Farmer 👨🌾 (Cares for Tree) |
Right Side (Default) |
• 😢 Sad: Tree is dry/dormant (0 commits) — slumped posture, drooping hat, tear droplet, withered twig. • 💧 Watering: Neutral / steady growth (1–29 commits) — Iron Water Bucket pouring streaming cyan water onto trunk roots with splashes. • 💃 Dancing: Flourishing tree (≥ 30 commits or ≥ 7d streak) — joyful hop, rosy cheeks, waving golden wheat, floating sparkles. |
Always enabled by default ( show-farmer: true/false, farmer-mood: auto/sad/watering/dancing) |
| Tamed Wolf 🐺 | Left Side | Sits loyally on the left grass lawn with a red collar and wagging tail. |
Current streak ≥ 14 days (or pet: wolf) |
| Sleeping / Alert Fox 🦊 | Left Side | Curls up sleeping during the day; wakes up and stays alert at night. |
Current streak ≥ 7 days (or pet: fox) |
| Tuxedo Cat 🐱 | Left Side | Sits peacefully under the tree canopy with glowing emerald eyes. |
Current streak ≥ 3 days or ≥ 25 commits (or pet: cat) |
| Red Macaw Parrot 🦜 | Left Side | Dances on the lawn with head-bobbing and fluttering tri-color wings. |
Jungle biome or pet: parrot
|
| Roasting Campfire 🔥 | Right Side | Crackling campfire with crossed logs, flickering flame tongues, and flying sparks. |
Sprint mode: ≥ 12 commits in recent 2w, streak ≥ 10d, or ≥ 60 commits (or show-campfire: true) |
| Milestone Chests 📦 | Right Side | Leveling chests: Wood (≥ 15) 🪵 |
Total commits in range (or show-chest: true) |
| Seasonal Events 🎃🎄🎆 | Scene | Halloween (Jack-o'-Lantern & Ghosts), Holiday (Fairy lights & gift boxes), New Year (Fireworks) | Auto-detected by month (Oct, Dec, Jan) or event: halloween | holiday | fireworks
|
Embedded in the underground dirt layer beneath your tree, 6 distinct ore blocks unlock as you hit maintainer, contributor, and productivity milestones:
| Ore Block | Appearance | Unlock Condition | What It Represents |
|---|---|---|---|
| Netherite / Ancient Debris 🪨 | (Slot 0: Far-Left) |
Action Creator Exclusive (@nivinvysakh or is-owner: true) |
👑 gh-tree Creator & Maintainer — Minecraft's rarest material, awarded exclusively to the author of the action! |
| Gold Ore 🪙 | (Slot 1: Mid-Left 1) |
• Current streak ≥ 7 days, OR • ≥ 50 total commits |
⚡ Streak Dedication — milestone for sustained rhythm and week-long consistency. |
| Diamond Ore 💎 | (Slot 2: Mid-Left 2) |
• ≥ 25 total commits in date range, OR • ≥ 1 merged PR |
💎 Active Contributor — milestone for regular code contributions and PR merges. |
| Emerald Ore ❇️ | (Slot 3: Mid-Right 1) |
• ≥ 100 total commits in date range, OR • Any weekly branch reaching Level 4 (30+ commits/week) |
🏆 Power Contributor — rare milestone awarded for high commit volume and intense development sprints. |
| Lapis Lazuli Ore 🔷 | (Slot 4: Mid-Right 2) |
Contributed to nivinvysakh/gh-tree (verified via GitHub API or is-contributor: true) |
🤝 gh-tree Contributor Badge — special celestial blue ore awarded exclusively to developers who have contributed code/PRs to the nivinvysakh/gh-tree repository! |
| Redstone Ore 🔴 | (Slot 5: Far-Right) |
• Merged PRs ≥ 2, OR • Total PR activity ≥ 3, OR • Current streak ≥ 14 days |
⚙️ Engineering & Automation — milestone honoring pull request lifecycle, code reviews, and multi-week streaks. |
- 14 Weekly Canopy Blocks: 14 distinct branches representing your recent contribution weeks.
- Commit Intensity: Leaf colors dynamically transition across 5 levels from Level 0 (dormant/dry) up to Level 4 (lush emerald or vibrant sakura pink) based on weekly commit volume.
- Flowers 🌸 (Open PRs): Up to 4 colorful Minecraft flowers (Poppies, Dandelions, Tulips, Sakura) planted across the grass lawn.
- Red Apples 🍎 (Merged PRs): Up to 4 ripe red apples hanging beneath the canopy leaf blocks.
- Golden Apples 🍏✨ (Assigned PRs / Reviews): Up to 4 enchanted golden apples placed on the lawn.
-
Wooden & Milestone Stat Signposts 🪧: Renders your active consecutive commit streak using a crisp pixel font and smart auto-scaling (
14d,100d,365d,1.2k). Features progressive milestone tiers:- 🪵 Classic Oak Signpost (
< 100days): Warm carved wooden board with high-contrast golden star. - 🪙 Golden Milestone Signpost (
$\ge 100$ days): Golden inlay frame, glowing warm gold ink, and a royal gold crown 👑 for the Century Club! - 💎 Diamond Milestone Signpost (
$\ge 365$ days): Prismatic diamond teal frame, glowing diamond-cyan ink, and an illuminated diamond crown 👑 for 1+ year streaks!
- 🪵 Classic Oak Signpost (
- Beehive 🍯 & Animated Bee 🐝: A wooden beehive appears on the trunk for active streaks (≥ 3 days) or ≥ 25 commits, while an animated Minecraft bee buzzes around the tree during fair weather.
Choose the integration method that fits your workflow:
Paste this single line directly into your GitHub Profile README.md (no workflows, YAML files, or tokens needed!):
[](https://github.com/nivinvysakh/gh-tree)Customize with URL parameters:
user: Your GitHub username (?user=nivinvysakh)theme:oak|sakura|spruce|birch|jungle|dark_oak|acacia|mangrove|crimson|warped(default:oak)weather:auto|sunny|rain|snow|night|cloudyfarmer:true|false|auto(default:auto- stands under tree caring for it)farmer_mood:auto|sad|dancing|watering(default:auto- dynamic tree health reaction)pet:auto|wolf|fox|cat|parrot|noneevent:auto|halloween|holiday|fireworks|nonecampfire:true|false|auto
👉 Customize live in the gh-tree Studio.
If you prefer self-hosting the animated GIF in your repository, add this workflow at .github/workflows/tree.yml:
name: Generate Commit Tree
on:
schedule:
- cron: '0 0 * * *' # Runs daily at midnight
workflow_dispatch:
permissions:
contents: write
jobs:
update-tree:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: nivinvysakh/gh-tree@main
with:
github-token: ${{ secrets.GITHUB_TOKEN }}Customize your tree with biomes, pet companions, campfire, milestone chests, seasonal events, and live weather:
name: Generate Commit Tree
on:
schedule:
- cron: '0 0 * * *' # Runs daily at midnight
workflow_dispatch:
permissions:
contents: write
jobs:
update-tree:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: nivinvysakh/gh-tree@main
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
# Tree biome variety (10 Minecraft biomes): oak | sakura | spruce | birch | jungle | dark_oak | acacia | mangrove | crimson | warped
tree-type: "sakura"
# Human farmer under the tree (right side): auto | true | false
show-farmer: "auto"
# Farmer mood: auto | sad | dancing | watering
farmer-mood: "auto"
# Animal companion pet (left side): auto | wolf | fox | cat | parrot | none
pet: "auto"
# Roasting campfire & milestone treasure chest: auto | true | false
show-campfire: "auto"
show-chest: "auto"
# Seasonal holiday event: auto | halloween | holiday | fireworks | none
event: "auto"
# Live weather from Open-Meteo for your city (auto-detects sun, night, rain, snow, clouds)
city: "Tokyo"
# Or manually force a weather condition: auto | sunny | night | rain | snow | cloudy
weather: "auto"
# Recency window in days for flowers (open PRs), red apples (merged PRs), and golden apples
pr-days: "14"
# Total days of history to fetch for commit canopy leaves (~14 weekly tiers)
days: "140"
# Whether to show the wooden streak signpost and animated bee
show-signpost: "true"
show-bee: "true"Note
If you want the tree to reflect contributions across private and external repositories, create a Personal Access Token (PAT) with read:user scope, save it in your repo secrets as TREE_PAT, and use ${{ secrets.TREE_PAT }}.
Add this anywhere in your README.md:
<!-- commit-tree-start -->

<!-- commit-tree-end -->The action will automatically generate tree.gif, update your README.md, and commit the changes!
| Input | Default | Description |
|---|---|---|
github-token |
(Required) | GitHub Token or PAT with read:user scope |
github-login |
repository_owner |
GitHub username (defaults to repo owner) |
tree-type |
oak |
Biome tree type (oak, sakura, spruce, birch, jungle, dark_oak, acacia, mangrove, crimson, warped) |
show-farmer |
auto |
Render human Minecraft farmer caring for tree on the right side (auto, true, false) |
farmer-mood |
auto |
Farmer mood override (auto, sad, dancing, watering). Auto dynamically responds to tree health: sad when dormant, dancing when flourishing, watering when growing |
pet |
auto |
Minecraft animal companion pet on left side (auto, wolf, fox, cat, parrot, none) |
show-campfire |
auto |
Render roasting campfire during active sprints (auto, true, false) |
show-chest |
auto |
Render milestone treasure chest (auto, true, false) |
event |
auto |
Seasonal holiday event (auto, halloween, holiday, fireworks, none) |
growth |
auto |
Tree growth & foliage expansion (auto, standard, expanded). In auto, tree grows taller (+1 log trunk) and expands with new canopy leaves (14 to 21 leaves) when full |
show-signpost |
true |
Render wooden streak stat signpost on the grass |
show-bee |
true |
Render animated Minecraft bee around the tree |
is-owner |
auto |
Unlocks creator-exclusive Netherite Ore (@nivinvysakh) |
is-contributor |
auto |
Unlocks Lapis Lazuli Ore (verified for nivinvysakh/gh-tree contributors) |
output-path |
tree.gif |
Filepath where the generated GIF is written |
markdown-path |
README.md |
Markdown file to update (set empty to disable) |
auto-commit |
true |
Automatically commits & pushes updated files |
commit-message |
chore: update commit tree [skip ci] |
Commit message for auto-commit |
days |
140 |
Days of history to fetch for commit leaves (~14–20 weekly branches) |
pr-days |
14 |
Recency timer in days for flowers, red apples, and golden apples |
city |
"" |
City for live weather (e.g. London, Tokyo, New York, Paris) |
weather |
auto |
Manual weather override (auto, sunny, night, rain, snow, cloudy) |
frames |
20 |
Number of animation frames in the loop |
frame-delay-ms |
100 |
Frame delay in milliseconds |
width |
920 |
Canvas width in pixels (full GitHub profile card fit) |
height |
500 |
Canvas height in pixels (ample sky headroom) |
| Output | Description |
|---|---|
gif-path |
Absolute path to the generated GIF |
total-commits |
Total commits counted in the date range |
current-streak |
Current consecutive active commit streak in days |
open-prs |
Total open pull requests authored by the user |
merged-prs |
Total merged pull requests |
assigned-prs |
Total open pull requests assigned to the user |
weather-type |
Detected or active weather type (sunny, night, rain, snow, cloudy) |
weather-desc |
Description of current weather |
tree-type |
Selected biome variety (oak, sakura, spruce, birch) |
gh-tree/
├── .github/
│ └── workflows/
│ ├── ci.yml # Continuous Integration (tests & typecheck)
│ ├── deploy-pages.yml # GitHub Pages automated deployment workflow
│ ├── generate-tree.yml # Daily profile commit tree generator action
│ ├── dependabot-pr.yml # Dependabot PR automation
│ ├── pr-auto-assign.yml # PR reviewer and assignee automation
│ └── wiki-sync.yml # Documentation auto-synchronizer with GitHub Wiki
├── assets/ # Static demo GIFs, ore SVGs, and visual artifacts
│ ├── ore-*.svg # Underground ore block vectors (Netherite, Lapis, Diamond...)
│ └── tree-*.gif # Biome, weather, and streak showcase GIFs
├── dist/ # Compiled GitHub Action bundle (ncc distribution)
├── site/ # gh-tree Studio Web Application (Vite + Tailwind CSS v4)
│ ├── index.html # Main Studio single-page application
│ ├── 404.html # Minecraft Void 404 error page
│ ├── favicon.svg # Emerald glowing palm tree favicon
│ ├── styles.css # Minecraft dark glassmorphism design system
│ ├── vite.config.ts # Multi-page Vite configuration
│ └── src/
│ ├── app.ts # Studio app controller, UI bindings & modal handlers
│ ├── preview.ts # Real-time frame looping engine with SVG animation
│ ├── gif-browser.ts # Client-side canvas rasterizer and GIF encoder (gifenc)
│ ├── github-api.ts # CORS contribution fetcher, streak calculator & PR stats
│ └── presets.ts # Curated themes & preset configurations
├── src/ # GitHub Action Core Source Code (TypeScript)
│ ├── main.ts # Action entrypoint, CLI input parser & auto-committer
│ ├── tree.ts # Minecraft tree geometry, canopy grid & prop layout builder
│ ├── svg.ts # Pixel art raster-to-SVG frame rendering engine
│ ├── gif.ts # Multi-frame GIF encoder (gifenc + Resvg WASM)
│ ├── github.ts # GraphQL/REST GitHub contribution calendar fetcher
│ ├── weather.ts # Live weather integration (Open-Meteo API)
│ └── markdown.ts # Profile README.md tag replacer & updater
├── test/ # Comprehensive Unit & Integration Test Suite (Vitest)
│ ├── tree.test.ts # Tree layout, biome, and collectibles tests
│ ├── svg.test.ts # SVG rendering, typography & milestone chest tests
│ ├── github.test.ts # Contribution calendar and streak calculation tests
│ ├── weather.test.ts # Weather parser & condition mapping tests
│ ├── markdown.test.ts # Markdown file replacement tests
│ ├── gif.test.ts # GIF binary encoding tests
│ └── e2e.test.ts # Full end-to-end rendering pipeline test
├── scripts/ # Developer utility scripts
│ └── generate-mock.ts # Offline local mock GIF generator for all biomes
├── wiki/ # Documentation knowledge base synced to GitHub Wiki
├── action.yml # GitHub Action definition & input/output schema
├── package.json # Project dependencies and npm scripts
├── tsconfig.json # TypeScript compiler configuration
└── README.md # Repository documentation & visual showcase
Generate local sample GIFs for all biomes and weather conditions without needing a token:
npm run generate:mockRun test suite:
npm testBuild action bundle:
npm run buildRun web studio locally:
npm run site:devBig thanks to all of the amazing people who have helped by contributing to this project!
Interested in contributing? Check out our Contributing Guide and Code of Conduct to get started and unlock your Lapis Lazuli Ore! 🔷