Display your GitHub contribution graph on your Windows desktop using Rainmeter.
- Rainmeter 4.x or higher
- Windows 10 / 11
- GitHub Personal Access Token
1. Copy the skin folder
Documents\Rainmeter\Skins\grassmeter\
2. Edit Settings.inc
GitHubUsername=your_github_username
GitHubToken=ghp_xxxxxxxxxxxxxxxxxxxx3. Run run.bat (double-click)
Wait ~10 seconds for data to load. The widget will appear automatically.
4. Load GrassView.ini in Rainmeter Manager
Right-click tray icon β Manage β Load GrassView.ini
- Go to GitHub β Settings β Developer settings
- Personal access tokens β Tokens (classic)
- Generate new token β check
read:userβ Generate - Copy the token into
Settings.inc
Open Settings.inc to customize. After editing, click the R button on the widget to apply.
| Setting | Default | Description |
|---|---|---|
GitHubUsername |
β | Your GitHub username |
GitHubToken |
β | GitHub Personal Access Token |
ColorTheme |
Green |
Color theme (see below) |
CellSize |
11 |
Cell size in pixels |
CellGap |
2 |
Gap between cells |
Padding |
14 |
Widget outer padding |
WeeksToShow |
52 |
Weeks to display (52 = 1 year) |
| Setting | Default | Description |
|---|---|---|
Repo1 |
β | Repository to track (owner/repo) |
Repo2 |
β | Repository to track (optional) |
Repo3 |
β | Repository to track (optional) |
AutoRefreshMin |
5 |
Auto-refresh interval in minutes (0 = disabled) |
| Theme | Description |
|---|---|
Green |
GitHub default green |
Purple |
Purple tones |
Blue |
Blue tones |
Red |
Red tones |
Orange |
Orange tones |
Pink |
Pink tones |
Mono |
Grayscale |
Mint |
Teal/mint tones |
Yellow |
Neon yellow tones |
Cyan |
Neon cyan/electric blue tones |
Light |
Light background (GitHub light mode style) |
Click the period buttons on the widget to change the displayed time range:
| Button | Period |
|---|---|
1W |
Last 1 week |
1M |
Last 4 weeks |
3M |
Last 13 weeks |
6M |
Last 26 weeks |
1Y |
Last 52 weeks (default) |
The widget updates automatically β no manual refresh needed.
Click R (top-right of widget) to fetch fresh data and apply any Settings.inc changes.
Widget not showing / blank cells
- Make sure
run.bathas been executed at least once - Check
debug.login the skin folder
debug.log says API failed
- Verify your
GitHubUsernameandGitHubToken - Token needs
read:userpermission
PowerShell execution error Open PowerShell as administrator and run:
Set-ExecutionPolicy -Scope CurrentUser RemoteSignedgrassmeter\
βββ Settings.inc β All configuration (GrassView + CommitView)
βββ Settings.inc.example β Template β copy and fill in credentials
β
βββ GrassView\
β βββ FetchAndBuild.ps1 β Fetches GitHub API + generates GrassView.ini
β βββ launcher.vbs β Silent background launcher
β βββ run.bat β Manual run to generate widget
β βββ SetPeriod.bat β Period switch (called with weeks as argument)
β βββ SetPeriod_1W.bat β Shortcut: 1-week view
β βββ SetPeriod_1M.bat β Shortcut: 4-week view
β βββ SetPeriod_3M.bat β Shortcut: 13-week view
β βββ SetPeriod_6M.bat β Shortcut: 26-week view
β βββ SetPeriod_1Y.bat β Shortcut: 52-week view (default)
β βββ GrassView.ini β Auto-generated (do not edit)
β βββ debug.log β Auto-generated (GrassView errors)
β
βββ CommitView\
βββ FetchCommits.ps1 β Fetches GitHub API + generates CommitView.ini
βββ launcher_commits.vbs β Silent background launcher
βββ run_commits.bat β Manual run to generate widget
βββ CommitView.ini β Auto-generated (do not edit)
βββ debug_commits.log β Auto-generated (CommitView errors)
- Core architecture: PowerShell fetches GitHub API and generates
GrassView.iniwith Shape Meters - UTF-8 BOM encoding for all INI files
- Shape Meter color rendering (fill color bug fixed)
- Full rewrite of
FetchAndBuild.ps1(stable, no pipeline pollution) - 52-week (1 year) contribution graph display
- Weekday labels (Sun ~ Sat)
- Month labels (Jan ~ Dec)
- 7 color themes (Green / Purple / Blue / Red / Orange / Pink / Mono)
- Opacity setting (background transparency)
- Configurable cell size, gap, padding, weeks
- R refresh button on widget
- Period selector buttons (1W / 1M / 3M / 6M / 1Y) β click to switch time range instantly
- Silent background execution via
wscript.exe+launcher.vbs(no console window flash) - Auto-refresh after script completes (
Rainmeter.exe !Refresh) - L0 cell contrast improvement (empty cells more visible against background)
- CommitView widget β show latest commits (up to 10) from up to 3 repositories
- CommitView auto-refresh β configurable interval via
AutoRefreshMininSettings.inc - Dual widget support β GrassView and CommitView load as separate Rainmeter configs simultaneously
- Light / Mint themes β full color palette + accent line sync across all skins
- CommitView / IssueView: section divider line aligned to content β separator line starts at the main content column (X=MsgColX / X=TitleColX), not at the widget left edge
- CommitView: repo name ellipsis β long repo names truncate with
...so they don't overflow into the divider line - GrassView: responsive bottom UI β total text hidden when widget is too narrow (1W/1M/3M), period buttons always visible at any size; streak and legend texts clipped instead of overflowing
- GrassView: auto-detect username β if
GitHubUsernameis blank in Settings.inc, automatically fetches login from GitHub API and saves it back
- Opacity slider UI on widget
- GitHub OAuth Device Flow (no manual token setup)
- Auto-refresh on system startup
-
.rmskinpackage for one-click install - API error display directly on widget
- Private repo contribution toggle
All skins (GrassView, CommitView, IssueView) must share the same visual rules:
- Divider line alignment β Section separator lines must start at the X position of the main content column, not at
$Padding.- CommitView:
X=$MsgColX(=$Padding + $AuthorColW + 8= 112) - IssueView:
X=$TitleColX(=$Padding + $TypeColW + $NumColW + 4= 88) - The line length is always
$lineEndX - <ContentColX>so the right edge stays flush with the widget border.
- CommitView:
- Color variables β All theme colors (
$cBG,$cStroke,$cAccent,$cTextName, etc.) must be kept in sync across allFetch*.ps1scripts whenever a new theme is added. - Widget width β All skins use
$WW = 500and$Padding = 14as the canonical values.
Buttons in the widget call wscript.exe launcher.vbs [weeks] directly from LeftMouseUpAction.
This avoids the Rainmeter RunCommand plugin (which has issues with space-containing paths and arguments).
FetchAndBuild.ps1 triggers Rainmeter.exe !Refresh at the end so the widget reloads automatically.
Contributions are welcome!
Check open issues labeled good first issue to get started.
See CONTRIBUTING.md for guidelines.
MIT License
