GitHub API Limitations
Rate Limits
Constraint: GitHub enforces API rate limits that may affect execution:- Authenticated requests: 5,000 requests per hour
- Unauthenticated requests: 60 requests per hour
- Typical usage (without stargazer tracking): 1-5 API requests per run
- With stargazer tracking: 1-5 + (1 per repository) API requests
- Users with 100+ repositories and stargazer tracking enabled may approach rate limits if running very frequently
-
Disable stargazer tracking if not needed:
-
Run less frequently:
-
Reduce the number of tracked repositories:
In practice, rate limits are rarely hit with normal usage patterns. Most users stay well under 100 requests per run.
Stargazer History Limitation
Constraint: GitHub’s API only provides access to the current list of stargazers, not historical stargazers. Impact:- You can only see new stargazers since the last run
- If someone stars and unstars between runs, they won’t appear in reports
- No way to recover stargazers from before you started tracking
- Run the action frequently (daily or more) to minimize gaps
- Accept this as an inherent limitation of the GitHub API
Repository Count Pagination
Constraint: Fetching repositories is paginated (100 per page). Impact:- Users with 1,000+ repositories will require 10+ API requests just to list all repos
- Slightly slower execution for users with many repositories
- Use filtering to reduce the number of repositories:
Token Limitations
Default GITHUB_TOKEN Not Supported
Constraint: The defaultGITHUB_TOKEN provided by GitHub Actions cannot access repositories outside the current repository.
Impact:
- You must create a Personal Access Token (PAT)
- Additional setup step required
- Classic:
repoorpublic_repo - Fine-grained: Repository access with Contents + Metadata read permissions
Organization Repository Access
Constraint: Fine-grained tokens may have limited organization access. Impact:- Some organizations don’t support fine-grained tokens yet
- Fine-grained tokens require explicit organization approval
- Classic tokens may be required for some enterprise setups
- Use Classic PAT with
reposcope for organization repositories - Request organization admin to approve fine-grained token access
Data Storage Limitations
Git Branch Storage
Constraint: Historical data is stored in a Git branch, which has some limitations:- Maximum practical size: ~50 MB (GitHub’s repository size recommendations)
- All data is version-controlled (no selective deletion)
- Branch must be publicly accessible for badge embedding
- Users with thousands of repositories and extended history (100+ snapshots) might approach practical size limits
- Typical user with 50 repositories and 52 snapshots: < 2 MB
-
Reduce history retention:
-
Disable stargazer tracking (larger data footprint):
-
Filter repositories:
Private Repository Badge Embedding
Constraint: Badges and charts from private repository data branches cannot be embedded in public locations (external sites, public repos). Impact:- SVG badges/charts won’t render if the data branch is private
- Can only be viewed within the same private repository
- Make the data branch repository public (while keeping source code private)
- Host charts externally (e.g., upload to a public CDN)
- Use outputs to post data to external services instead of embedding
Feature Limitations
Stargazer Historical Tracking
Constraint: No built-in way to track when specific users starred your repository in the past. Impact:- Only detects new stargazers since last run
- No historical timeline of individual stars
- Cannot build a “who starred when” timeline retroactively
- Start tracking as early as possible to build history going forward
- Use GitHub’s built-in Insights > Traffic for some historical data (limited retention)
No Unstar Detection
Constraint: The action cannot definitively identify who unstarred a repository. Impact:- Reports show “Lost Stars: 5” but not which users
- Can infer from stargazer list changes, but not 100% reliable
- Accept aggregate unstar counts as sufficient
- Run very frequently (hourly) to narrow down timeframe
Chart Customization
Constraint: Chart appearance is pre-defined and cannot be fully customized. Impact:- Fixed color schemes (dark/light mode)
- Fixed chart dimensions and layouts
- No custom chart types beyond the three provided
-
Use CSV/JSON outputs to generate custom charts:
- Request features via feature request
Language Support
Constraint: Only 4 languages are currently supported:- English (en)
- Spanish (es)
- Catalan (ca)
- Italian (it)
Workflow Limitations
Execution Time
Constraint: Workflows may take several minutes to complete, especially with stargazer tracking enabled. Typical execution times:- Without stargazer tracking: 1-2 minutes
- With stargazer tracking (50 repos): 3-5 minutes
- With stargazer tracking (100+ repos): 5-10 minutes
- Consumes GitHub Actions minutes
- May timeout on free tier if you have hundreds of repositories with stargazer tracking
Scheduling Precision
Constraint: GitHub Actions scheduled workflows may have up to 10-15 minute delays during high-load periods. Impact:- Workflow won’t run at exactly the scheduled time
- May not run at all if GitHub Actions is experiencing issues
- Accept approximate scheduling (not critical for star tracking)
- Use
workflow_dispatchfor manual triggering when needed
Concurrent Runs
Constraint: Multiple runs of the same workflow can conflict when writing to the data branch. Impact: If manually triggered while scheduled run is in progress, one may fail with a merge conflict. Workaround: Add concurrency control:Platform Limitations
GitHub Enterprise Server (GHES)
Constraint: Some features may not be available on older GHES versions. Requirements:- GHES 3.0 or later recommended
- API compatibility varies by version
- Older GHES installations may have missing API endpoints
- Some newer GitHub features may not be available
- Upgrade GHES to latest version
- Contact maintainers if specific issues arise on your GHES version
Self-Hosted Runners
Constraint: Self-hosted runners require Node.js 24+. Impact: Older self-hosted runners may not have compatible Node.js version. Workaround:Email Limitations
SMTP Authentication
Constraint: Some email providers have strict security requirements. Impact:- Gmail requires App Passwords (not account password)
- Corporate email servers may block external SMTP
- 2FA-enabled accounts need special configuration
- Gmail: Use App Passwords
- Corporate email: Use external SMTP relay services
- Alternative: Use GitHub Actions notification actions instead of built-in SMTP
HTML Email Rendering
Constraint: Some email clients strip HTML styles and images. Impact:- Plain text fallback may not be as visually appealing
- Images from private repositories won’t load
- Accept plain text rendering in strict email clients
- Use markdown output for better plain text experience
Security Limitations
Token Storage
Constraint: PAT tokens must be stored as repository secrets. Impact:- Anyone with repository admin access can view/modify secrets
- Tokens cannot be scoped to specific workflows
- Use fine-grained PATs with minimal permissions
- Regularly rotate tokens
- Use organization-level secrets for shared access control
Data Privacy
Constraint: Data stored in public repository branches is publicly accessible. Impact:- Star counts and stargazer lists are public if data branch is public
- Cannot embed badges from private repositories externally
- Keep entire repository private if you need private star tracking
- Only track public repositories if privacy is a concern
- Use
track-stargazers: falseto avoid storing user information
Future Improvements
Many of these limitations are being considered for future releases. To request improvements:Feature Requests
Suggest new features or improvements
Discussions
Discuss ideas with the community
Contributing
Help build new features
Roadmap
See planned features and priorities
Despite these limitations, GitHub Star Tracker works well for the vast majority of use cases. Most limitations only affect edge cases or very large-scale users.