Repository files navigation

github-statcrab

github-statcrab is a Rust-based web server that generates dynamic SVG cards displaying GitHub user statistics and programming language usage. It leverages the GitHub API to fetch user data and presents it in a visually appealing format to be embedded in README files or web pages.

Simple to install & use, easy to customize with various themes and layouts!

Table of contents

GitHub Top Languages card

Displays the top programming languages used by a GitHub user in a visually appealing card format. You can insert it into your GitHub README with a simple markdown snippet.

Just replace <your-hosted-instance> with the URL of your hosted instance of the github-statcrab server and samgozman with your GitHub username.

Horizontal layout

[![GitHub Top Languages](https://<your-hosted-instance>/api/langs-card?username=samgozman&layout=horizontal&max_languages=8&theme=dracula&size_weight=0.5&count_weight=0.5)](https://github.com/samgozman/github-statcrab)

GitHub Top Languages for samgozman

Vertical layout

[![GitHub Top Languages](https://<your-hosted-instance>/api/langs-card?username=samgozman&layout=vertical&max_languages=8&theme=dracula&size_weight=0.5&count_weight=0.5)](https://github.com/samgozman/github-statcrab)

GitHub Top Languages for samgozman

Options for /api/langs-card

ParameterDescriptionTypeRequiredDefaultExample
usernameGitHub usernamestringβœ…-samgozman
layoutCard layout orientationstring❌verticalhorizontal, vertical
max_languagesMaximum number of languages to displaynumber❌85
size_weightWeight factor for repository size in rankingnumber❌0.50.3
count_weightWeight factor for file count in rankingnumber❌0.50.7
exclude_repoComma-separated list of repositories to excludestring❌-repo1,repo2,private-repo
themeVisual theme for the cardstring❌lightdark, dracula, transparent-blue, monokai
offset_xHorizontal offset for card positioningnumber❌1220
offset_yVertical offset for card positioningnumber❌1215
hide_titleHide the card titleboolean❌falsetrue
hide_backgroundHide the card backgroundboolean❌falsetrue
hide_background_strokeHide the card background borderboolean❌falsetrue

GitHub user stats card

Can be used to show GitHub user statistics such as total stars, forks, commits, pull requests, issues, and more. You can insert it into your GitHub README with a simple markdown snippet:

[![GitHub Stats for samgozman](https://<your-hosted-instance>/api/stats-card?username=samgozman&theme=monokai)](https://github.com/samgozman/github-statcrab)

You should replace <your-hosted-instance> with the URL of your hosted instance of the github-statcrab server and samgozman with your GitHub username.

GitHub Stats for samgozman

Options for /api/stats-card

ParameterDescriptionTypeRequiredDefaultExample
usernameGitHub usernamestringβœ…-samgozman
hideComma-separated list of stats to hidestring❌-stars_count,commits_ytd_count
themeVisual theme for the cardstring❌lightdark, dracula, monokai, transparent-blue
offset_xHorizontal offset for card positioningnumber❌1220
offset_yVertical offset for card positioningnumber❌1215
hide_titleHide the card titleboolean❌falsetrue
hide_backgroundHide the card backgroundboolean❌falsetrue
hide_background_strokeHide the card background borderboolean❌falsetrue

Available Statistics to Hide

The hide parameter accepts a comma-separated list of the following values:

  • stars_count - Total stars received across all repositories
  • commits_ytd_count - Total commits made this year
  • issues_count - Total issues opened
  • pull_requests_count - Total pull requests created
  • merge_requests_count - Total merge requests created
  • reviews_count - Total pull request reviews performed
  • started_discussions_count - Total discussions started
  • answered_discussions_count - Total discussions answered

Note: At least 2 statistics must remain visible on the card.

Themes

The github-statcrab server supports multiple visual themes for the generated SVG cards. You can customize the appearance of the cards by using the theme parameter in the API requests.

All available themes and their previews can be found in the themes readme file.

Adding new themes

Adding new themes to the github-statcrab is pretty easy. You don't even need to know Rust! You can just open a PR with a new CSS file in the assets/css/themes/ directory. Make sure to follow the existing theme structure and naming conventions. It's the easiest way to contribute!

Github Actions will automatically do the rest for you, including building the themes readme file page with previews of all themes (yes, it's automated!).

Deployment Guide

This guide will help you set up and run the github-statcrab server.

First steps

Get a GitHub Personal Access Token:

You will need this token to authenticate with the GitHub API.

Deploy with Railway

You can easily deploy the github-statcrab server using template for Railway. Just click the button below to get started:

Deploy on Railway

Developers guide

First of all you need to set up your environment variables. You can do this by creating a .env file in the root directory of the project. You can use the provided .env.example file as a template.

  1. Copy the example environment file:

    cp .env.example .env
  2. Edit .env and set your GitHub token:

    GITHUB_TOKEN=your_github_personal_access_token_here
  3. (optional) add a test GitHub username for local e2e testing:

    TEST_GITHUB_USERNAME=your_github_username
  4. (optional) Set up Sentry for error tracking: You can also set optional Sentry configuration for error tracking.

    SENTRY_DSN=your_sentry_dsn_hereSENTRY_ENVIRONMENT=development
  5. (optional) Configure cache sizes: You can adjust the cache sizes for user stats and language stats in the .env file.

    # Maximum memory capacity for GitHub API response cache in MiB (default: 32)CACHE_MAX_CAPACITY_MB=32# TTL for user stats cache in seconds (default: 900 = 15 minutes)CACHE_USER_STATS_TTL_SECONDS=900# TTL for user languages cache in seconds (default: 3600 = 1 hour) CACHE_USER_LANGUAGES_TTL_SECONDS=3600
  6. (optional) Restrict API access to specific users: You can limit which GitHub usernames are allowed to use the API by setting an allowlist in the .env file.

    # Comma-separated list of GitHub usernames allowed to use the API# Leave empty or unset to allow all users (default: empty)ALLOWED_USERNAMES=user1,user2,user3

Running From Docker Latest Image

You can run the server using Docker. Make sure to replace your_github_personal_access_token_here with your actual GitHub Personal Access Token.

docker pull ghcr.io/samgozman/github-statcrab/server:latest docker run -p 3000:3000 --env-file .env ghcr.io/samgozman/github-statcrab/server:latest

Build & Run Server Locally

To run the server locally, ensure you have Rust and Cargo installed. You can install them from rustup.rs.

The server automatically loads environment variables from the .env file:

make run

The server will start on http://0.0.0.0:3000 and will automatically read your GitHub token from the .env file.

Testing

Run the tests with:

make test

FAQ

Why Rust???image

Special Thanks

Special thanks to @anuraghazra and his amazing github-readme-stats for the inspiration!

About

πŸ¦€ GitHub profile stats for readme generated on the fly

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

github-statcrab

github-statcrab is a Rust-based web server that generates dynamic SVG cards displaying GitHub user statistics and programming language usage. It leverages the GitHub API to fetch user data and presents it in a visually appealing format to be embedded in README files or web pages.

Simple to install & use, easy to customize with various themes and layouts!

Table of contents

GitHub Top Languages card

Displays the top programming languages used by a GitHub user in a visually appealing card format. You can insert it into your GitHub README with a simple markdown snippet.

Just replace <your-hosted-instance> with the URL of your hosted instance of the github-statcrab server and samgozman with your GitHub username.

Horizontal layout

[![GitHub Top Languages](https://<your-hosted-instance>/api/langs-card?username=samgozman&layout=horizontal&max_languages=8&theme=dracula&size_weight=0.5&count_weight=0.5)](https://github.com/samgozman/github-statcrab)

GitHub Top Languages for samgozman

Vertical layout

[![GitHub Top Languages](https://<your-hosted-instance>/api/langs-card?username=samgozman&layout=vertical&max_languages=8&theme=dracula&size_weight=0.5&count_weight=0.5)](https://github.com/samgozman/github-statcrab)

GitHub Top Languages for samgozman

Options for /api/langs-card

ParameterDescriptionTypeRequiredDefaultExample
usernameGitHub usernamestringβœ…-samgozman
layoutCard layout orientationstring❌verticalhorizontal, vertical
max_languagesMaximum number of languages to displaynumber❌85
size_weightWeight factor for repository size in rankingnumber❌0.50.3
count_weightWeight factor for file count in rankingnumber❌0.50.7
exclude_repoComma-separated list of repositories to excludestring❌-repo1,repo2,private-repo
themeVisual theme for the cardstring❌lightdark, dracula, transparent-blue, monokai
offset_xHorizontal offset for card positioningnumber❌1220
offset_yVertical offset for card positioningnumber❌1215
hide_titleHide the card titleboolean❌falsetrue
hide_backgroundHide the card backgroundboolean❌falsetrue
hide_background_strokeHide the card background borderboolean❌falsetrue

GitHub user stats card

Can be used to show GitHub user statistics such as total stars, forks, commits, pull requests, issues, and more. You can insert it into your GitHub README with a simple markdown snippet:

[![GitHub Stats for samgozman](https://<your-hosted-instance>/api/stats-card?username=samgozman&theme=monokai)](https://github.com/samgozman/github-statcrab)

You should replace <your-hosted-instance> with the URL of your hosted instance of the github-statcrab server and samgozman with your GitHub username.

GitHub Stats for samgozman

Options for /api/stats-card

ParameterDescriptionTypeRequiredDefaultExample
usernameGitHub usernamestringβœ…-samgozman
hideComma-separated list of stats to hidestring❌-stars_count,commits_ytd_count
themeVisual theme for the cardstring❌lightdark, dracula, monokai, transparent-blue
offset_xHorizontal offset for card positioningnumber❌1220
offset_yVertical offset for card positioningnumber❌1215
hide_titleHide the card titleboolean❌falsetrue
hide_backgroundHide the card backgroundboolean❌falsetrue
hide_background_strokeHide the card background borderboolean❌falsetrue

Available Statistics to Hide

The hide parameter accepts a comma-separated list of the following values:

  • stars_count - Total stars received across all repositories
  • commits_ytd_count - Total commits made this year
  • issues_count - Total issues opened
  • pull_requests_count - Total pull requests created
  • merge_requests_count - Total merge requests created
  • reviews_count - Total pull request reviews performed
  • started_discussions_count - Total discussions started
  • answered_discussions_count - Total discussions answered

Note: At least 2 statistics must remain visible on the card.

Themes

The github-statcrab server supports multiple visual themes for the generated SVG cards. You can customize the appearance of the cards by using the theme parameter in the API requests.

All available themes and their previews can be found in the themes readme file.

Adding new themes

Adding new themes to the github-statcrab is pretty easy. You don't even need to know Rust! You can just open a PR with a new CSS file in the assets/css/themes/ directory. Make sure to follow the existing theme structure and naming conventions. It's the easiest way to contribute!

Github Actions will automatically do the rest for you, including building the themes readme file page with previews of all themes (yes, it's automated!).

Deployment Guide

This guide will help you set up and run the github-statcrab server.

First steps

Get a GitHub Personal Access Token:

You will need this token to authenticate with the GitHub API.

Deploy with Railway

You can easily deploy the github-statcrab server using template for Railway. Just click the button below to get started:

Deploy on Railway

Developers guide

First of all you need to set up your environment variables. You can do this by creating a .env file in the root directory of the project. You can use the provided .env.example file as a template.

  1. Copy the example environment file:

    cp .env.example .env
  2. Edit .env and set your GitHub token:

    GITHUB_TOKEN=your_github_personal_access_token_here
  3. (optional) add a test GitHub username for local e2e testing:

    TEST_GITHUB_USERNAME=your_github_username
  4. (optional) Set up Sentry for error tracking: You can also set optional Sentry configuration for error tracking.

    SENTRY_DSN=your_sentry_dsn_hereSENTRY_ENVIRONMENT=development
  5. (optional) Configure cache sizes: You can adjust the cache sizes for user stats and language stats in the .env file.

    # Maximum memory capacity for GitHub API response cache in MiB (default: 32)CACHE_MAX_CAPACITY_MB=32# TTL for user stats cache in seconds (default: 900 = 15 minutes)CACHE_USER_STATS_TTL_SECONDS=900# TTL for user languages cache in seconds (default: 3600 = 1 hour) CACHE_USER_LANGUAGES_TTL_SECONDS=3600
  6. (optional) Restrict API access to specific users: You can limit which GitHub usernames are allowed to use the API by setting an allowlist in the .env file.

    # Comma-separated list of GitHub usernames allowed to use the API# Leave empty or unset to allow all users (default: empty)ALLOWED_USERNAMES=user1,user2,user3

Running From Docker Latest Image

You can run the server using Docker. Make sure to replace your_github_personal_access_token_here with your actual GitHub Personal Access Token.

docker pull ghcr.io/samgozman/github-statcrab/server:latest docker run -p 3000:3000 --env-file .env ghcr.io/samgozman/github-statcrab/server:latest

Build & Run Server Locally

To run the server locally, ensure you have Rust and Cargo installed. You can install them from rustup.rs.

The server automatically loads environment variables from the .env file:

make run

The server will start on http://0.0.0.0:3000 and will automatically read your GitHub token from the .env file.

Testing

Run the tests with:

make test

FAQ

Why Rust???image

Special Thanks

Special thanks to @anuraghazra and his amazing github-readme-stats for the inspiration!

About

πŸ¦€ GitHub profile stats for readme generated on the fly

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

github-statcrab

github-statcrab is a Rust-based web server that generates dynamic SVG cards displaying GitHub user statistics and programming language usage. It leverages the GitHub API to fetch user data and presents it in a visually appealing format to be embedded in README files or web pages.

Simple to install & use, easy to customize with various themes and layouts!

Table of contents

GitHub Top Languages card

Displays the top programming languages used by a GitHub user in a visually appealing card format. You can insert it into your GitHub README with a simple markdown snippet.

Just replace <your-hosted-instance> with the URL of your hosted instance of the github-statcrab server and samgozman with your GitHub username.

Horizontal layout

[![GitHub Top Languages](https://<your-hosted-instance>/api/langs-card?username=samgozman&layout=horizontal&max_languages=8&theme=dracula&size_weight=0.5&count_weight=0.5)](https://github.com/samgozman/github-statcrab)

GitHub Top Languages for samgozman

Vertical layout

[![GitHub Top Languages](https://<your-hosted-instance>/api/langs-card?username=samgozman&layout=vertical&max_languages=8&theme=dracula&size_weight=0.5&count_weight=0.5)](https://github.com/samgozman/github-statcrab)

GitHub Top Languages for samgozman

Options for /api/langs-card

ParameterDescriptionTypeRequiredDefaultExample
usernameGitHub usernamestringβœ…-samgozman
layoutCard layout orientationstring❌verticalhorizontal, vertical
max_languagesMaximum number of languages to displaynumber❌85
size_weightWeight factor for repository size in rankingnumber❌0.50.3
count_weightWeight factor for file count in rankingnumber❌0.50.7
exclude_repoComma-separated list of repositories to excludestring❌-repo1,repo2,private-repo
themeVisual theme for the cardstring❌lightdark, dracula, transparent-blue, monokai
offset_xHorizontal offset for card positioningnumber❌1220
offset_yVertical offset for card positioningnumber❌1215
hide_titleHide the card titleboolean❌falsetrue
hide_backgroundHide the card backgroundboolean❌falsetrue
hide_background_strokeHide the card background borderboolean❌falsetrue

GitHub user stats card

Can be used to show GitHub user statistics such as total stars, forks, commits, pull requests, issues, and more. You can insert it into your GitHub README with a simple markdown snippet:

[![GitHub Stats for samgozman](https://<your-hosted-instance>/api/stats-card?username=samgozman&theme=monokai)](https://github.com/samgozman/github-statcrab)

You should replace <your-hosted-instance> with the URL of your hosted instance of the github-statcrab server and samgozman with your GitHub username.

GitHub Stats for samgozman

Options for /api/stats-card

ParameterDescriptionTypeRequiredDefaultExample
usernameGitHub usernamestringβœ…-samgozman
hideComma-separated list of stats to hidestring❌-stars_count,commits_ytd_count
themeVisual theme for the cardstring❌lightdark, dracula, monokai, transparent-blue
offset_xHorizontal offset for card positioningnumber❌1220
offset_yVertical offset for card positioningnumber❌1215
hide_titleHide the card titleboolean❌falsetrue
hide_backgroundHide the card backgroundboolean❌falsetrue
hide_background_strokeHide the card background borderboolean❌falsetrue

Available Statistics to Hide

The hide parameter accepts a comma-separated list of the following values:

  • stars_count - Total stars received across all repositories
  • commits_ytd_count - Total commits made this year
  • issues_count - Total issues opened
  • pull_requests_count - Total pull requests created
  • merge_requests_count - Total merge requests created
  • reviews_count - Total pull request reviews performed
  • started_discussions_count - Total discussions started
  • answered_discussions_count - Total discussions answered

Note: At least 2 statistics must remain visible on the card.

Themes

The github-statcrab server supports multiple visual themes for the generated SVG cards. You can customize the appearance of the cards by using the theme parameter in the API requests.

All available themes and their previews can be found in the themes readme file.

Adding new themes

Adding new themes to the github-statcrab is pretty easy. You don't even need to know Rust! You can just open a PR with a new CSS file in the assets/css/themes/ directory. Make sure to follow the existing theme structure and naming conventions. It's the easiest way to contribute!

Github Actions will automatically do the rest for you, including building the themes readme file page with previews of all themes (yes, it's automated!).

Deployment Guide

This guide will help you set up and run the github-statcrab server.

First steps

Get a GitHub Personal Access Token:

You will need this token to authenticate with the GitHub API.

Deploy with Railway

You can easily deploy the github-statcrab server using template for Railway. Just click the button below to get started:

Deploy on Railway

Developers guide

First of all you need to set up your environment variables. You can do this by creating a .env file in the root directory of the project. You can use the provided .env.example file as a template.

  1. Copy the example environment file:

    cp .env.example .env
  2. Edit .env and set your GitHub token:

    GITHUB_TOKEN=your_github_personal_access_token_here
  3. (optional) add a test GitHub username for local e2e testing:

    TEST_GITHUB_USERNAME=your_github_username
  4. (optional) Set up Sentry for error tracking: You can also set optional Sentry configuration for error tracking.

    SENTRY_DSN=your_sentry_dsn_hereSENTRY_ENVIRONMENT=development
  5. (optional) Configure cache sizes: You can adjust the cache sizes for user stats and language stats in the .env file.

    # Maximum memory capacity for GitHub API response cache in MiB (default: 32)CACHE_MAX_CAPACITY_MB=32# TTL for user stats cache in seconds (default: 900 = 15 minutes)CACHE_USER_STATS_TTL_SECONDS=900# TTL for user languages cache in seconds (default: 3600 = 1 hour) CACHE_USER_LANGUAGES_TTL_SECONDS=3600
  6. (optional) Restrict API access to specific users: You can limit which GitHub usernames are allowed to use the API by setting an allowlist in the .env file.

    # Comma-separated list of GitHub usernames allowed to use the API# Leave empty or unset to allow all users (default: empty)ALLOWED_USERNAMES=user1,user2,user3

Running From Docker Latest Image

You can run the server using Docker. Make sure to replace your_github_personal_access_token_here with your actual GitHub Personal Access Token.

docker pull ghcr.io/samgozman/github-statcrab/server:latest docker run -p 3000:3000 --env-file .env ghcr.io/samgozman/github-statcrab/server:latest

Build & Run Server Locally

To run the server locally, ensure you have Rust and Cargo installed. You can install them from rustup.rs.

The server automatically loads environment variables from the .env file:

make run

The server will start on http://0.0.0.0:3000 and will automatically read your GitHub token from the .env file.

Testing

Run the tests with:

make test

FAQ

Why Rust???image

Special Thanks

Special thanks to @anuraghazra and his amazing github-readme-stats for the inspiration!

About

πŸ¦€ GitHub profile stats for readme generated on the fly

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

github-statcrab

github-statcrab is a Rust-based web server that generates dynamic SVG cards displaying GitHub user statistics and programming language usage. It leverages the GitHub API to fetch user data and presents it in a visually appealing format to be embedded in README files or web pages.

Simple to install & use, easy to customize with various themes and layouts!

Table of contents

GitHub Top Languages card

Displays the top programming languages used by a GitHub user in a visually appealing card format. You can insert it into your GitHub README with a simple markdown snippet.

Just replace <your-hosted-instance> with the URL of your hosted instance of the github-statcrab server and samgozman with your GitHub username.

Horizontal layout

[![GitHub Top Languages](https://<your-hosted-instance>/api/langs-card?username=samgozman&layout=horizontal&max_languages=8&theme=dracula&size_weight=0.5&count_weight=0.5)](https://github.com/samgozman/github-statcrab)

GitHub Top Languages for samgozman

Vertical layout

[![GitHub Top Languages](https://<your-hosted-instance>/api/langs-card?username=samgozman&layout=vertical&max_languages=8&theme=dracula&size_weight=0.5&count_weight=0.5)](https://github.com/samgozman/github-statcrab)

GitHub Top Languages for samgozman

Options for /api/langs-card

ParameterDescriptionTypeRequiredDefaultExample
usernameGitHub usernamestringβœ…-samgozman
layoutCard layout orientationstring❌verticalhorizontal, vertical
max_languagesMaximum number of languages to displaynumber❌85
size_weightWeight factor for repository size in rankingnumber❌0.50.3
count_weightWeight factor for file count in rankingnumber❌0.50.7
exclude_repoComma-separated list of repositories to excludestring❌-repo1,repo2,private-repo
themeVisual theme for the cardstring❌lightdark, dracula, transparent-blue, monokai
offset_xHorizontal offset for card positioningnumber❌1220
offset_yVertical offset for card positioningnumber❌1215
hide_titleHide the card titleboolean❌falsetrue
hide_backgroundHide the card backgroundboolean❌falsetrue
hide_background_strokeHide the card background borderboolean❌falsetrue

GitHub user stats card

Can be used to show GitHub user statistics such as total stars, forks, commits, pull requests, issues, and more. You can insert it into your GitHub README with a simple markdown snippet:

[![GitHub Stats for samgozman](https://<your-hosted-instance>/api/stats-card?username=samgozman&theme=monokai)](https://github.com/samgozman/github-statcrab)

You should replace <your-hosted-instance> with the URL of your hosted instance of the github-statcrab server and samgozman with your GitHub username.

GitHub Stats for samgozman

Options for /api/stats-card

ParameterDescriptionTypeRequiredDefaultExample
usernameGitHub usernamestringβœ…-samgozman
hideComma-separated list of stats to hidestring❌-stars_count,commits_ytd_count
themeVisual theme for the cardstring❌lightdark, dracula, monokai, transparent-blue
offset_xHorizontal offset for card positioningnumber❌1220
offset_yVertical offset for card positioningnumber❌1215
hide_titleHide the card titleboolean❌falsetrue
hide_backgroundHide the card backgroundboolean❌falsetrue
hide_background_strokeHide the card background borderboolean❌falsetrue

Available Statistics to Hide

The hide parameter accepts a comma-separated list of the following values:

  • stars_count - Total stars received across all repositories
  • commits_ytd_count - Total commits made this year
  • issues_count - Total issues opened
  • pull_requests_count - Total pull requests created
  • merge_requests_count - Total merge requests created
  • reviews_count - Total pull request reviews performed
  • started_discussions_count - Total discussions started
  • answered_discussions_count - Total discussions answered

Note: At least 2 statistics must remain visible on the card.

Themes

The github-statcrab server supports multiple visual themes for the generated SVG cards. You can customize the appearance of the cards by using the theme parameter in the API requests.

All available themes and their previews can be found in the themes readme file.

Adding new themes

Adding new themes to the github-statcrab is pretty easy. You don't even need to know Rust! You can just open a PR with a new CSS file in the assets/css/themes/ directory. Make sure to follow the existing theme structure and naming conventions. It's the easiest way to contribute!

Github Actions will automatically do the rest for you, including building the themes readme file page with previews of all themes (yes, it's automated!).

Deployment Guide

This guide will help you set up and run the github-statcrab server.

First steps

Get a GitHub Personal Access Token:

You will need this token to authenticate with the GitHub API.

Deploy with Railway

You can easily deploy the github-statcrab server using template for Railway. Just click the button below to get started:

Deploy on Railway

Developers guide

First of all you need to set up your environment variables. You can do this by creating a .env file in the root directory of the project. You can use the provided .env.example file as a template.

  1. Copy the example environment file:

    cp .env.example .env
  2. Edit .env and set your GitHub token:

    GITHUB_TOKEN=your_github_personal_access_token_here
  3. (optional) add a test GitHub username for local e2e testing:

    TEST_GITHUB_USERNAME=your_github_username
  4. (optional) Set up Sentry for error tracking: You can also set optional Sentry configuration for error tracking.

    SENTRY_DSN=your_sentry_dsn_hereSENTRY_ENVIRONMENT=development
  5. (optional) Configure cache sizes: You can adjust the cache sizes for user stats and language stats in the .env file.

    # Maximum memory capacity for GitHub API response cache in MiB (default: 32)CACHE_MAX_CAPACITY_MB=32# TTL for user stats cache in seconds (default: 900 = 15 minutes)CACHE_USER_STATS_TTL_SECONDS=900# TTL for user languages cache in seconds (default: 3600 = 1 hour) CACHE_USER_LANGUAGES_TTL_SECONDS=3600
  6. (optional) Restrict API access to specific users: You can limit which GitHub usernames are allowed to use the API by setting an allowlist in the .env file.

    # Comma-separated list of GitHub usernames allowed to use the API# Leave empty or unset to allow all users (default: empty)ALLOWED_USERNAMES=user1,user2,user3

Running From Docker Latest Image

You can run the server using Docker. Make sure to replace your_github_personal_access_token_here with your actual GitHub Personal Access Token.

docker pull ghcr.io/samgozman/github-statcrab/server:latest docker run -p 3000:3000 --env-file .env ghcr.io/samgozman/github-statcrab/server:latest

Build & Run Server Locally

To run the server locally, ensure you have Rust and Cargo installed. You can install them from rustup.rs.

The server automatically loads environment variables from the .env file:

make run

The server will start on http://0.0.0.0:3000 and will automatically read your GitHub token from the .env file.

Testing

Run the tests with:

make test

FAQ

Why Rust???image

Special Thanks

Special thanks to @anuraghazra and his amazing github-readme-stats for the inspiration!

About

πŸ¦€ GitHub profile stats for readme generated on the fly

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

github-statcrab

github-statcrab is a Rust-based web server that generates dynamic SVG cards displaying GitHub user statistics and programming language usage. It leverages the GitHub API to fetch user data and presents it in a visually appealing format to be embedded in README files or web pages.

Simple to install & use, easy to customize with various themes and layouts!

Table of contents

GitHub Top Languages card

Displays the top programming languages used by a GitHub user in a visually appealing card format. You can insert it into your GitHub README with a simple markdown snippet.

Just replace <your-hosted-instance> with the URL of your hosted instance of the github-statcrab server and samgozman with your GitHub username.

Horizontal layout

[![GitHub Top Languages](https://<your-hosted-instance>/api/langs-card?username=samgozman&layout=horizontal&max_languages=8&theme=dracula&size_weight=0.5&count_weight=0.5)](https://github.com/samgozman/github-statcrab)

GitHub Top Languages for samgozman

Vertical layout

[![GitHub Top Languages](https://<your-hosted-instance>/api/langs-card?username=samgozman&layout=vertical&max_languages=8&theme=dracula&size_weight=0.5&count_weight=0.5)](https://github.com/samgozman/github-statcrab)

GitHub Top Languages for samgozman

Options for /api/langs-card

ParameterDescriptionTypeRequiredDefaultExample
usernameGitHub usernamestringβœ…-samgozman
layoutCard layout orientationstring❌verticalhorizontal, vertical
max_languagesMaximum number of languages to displaynumber❌85
size_weightWeight factor for repository size in rankingnumber❌0.50.3
count_weightWeight factor for file count in rankingnumber❌0.50.7
exclude_repoComma-separated list of repositories to excludestring❌-repo1,repo2,private-repo
themeVisual theme for the cardstring❌lightdark, dracula, transparent-blue, monokai
offset_xHorizontal offset for card positioningnumber❌1220
offset_yVertical offset for card positioningnumber❌1215
hide_titleHide the card titleboolean❌falsetrue
hide_backgroundHide the card backgroundboolean❌falsetrue
hide_background_strokeHide the card background borderboolean❌falsetrue

GitHub user stats card

Can be used to show GitHub user statistics such as total stars, forks, commits, pull requests, issues, and more. You can insert it into your GitHub README with a simple markdown snippet:

[![GitHub Stats for samgozman](https://<your-hosted-instance>/api/stats-card?username=samgozman&theme=monokai)](https://github.com/samgozman/github-statcrab)

You should replace <your-hosted-instance> with the URL of your hosted instance of the github-statcrab server and samgozman with your GitHub username.

GitHub Stats for samgozman

Options for /api/stats-card

ParameterDescriptionTypeRequiredDefaultExample
usernameGitHub usernamestringβœ…-samgozman
hideComma-separated list of stats to hidestring❌-stars_count,commits_ytd_count
themeVisual theme for the cardstring❌lightdark, dracula, monokai, transparent-blue
offset_xHorizontal offset for card positioningnumber❌1220
offset_yVertical offset for card positioningnumber❌1215
hide_titleHide the card titleboolean❌falsetrue
hide_backgroundHide the card backgroundboolean❌falsetrue
hide_background_strokeHide the card background borderboolean❌falsetrue

Available Statistics to Hide

The hide parameter accepts a comma-separated list of the following values:

  • stars_count - Total stars received across all repositories
  • commits_ytd_count - Total commits made this year
  • issues_count - Total issues opened
  • pull_requests_count - Total pull requests created
  • merge_requests_count - Total merge requests created
  • reviews_count - Total pull request reviews performed
  • started_discussions_count - Total discussions started
  • answered_discussions_count - Total discussions answered

Note: At least 2 statistics must remain visible on the card.

Themes

The github-statcrab server supports multiple visual themes for the generated SVG cards. You can customize the appearance of the cards by using the theme parameter in the API requests.

All available themes and their previews can be found in the themes readme file.

Adding new themes

Adding new themes to the github-statcrab is pretty easy. You don't even need to know Rust! You can just open a PR with a new CSS file in the assets/css/themes/ directory. Make sure to follow the existing theme structure and naming conventions. It's the easiest way to contribute!

Github Actions will automatically do the rest for you, including building the themes readme file page with previews of all themes (yes, it's automated!).

Deployment Guide

This guide will help you set up and run the github-statcrab server.

First steps

Get a GitHub Personal Access Token:

You will need this token to authenticate with the GitHub API.

Deploy with Railway

You can easily deploy the github-statcrab server using template for Railway. Just click the button below to get started:

Deploy on Railway

Developers guide

First of all you need to set up your environment variables. You can do this by creating a .env file in the root directory of the project. You can use the provided .env.example file as a template.

  1. Copy the example environment file:

    cp .env.example .env
  2. Edit .env and set your GitHub token:

    GITHUB_TOKEN=your_github_personal_access_token_here
  3. (optional) add a test GitHub username for local e2e testing:

    TEST_GITHUB_USERNAME=your_github_username
  4. (optional) Set up Sentry for error tracking: You can also set optional Sentry configuration for error tracking.

    SENTRY_DSN=your_sentry_dsn_hereSENTRY_ENVIRONMENT=development
  5. (optional) Configure cache sizes: You can adjust the cache sizes for user stats and language stats in the .env file.

    # Maximum memory capacity for GitHub API response cache in MiB (default: 32)CACHE_MAX_CAPACITY_MB=32# TTL for user stats cache in seconds (default: 900 = 15 minutes)CACHE_USER_STATS_TTL_SECONDS=900# TTL for user languages cache in seconds (default: 3600 = 1 hour) CACHE_USER_LANGUAGES_TTL_SECONDS=3600
  6. (optional) Restrict API access to specific users: You can limit which GitHub usernames are allowed to use the API by setting an allowlist in the .env file.

    # Comma-separated list of GitHub usernames allowed to use the API# Leave empty or unset to allow all users (default: empty)ALLOWED_USERNAMES=user1,user2,user3

Running From Docker Latest Image

You can run the server using Docker. Make sure to replace your_github_personal_access_token_here with your actual GitHub Personal Access Token.

docker pull ghcr.io/samgozman/github-statcrab/server:latest docker run -p 3000:3000 --env-file .env ghcr.io/samgozman/github-statcrab/server:latest

Build & Run Server Locally

To run the server locally, ensure you have Rust and Cargo installed. You can install them from rustup.rs.

The server automatically loads environment variables from the .env file:

make run

The server will start on http://0.0.0.0:3000 and will automatically read your GitHub token from the .env file.

Testing

Run the tests with:

make test

FAQ

Why Rust???image

Special Thanks

Special thanks to @anuraghazra and his amazing github-readme-stats for the inspiration!

About

πŸ¦€ GitHub profile stats for readme generated on the fly

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

github-statcrab

github-statcrab is a Rust-based web server that generates dynamic SVG cards displaying GitHub user statistics and programming language usage. It leverages the GitHub API to fetch user data and presents it in a visually appealing format to be embedded in README files or web pages.

Simple to install & use, easy to customize with various themes and layouts!

Table of contents

GitHub Top Languages card

Displays the top programming languages used by a GitHub user in a visually appealing card format. You can insert it into your GitHub README with a simple markdown snippet.

Just replace <your-hosted-instance> with the URL of your hosted instance of the github-statcrab server and samgozman with your GitHub username.

Horizontal layout

[![GitHub Top Languages](https://<your-hosted-instance>/api/langs-card?username=samgozman&layout=horizontal&max_languages=8&theme=dracula&size_weight=0.5&count_weight=0.5)](https://github.com/samgozman/github-statcrab)

GitHub Top Languages for samgozman

Vertical layout

[![GitHub Top Languages](https://<your-hosted-instance>/api/langs-card?username=samgozman&layout=vertical&max_languages=8&theme=dracula&size_weight=0.5&count_weight=0.5)](https://github.com/samgozman/github-statcrab)

GitHub Top Languages for samgozman

Options for /api/langs-card

ParameterDescriptionTypeRequiredDefaultExample
usernameGitHub usernamestringβœ…-samgozman
layoutCard layout orientationstring❌verticalhorizontal, vertical
max_languagesMaximum number of languages to displaynumber❌85
size_weightWeight factor for repository size in rankingnumber❌0.50.3
count_weightWeight factor for file count in rankingnumber❌0.50.7
exclude_repoComma-separated list of repositories to excludestring❌-repo1,repo2,private-repo
themeVisual theme for the cardstring❌lightdark, dracula, transparent-blue, monokai
offset_xHorizontal offset for card positioningnumber❌1220
offset_yVertical offset for card positioningnumber❌1215
hide_titleHide the card titleboolean❌falsetrue
hide_backgroundHide the card backgroundboolean❌falsetrue
hide_background_strokeHide the card background borderboolean❌falsetrue

GitHub user stats card

Can be used to show GitHub user statistics such as total stars, forks, commits, pull requests, issues, and more. You can insert it into your GitHub README with a simple markdown snippet:

[![GitHub Stats for samgozman](https://<your-hosted-instance>/api/stats-card?username=samgozman&theme=monokai)](https://github.com/samgozman/github-statcrab)

You should replace <your-hosted-instance> with the URL of your hosted instance of the github-statcrab server and samgozman with your GitHub username.

GitHub Stats for samgozman

Options for /api/stats-card

ParameterDescriptionTypeRequiredDefaultExample
usernameGitHub usernamestringβœ…-samgozman
hideComma-separated list of stats to hidestring❌-stars_count,commits_ytd_count
themeVisual theme for the cardstring❌lightdark, dracula, monokai, transparent-blue
offset_xHorizontal offset for card positioningnumber❌1220
offset_yVertical offset for card positioningnumber❌1215
hide_titleHide the card titleboolean❌falsetrue
hide_backgroundHide the card backgroundboolean❌falsetrue
hide_background_strokeHide the card background borderboolean❌falsetrue

Available Statistics to Hide

The hide parameter accepts a comma-separated list of the following values:

  • stars_count - Total stars received across all repositories
  • commits_ytd_count - Total commits made this year
  • issues_count - Total issues opened
  • pull_requests_count - Total pull requests created
  • merge_requests_count - Total merge requests created
  • reviews_count - Total pull request reviews performed
  • started_discussions_count - Total discussions started
  • answered_discussions_count - Total discussions answered

Note: At least 2 statistics must remain visible on the card.

Themes

The github-statcrab server supports multiple visual themes for the generated SVG cards. You can customize the appearance of the cards by using the theme parameter in the API requests.

All available themes and their previews can be found in the themes readme file.

Adding new themes

Adding new themes to the github-statcrab is pretty easy. You don't even need to know Rust! You can just open a PR with a new CSS file in the assets/css/themes/ directory. Make sure to follow the existing theme structure and naming conventions. It's the easiest way to contribute!

Github Actions will automatically do the rest for you, including building the themes readme file page with previews of all themes (yes, it's automated!).

Deployment Guide

This guide will help you set up and run the github-statcrab server.

First steps

Get a GitHub Personal Access Token:

You will need this token to authenticate with the GitHub API.

Deploy with Railway

You can easily deploy the github-statcrab server using template for Railway. Just click the button below to get started:

Deploy on Railway

Developers guide

First of all you need to set up your environment variables. You can do this by creating a .env file in the root directory of the project. You can use the provided .env.example file as a template.

  1. Copy the example environment file:

    cp .env.example .env
  2. Edit .env and set your GitHub token:

    GITHUB_TOKEN=your_github_personal_access_token_here
  3. (optional) add a test GitHub username for local e2e testing:

    TEST_GITHUB_USERNAME=your_github_username
  4. (optional) Set up Sentry for error tracking: You can also set optional Sentry configuration for error tracking.

    SENTRY_DSN=your_sentry_dsn_hereSENTRY_ENVIRONMENT=development
  5. (optional) Configure cache sizes: You can adjust the cache sizes for user stats and language stats in the .env file.

    # Maximum memory capacity for GitHub API response cache in MiB (default: 32)CACHE_MAX_CAPACITY_MB=32# TTL for user stats cache in seconds (default: 900 = 15 minutes)CACHE_USER_STATS_TTL_SECONDS=900# TTL for user languages cache in seconds (default: 3600 = 1 hour) CACHE_USER_LANGUAGES_TTL_SECONDS=3600
  6. (optional) Restrict API access to specific users: You can limit which GitHub usernames are allowed to use the API by setting an allowlist in the .env file.

    # Comma-separated list of GitHub usernames allowed to use the API# Leave empty or unset to allow all users (default: empty)ALLOWED_USERNAMES=user1,user2,user3

Running From Docker Latest Image

You can run the server using Docker. Make sure to replace your_github_personal_access_token_here with your actual GitHub Personal Access Token.

docker pull ghcr.io/samgozman/github-statcrab/server:latest docker run -p 3000:3000 --env-file .env ghcr.io/samgozman/github-statcrab/server:latest

Build & Run Server Locally

To run the server locally, ensure you have Rust and Cargo installed. You can install them from rustup.rs.

The server automatically loads environment variables from the .env file:

make run

The server will start on http://0.0.0.0:3000 and will automatically read your GitHub token from the .env file.

Testing

Run the tests with:

make test

FAQ

Why Rust???image

Special Thanks

Special thanks to @anuraghazra and his amazing github-readme-stats for the inspiration!

About

πŸ¦€ GitHub profile stats for readme generated on the fly

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

github-statcrab

github-statcrab is a Rust-based web server that generates dynamic SVG cards displaying GitHub user statistics and programming language usage. It leverages the GitHub API to fetch user data and presents it in a visually appealing format to be embedded in README files or web pages.

Simple to install & use, easy to customize with various themes and layouts!

Table of contents

GitHub Top Languages card

Displays the top programming languages used by a GitHub user in a visually appealing card format. You can insert it into your GitHub README with a simple markdown snippet.

Just replace <your-hosted-instance> with the URL of your hosted instance of the github-statcrab server and samgozman with your GitHub username.

Horizontal layout

[![GitHub Top Languages](https://<your-hosted-instance>/api/langs-card?username=samgozman&layout=horizontal&max_languages=8&theme=dracula&size_weight=0.5&count_weight=0.5)](https://github.com/samgozman/github-statcrab)

GitHub Top Languages for samgozman

Vertical layout

[![GitHub Top Languages](https://<your-hosted-instance>/api/langs-card?username=samgozman&layout=vertical&max_languages=8&theme=dracula&size_weight=0.5&count_weight=0.5)](https://github.com/samgozman/github-statcrab)

GitHub Top Languages for samgozman

Options for /api/langs-card

ParameterDescriptionTypeRequiredDefaultExample
usernameGitHub usernamestringβœ…-samgozman
layoutCard layout orientationstring❌verticalhorizontal, vertical
max_languagesMaximum number of languages to displaynumber❌85
size_weightWeight factor for repository size in rankingnumber❌0.50.3
count_weightWeight factor for file count in rankingnumber❌0.50.7
exclude_repoComma-separated list of repositories to excludestring❌-repo1,repo2,private-repo
themeVisual theme for the cardstring❌lightdark, dracula, transparent-blue, monokai
offset_xHorizontal offset for card positioningnumber❌1220
offset_yVertical offset for card positioningnumber❌1215
hide_titleHide the card titleboolean❌falsetrue
hide_backgroundHide the card backgroundboolean❌falsetrue
hide_background_strokeHide the card background borderboolean❌falsetrue

GitHub user stats card

Can be used to show GitHub user statistics such as total stars, forks, commits, pull requests, issues, and more. You can insert it into your GitHub README with a simple markdown snippet:

[![GitHub Stats for samgozman](https://<your-hosted-instance>/api/stats-card?username=samgozman&theme=monokai)](https://github.com/samgozman/github-statcrab)

You should replace <your-hosted-instance> with the URL of your hosted instance of the github-statcrab server and samgozman with your GitHub username.

GitHub Stats for samgozman

Options for /api/stats-card

ParameterDescriptionTypeRequiredDefaultExample
usernameGitHub usernamestringβœ…-samgozman
hideComma-separated list of stats to hidestring❌-stars_count,commits_ytd_count
themeVisual theme for the cardstring❌lightdark, dracula, monokai, transparent-blue
offset_xHorizontal offset for card positioningnumber❌1220
offset_yVertical offset for card positioningnumber❌1215
hide_titleHide the card titleboolean❌falsetrue
hide_backgroundHide the card backgroundboolean❌falsetrue
hide_background_strokeHide the card background borderboolean❌falsetrue

Available Statistics to Hide

The hide parameter accepts a comma-separated list of the following values:

  • stars_count - Total stars received across all repositories
  • commits_ytd_count - Total commits made this year
  • issues_count - Total issues opened
  • pull_requests_count - Total pull requests created
  • merge_requests_count - Total merge requests created
  • reviews_count - Total pull request reviews performed
  • started_discussions_count - Total discussions started
  • answered_discussions_count - Total discussions answered

Note: At least 2 statistics must remain visible on the card.

Themes

The github-statcrab server supports multiple visual themes for the generated SVG cards. You can customize the appearance of the cards by using the theme parameter in the API requests.

All available themes and their previews can be found in the themes readme file.

Adding new themes

Adding new themes to the github-statcrab is pretty easy. You don't even need to know Rust! You can just open a PR with a new CSS file in the assets/css/themes/ directory. Make sure to follow the existing theme structure and naming conventions. It's the easiest way to contribute!

Github Actions will automatically do the rest for you, including building the themes readme file page with previews of all themes (yes, it's automated!).

Deployment Guide

This guide will help you set up and run the github-statcrab server.

First steps

Get a GitHub Personal Access Token:

You will need this token to authenticate with the GitHub API.

Deploy with Railway

You can easily deploy the github-statcrab server using template for Railway. Just click the button below to get started:

Deploy on Railway

Developers guide

First of all you need to set up your environment variables. You can do this by creating a .env file in the root directory of the project. You can use the provided .env.example file as a template.

  1. Copy the example environment file:

    cp .env.example .env
  2. Edit .env and set your GitHub token:

    GITHUB_TOKEN=your_github_personal_access_token_here
  3. (optional) add a test GitHub username for local e2e testing:

    TEST_GITHUB_USERNAME=your_github_username
  4. (optional) Set up Sentry for error tracking: You can also set optional Sentry configuration for error tracking.

    SENTRY_DSN=your_sentry_dsn_hereSENTRY_ENVIRONMENT=development
  5. (optional) Configure cache sizes: You can adjust the cache sizes for user stats and language stats in the .env file.

    # Maximum memory capacity for GitHub API response cache in MiB (default: 32)CACHE_MAX_CAPACITY_MB=32# TTL for user stats cache in seconds (default: 900 = 15 minutes)CACHE_USER_STATS_TTL_SECONDS=900# TTL for user languages cache in seconds (default: 3600 = 1 hour) CACHE_USER_LANGUAGES_TTL_SECONDS=3600
  6. (optional) Restrict API access to specific users: You can limit which GitHub usernames are allowed to use the API by setting an allowlist in the .env file.

    # Comma-separated list of GitHub usernames allowed to use the API# Leave empty or unset to allow all users (default: empty)ALLOWED_USERNAMES=user1,user2,user3

Running From Docker Latest Image

You can run the server using Docker. Make sure to replace your_github_personal_access_token_here with your actual GitHub Personal Access Token.

docker pull ghcr.io/samgozman/github-statcrab/server:latest docker run -p 3000:3000 --env-file .env ghcr.io/samgozman/github-statcrab/server:latest

Build & Run Server Locally

To run the server locally, ensure you have Rust and Cargo installed. You can install them from rustup.rs.

The server automatically loads environment variables from the .env file:

make run

The server will start on http://0.0.0.0:3000 and will automatically read your GitHub token from the .env file.

Testing

Run the tests with:

make test

FAQ

Why Rust???image

Special Thanks

Special thanks to @anuraghazra and his amazing github-readme-stats for the inspiration!

About

πŸ¦€ GitHub profile stats for readme generated on the fly

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

github-statcrab

github-statcrab is a Rust-based web server that generates dynamic SVG cards displaying GitHub user statistics and programming language usage. It leverages the GitHub API to fetch user data and presents it in a visually appealing format to be embedded in README files or web pages.

Simple to install & use, easy to customize with various themes and layouts!

Table of contents

GitHub Top Languages card

Displays the top programming languages used by a GitHub user in a visually appealing card format. You can insert it into your GitHub README with a simple markdown snippet.

Just replace <your-hosted-instance> with the URL of your hosted instance of the github-statcrab server and samgozman with your GitHub username.

Horizontal layout

[![GitHub Top Languages](https://<your-hosted-instance>/api/langs-card?username=samgozman&layout=horizontal&max_languages=8&theme=dracula&size_weight=0.5&count_weight=0.5)](https://github.com/samgozman/github-statcrab)

GitHub Top Languages for samgozman

Vertical layout

[![GitHub Top Languages](https://<your-hosted-instance>/api/langs-card?username=samgozman&layout=vertical&max_languages=8&theme=dracula&size_weight=0.5&count_weight=0.5)](https://github.com/samgozman/github-statcrab)

GitHub Top Languages for samgozman

Options for /api/langs-card

ParameterDescriptionTypeRequiredDefaultExample
usernameGitHub usernamestringβœ…-samgozman
layoutCard layout orientationstring❌verticalhorizontal, vertical
max_languagesMaximum number of languages to displaynumber❌85
size_weightWeight factor for repository size in rankingnumber❌0.50.3
count_weightWeight factor for file count in rankingnumber❌0.50.7
exclude_repoComma-separated list of repositories to excludestring❌-repo1,repo2,private-repo
themeVisual theme for the cardstring❌lightdark, dracula, transparent-blue, monokai
offset_xHorizontal offset for card positioningnumber❌1220
offset_yVertical offset for card positioningnumber❌1215
hide_titleHide the card titleboolean❌falsetrue
hide_backgroundHide the card backgroundboolean❌falsetrue
hide_background_strokeHide the card background borderboolean❌falsetrue

GitHub user stats card

Can be used to show GitHub user statistics such as total stars, forks, commits, pull requests, issues, and more. You can insert it into your GitHub README with a simple markdown snippet:

[![GitHub Stats for samgozman](https://<your-hosted-instance>/api/stats-card?username=samgozman&theme=monokai)](https://github.com/samgozman/github-statcrab)

You should replace <your-hosted-instance> with the URL of your hosted instance of the github-statcrab server and samgozman with your GitHub username.

GitHub Stats for samgozman

Options for /api/stats-card

ParameterDescriptionTypeRequiredDefaultExample
usernameGitHub usernamestringβœ…-samgozman
hideComma-separated list of stats to hidestring❌-stars_count,commits_ytd_count
themeVisual theme for the cardstring❌lightdark, dracula, monokai, transparent-blue
offset_xHorizontal offset for card positioningnumber❌1220
offset_yVertical offset for card positioningnumber❌1215
hide_titleHide the card titleboolean❌falsetrue
hide_backgroundHide the card backgroundboolean❌falsetrue
hide_background_strokeHide the card background borderboolean❌falsetrue

Available Statistics to Hide

The hide parameter accepts a comma-separated list of the following values:

  • stars_count - Total stars received across all repositories
  • commits_ytd_count - Total commits made this year
  • issues_count - Total issues opened
  • pull_requests_count - Total pull requests created
  • merge_requests_count - Total merge requests created
  • reviews_count - Total pull request reviews performed
  • started_discussions_count - Total discussions started
  • answered_discussions_count - Total discussions answered

Note: At least 2 statistics must remain visible on the card.

Themes

The github-statcrab server supports multiple visual themes for the generated SVG cards. You can customize the appearance of the cards by using the theme parameter in the API requests.

All available themes and their previews can be found in the themes readme file.

Adding new themes

Adding new themes to the github-statcrab is pretty easy. You don't even need to know Rust! You can just open a PR with a new CSS file in the assets/css/themes/ directory. Make sure to follow the existing theme structure and naming conventions. It's the easiest way to contribute!

Github Actions will automatically do the rest for you, including building the themes readme file page with previews of all themes (yes, it's automated!).

Deployment Guide

This guide will help you set up and run the github-statcrab server.

First steps

Get a GitHub Personal Access Token:

You will need this token to authenticate with the GitHub API.

Deploy with Railway

You can easily deploy the github-statcrab server using template for Railway. Just click the button below to get started:

Deploy on Railway

Developers guide

First of all you need to set up your environment variables. You can do this by creating a .env file in the root directory of the project. You can use the provided .env.example file as a template.

  1. Copy the example environment file:

    cp .env.example .env
  2. Edit .env and set your GitHub token:

    GITHUB_TOKEN=your_github_personal_access_token_here
  3. (optional) add a test GitHub username for local e2e testing:

    TEST_GITHUB_USERNAME=your_github_username
  4. (optional) Set up Sentry for error tracking: You can also set optional Sentry configuration for error tracking.

    SENTRY_DSN=your_sentry_dsn_hereSENTRY_ENVIRONMENT=development
  5. (optional) Configure cache sizes: You can adjust the cache sizes for user stats and language stats in the .env file.

    # Maximum memory capacity for GitHub API response cache in MiB (default: 32)CACHE_MAX_CAPACITY_MB=32# TTL for user stats cache in seconds (default: 900 = 15 minutes)CACHE_USER_STATS_TTL_SECONDS=900# TTL for user languages cache in seconds (default: 3600 = 1 hour) CACHE_USER_LANGUAGES_TTL_SECONDS=3600
  6. (optional) Restrict API access to specific users: You can limit which GitHub usernames are allowed to use the API by setting an allowlist in the .env file.

    # Comma-separated list of GitHub usernames allowed to use the API# Leave empty or unset to allow all users (default: empty)ALLOWED_USERNAMES=user1,user2,user3

Running From Docker Latest Image

You can run the server using Docker. Make sure to replace your_github_personal_access_token_here with your actual GitHub Personal Access Token.

docker pull ghcr.io/samgozman/github-statcrab/server:latest docker run -p 3000:3000 --env-file .env ghcr.io/samgozman/github-statcrab/server:latest

Build & Run Server Locally

To run the server locally, ensure you have Rust and Cargo installed. You can install them from rustup.rs.

The server automatically loads environment variables from the .env file:

make run

The server will start on http://0.0.0.0:3000 and will automatically read your GitHub token from the .env file.

Testing

Run the tests with:

make test

FAQ

Why Rust???image

Special Thanks

Special thanks to @anuraghazra and his amazing github-readme-stats for the inspiration!

About

πŸ¦€ GitHub profile stats for readme generated on the fly

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages