Automatically generate visualizations of your programming language usage across all your GitHub repositories.
Why This Action?
Building on other tools, this runs "locally" as an action, allowing quicker refreshes, and works far better for those who enjoy a wide range of languages
- Analyzes ALL your languages, not just the top 6
- Works with both public and private repositories
- Highly configurable to match your needs
- Generates multiple visualization types with modern design
Setup
1. Create a Personal Access Token
The action requires a Personal Access Token (PAT) to access your repositories.
- Go to https://github.com/settings/tokens
- Click "Generate new token (classic)"
- Name:
Language Stats - Select scope:
repo(Full control of private repositories) - Click "Generate token" and copy it
2. Add Token as Secret
- Go to your repository Settings
- Secrets and variables → Actions
- Click "New repository secret"
- Name:
STATS_TOKEN - Value: Paste your PAT
- Click "Add secret"
3. Create Workflow
Create .github/workflows/stats.yml:
name: Update Language Statistics on: schedule: - cron: "0 0 * * *" workflow_dispatch: permissions: contents: write jobs: update-stats: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: stefvuck/github-profile-language-analytics@v1.1.0 with: github_token: ${{ secrets.STATS_TOKEN }} visualization_types: "leaderboard" output_path: "stats"
4. Add to README

Examples
Leaderboard with Breakdown
Shows top languages with contribution breakdown from your top repositories.
Bar Charts
Pie Charts
Donut Charts
With vs Without Language Filtering
Excluding HTML/CSS (Filtered by Lines):

Including All Languages (by Lines):

Configuration
| Input | Description | Default |
|---|---|---|
github_token |
Personal Access Token with repo scope |
Required |
visualization_types |
Types to generate | leaderboard bar pie |
output_path |
Output directory | github-stats |
exclude_repos |
Comma-separated repos to skip | '' |
include_forks |
Include forked repos | false |
exclude_languages |
Comma-separated languages to skip | HTML,CSS |
top_repos_count |
Repos shown in leaderboard | 5 |
commit_message |
Git commit message | Update language statistics |
dark_mode |
Enable dark mode theme | false |
Visualization Types
leaderboard- Horizontal bars with badges and top contributing reposbar- Vertical bars (top 12 languages)horizontal-bar- Horizontal bars (top 15 languages)pie- Pie chart (top 8 + "Other")donut- Donut chart (top 8 + "Other")
Output Files
Each type generates 3 files:
*_by_repos.png- Sorted by repository count*_by_lines.png- Sorted by lines of code*_by_weighted.png- Balanced ranking
Advanced Configuration
- uses: stefvuck/github-profile-language-analytics@v1 with: github_token: ${{ secrets.STATS_TOKEN }} visualization_types: "leaderboard bar pie donut" output_path: "language-stats" exclude_repos: "test-repo,old-project" include_forks: "true" exclude_languages: "HTML,CSS,Markdown" top_repos_count: "10" dark_mode: "true"
Troubleshooting
403 Forbidden Error
If you see Resource not accessible by integration, your token doesn't have the required permissions.
Solution: Create a Personal Access Token with repo scope (see Setup above).
Images Not Committing
Ensure your workflow has contents: write permission and the output directory is not in .gitignore.
Local Development
pip install -r requirements.txt
cp config.example.json config.json
# Edit config.json with your token
python main.py --types leaderboard bar pie --dark-modeLicense
MIT






