A public dashboard that tracks NuGet packages and GitHub repos — collecting download counts, versions, stars, issues, PRs, and more.
🌐 Live dashboard: https://elbruno.github.io/nuget-repo-dashboard/
The dashboard uses a two-pipeline architecture:
Automatically discovers NuGet packages and their associated GitHub repositories:
- Query NuGet Search API — search for packages by owner (
owner:elbruno) - Build package list — deduplicate and filter discovered packages
- Extract GitHub repos — parse
projectUrlfrom package metadata to build deduplicated repo list
Collects metrics from NuGet and GitHub APIs using the discovered lists:
- Collect NuGet metrics — fetch download counts, versions, and metadata →
data.nuget.json - Collect GitHub metrics — fetch stars, forks, issues, PRs →
data.repositories.json
config/dashboard-config.json ← NuGet profile + ignore list
config/tracked-packages.json ← optional manual package mappings
↓
src/Collector/ ← .NET 10 console app (two-pipeline architecture)
↓
data/latest/ ← latest snapshots
├── data.nuget.json ← NuGet package metrics
└── data.repositories.json ← GitHub repository metrics
↓
data/history/YYYY/MM/DD/ ← daily history
dotnet build src/Collector/Collector.csprojdotnet run --project src/Collector/Collector.csproj| Variable | Required | Description |
|---|---|---|
NUGET_PROFILE |
No | Override the NuGet profile username from dashboard-config.json |
GITHUB_TOKEN |
No | GitHub personal access token for higher rate limits |
DASHBOARD_REPO_ROOT |
No | Override the repo root path (useful in CI) |
The GITHUB_TOKEN can be provided via .NET User Secrets (recommended for local development) or environment variables.
cd src/Collector
dotnet user-secrets set "GITHUB_TOKEN" "ghp_your_token_here"User Secrets are stored outside the repo in your OS user profile, so they are never committed to source control.
# Linux / macOS
export GITHUB_TOKEN="ghp_your_token_here"
# Windows PowerShell
$env:GITHUB_TOKEN = "ghp_your_token_here"Note: If both User Secrets and an environment variable are set, the environment variable takes precedence.
The NuGet profile defaults to "elbruno" in config/dashboard-config.json. You can override it via .NET User Secrets or an environment variable without editing the config file.
Precedence: Environment Variable > User Secrets > config file default.
cd src/Collector
dotnet user-secrets set "NUGET_PROFILE" "someuser"# Linux / macOS
export NUGET_PROFILE="someuser"
# Windows PowerShell
$env:NUGET_PROFILE = "someuser"The Collector will show which source is active at startup:
[1/3] Loading config...
Profile: someuser (source: environment variable)
⚠️ Single Profile Design: This dashboard is designed and optimized for tracking a single NuGet user profile. In the future we may rebuild to support multiple profiles, but currently it targets one NuGet user at a time.
Primary configuration for auto-discovery:
{
"nugetProfile": "elbruno",
"mergeWithTrackedPackages": true,
"ignorePackages": [
"LocalEmbeddings",
"Microsoft.Extensions.AI"
]
}Fields:
nugetProfile— NuGet username for auto-discovery (queriesowner:{username})mergeWithTrackedPackages— merge manual package mappings fromtracked-packages.jsonignorePackages— exclude specific packages from collection (case-insensitive)
Optional manual package-to-repo mappings (merged with discovered packages):
[
{ "packageId": "Microsoft.Extensions.AI", "repos": ["dotnet/extensions"] }
]The collector writes two JSON files:
NuGet package metrics with download counts, versions, and metadata.
GitHub repository metrics with stars, forks, issues, PRs, and additional metadata.
Both files are written to:
data/latest/— latest metrics snapshotdata/history/{YYYY}/{MM}/{DD}/— daily historical snapshots
The dashboard is automatically deployed to GitHub Pages after each metrics refresh. The Refresh Metrics workflow collects data and then deploys site/index.html with the latest JSON data.
High/critical Dependabot security PRs are automatically escalated via Dependabot Security Alert:
- Adds labels:
dependabot,dependabot:security,security, andseverity:* - Posts/updates a sticky triage comment on the PR
- Requests CODEOWNERS review (or repository owner fallback when CODEOWNERS is missing)
Only high/critical security updates trigger the special alert flow; lower-severity updates keep normal PR handling.
- Go to Settings → Pages in your repository
- Under Build and deployment, set Source to GitHub Actions
- The next workflow run will deploy the dashboard automatically
Once enabled, the dashboard is available at:
https://{owner}.github.io/{repo}/
For this repo: https://elbruno.github.io/nuget-repo-dashboard/
The dashboard exposes metrics data via REST API endpoints for programmatic access. This enables external tools, dashboards, and integrations to consume package and repository metrics.
- GET /api/packages/index.json — All NuGet packages with metrics
- GET /api/repositories/index.json — All GitHub repositories with metrics
- GET /api/trends/index.json — Historical trend data (90-day window)
- GET /api/metadata.json — Metadata and generation timestamps
// Fetch all packages
const response = await fetch('https://elbruno.github.io/nuget-repo-dashboard/api/packages/index.json');
const data = await response.json();
console.log(data.packages);For detailed API documentation, parameters, response formats, and examples, see:
The deployed site contains:
index.html— dashboard UI (fromsite/index.html)api/packages/index.json— NuGet package metrics (API endpoint)api/repositories/index.json— GitHub repository metrics (API endpoint)api/trends/index.json— Historical trends (API endpoint)data/data.nuget.json— NuGet package metrics (legacy)data/data.repositories.json— GitHub repository metrics (legacy)
A .NET CLI tool that generates Oh My Posh terminal themes for every repository tracked by this dashboard — with deterministic accent colors and purpose-based icons. Your terminal prompt switches theme automatically as you cd between repos.
# 1. Generate Oh My Posh profiles for all tracked repos
dotnet run --project src/RepoIdentity --framework net8.0 -- generate
# 2. Install profiles + wire up your PowerShell $PROFILE
dotnet run --project src/RepoIdentity --framework net8.0 -- installOpen a new PowerShell window and cd into any tracked repo — the theme activates automatically.
Run
install --dry-runfirst to preview every change before it's applied.
📖 Full documentation:
- Terminal themes reference — profile structure, icon table, troubleshooting
- Cross-device install guide — prerequisites, what changes on your machine, multi-device setup
# Preview profiles without writing any files
dotnet run --project src/RepoIdentity --framework net8.0 -- preview
# Generate Oh My Posh profiles into terminal/ohmyposh/
dotnet run --project src/RepoIdentity --framework net8.0 -- generate
# Install profiles and patch $PROFILE (dry-run to preview first)
dotnet run --project src/RepoIdentity --framework net8.0 -- install --dry-run
dotnet run --project src/RepoIdentity --framework net8.0 -- installEach tracked repo gets a file in terminal/ohmyposh/:
{owner}-{repo}.json— Oh My Posh theme with deterministic accent color and purpose icondefault.json— neutral fallback theme used outside tracked reposindex.json— manifest used by the auto-detection script at runtimeSet-RepoTheme.ps1— auto-detection script (sourced from$PROFILE)
Place a repo.identity.json in any tracked repo to customize its profile:
{
"name": "My Library",
"type": "library",
"accentColor": "#0078D4",
"icon": "🧠"
}