{"id":47751354,"url":"https://github.com/kibotu/git-history-timeline","last_synced_at":"2026-04-03T03:12:04.215Z","repository":{"id":332356272,"uuid":"1133432503","full_name":"kibotu/git-history-timeline","owner":"kibotu","description":"Visualize your complete GitHub contribution history across all repositories and branches. See every commit from every repo and every branch—not just the default branch. Self-contained HTML output perfect for portfolios and sharing.","archived":false,"fork":false,"pushed_at":"2026-01-13T14:23:37.000Z","size":22455,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-13T16:34:25.922Z","etag":null,"topics":["analytics","commit-history","contribution-graph","contributions","data-visualization","developer-tools","embeddable","git","github","github-api","github-pages","github-stats","html","nodejs","open-source","portfolio","self-hosted","static-site","timeline","visualization"],"latest_commit_sha":null,"homepage":"https://kibotu.github.io/git-history-timeline/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kibotu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-13T10:40:55.000Z","updated_at":"2026-01-13T14:23:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kibotu/git-history-timeline","commit_stats":null,"previous_names":["kibotu/git-history-timeline"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/kibotu/git-history-timeline","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kibotu%2Fgit-history-timeline","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kibotu%2Fgit-history-timeline/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kibotu%2Fgit-history-timeline/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kibotu%2Fgit-history-timeline/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kibotu","download_url":"https://codeload.github.com/kibotu/git-history-timeline/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kibotu%2Fgit-history-timeline/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31330666,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T02:17:30.558Z","status":"ssl_error","status_checked_at":"2026-04-03T02:17:30.071Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analytics","commit-history","contribution-graph","contributions","data-visualization","developer-tools","embeddable","git","github","github-api","github-pages","github-stats","html","nodejs","open-source","portfolio","self-hosted","static-site","timeline","visualization"],"created_at":"2026-04-03T03:12:03.530Z","updated_at":"2026-04-03T03:12:04.204Z","avatar_url":"https://github.com/kibotu.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Git History Timeline\n\nVisualize your complete GitHub contribution history. Every commit, every branch, every repository.\n\n[![Build and Deploy](https://github.com/kibotu/git-history-timeline/actions/workflows/deploy.yml/badge.svg)](https://github.com/kibotu/git-history-timeline/actions/workflows/deploy.yml)\n[![GitHub Pages](https://img.shields.io/badge/GitHub%20Pages-Live-success)](https://kibotu.github.io/git-history-timeline/)\n[![Node](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen.svg)](https://nodejs.org)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\n**[View Demo](https://kibotu.github.io/git-history-timeline/)** • **[Try Widget](examples/widget-demo.html)**\n\n## Why\n\nGitHub's profile shows contributions from default branches only. This shows **everything**.\n\n## Quick Start\n\n```bash\ngit clone https://github.com/kibotu/git-history-timeline.git\ncd git-history-timeline\nnpm install\necho \"GITHUB_TOKEN=ghp_your_token_here\" \u003e .env\n./run.sh\n```\n\nGet your token at [github.com/settings/tokens/new](https://github.com/settings/tokens/new) (needs `repo` and `read:user` scopes).\n\n## Screenshots\n\n| Light Mode | Dark Mode |\n|------------|-----------|\n| ![Light Mode](docs/screenshot-light.png) | ![Dark Mode](docs/screenshot-dark.png) |\n\n## What You Get\n\n### Static Timeline (`dist/index.html`)\nFull contribution history with theme toggle and stats.\n\n### Animated Widget (`dist/widget.html`)\nHigh-velocity animation through 16 years in 30 seconds.\n\n![Widget Animation](docs/widget-demo.gif)\n\n```html\n\u003ciframe \n  src=\"widget.html?duration=30\u0026theme=dark\"\n  width=\"100%\"\n  height=\"300\"\n  frameborder=\"0\"\u003e\n\u003c/iframe\u003e\n```\n\n**Widget parameters:**\n- `duration=30` — Animation duration in seconds\n- `theme=dark` — Color theme (`dark` or `light`)\n- `autoplay=true` — Start automatically\n- `speed=1.0` — Playback speed (0.1-10x)\n\nGenerate with: `npm run widget`\n\n## Features\n\n- All branches, not just main/master\n- Private repositories you own or collaborate on\n- Contributions to open source projects\n- Historical data going back years\n- Self-contained HTML (share or embed anywhere)\n- Animated widget with rolling 365-day window\n- Dark and light themes\n- Fully responsive (mobile to desktop)\n\n## Options\n\n```bash\n./run.sh --user octocat              # Different user\n./run.sh --repos owned               # Only repos you own\n./run.sh --repos forks               # Only forked repos\n./run.sh --repos contributions       # Only external contributions\n./run.sh --cached                    # Use cached data\n./run.sh --refresh                   # Force full refresh\n./run.sh --no-open                   # Don't open browser\n```\n\n## Embedding\n\n### Static Timeline\n\n```html\n\u003ciframe \n  src=\"https://yoursite.com/index-embed.html?theme=dark\"\n  width=\"100%\" \n  height=\"800\" \n  frameborder=\"0\"\u003e\n\u003c/iframe\u003e\n```\n\n### Animated Widget\n\n```html\n\u003ciframe \n  src=\"https://yoursite.com/widget.html?duration=30\u0026theme=dark\"\n  width=\"100%\"\n  height=\"300\"\n  frameborder=\"0\"\u003e\n\u003c/iframe\u003e\n```\n\nBoth support `?theme=dark` or `?theme=light`.\n\n## How It Works\n\n1. Fetches all your repositories via GitHub API\n2. Iterates through every branch in every repository\n3. Collects commit history with author matching\n4. Aggregates by date and calculates contribution levels\n5. Generates self-contained HTML with embedded data\n6. Caches results for faster subsequent runs\n\nFirst run takes ~5 minutes for large accounts. Subsequent runs take ~30 seconds (incremental updates only).\n\n## Technical Details\n\n- **Node.js 18+** required\n- **GitHub API** for data fetching\n- **Zero dependencies** for generated HTML\n- **Incremental caching** for performance\n- **Rate limit handling** with automatic retries\n- **Parallel processing** for multiple repositories\n- **60fps animation** using requestAnimationFrame\n- **Responsive design** with 6 breakpoints\n\n## Widget Specs\n\n- **16 years** of history in one animation\n- **5,844 days** of commit data\n- **257KB** self-contained file\n- **60 FPS** smooth animation\n- **52×7 grid** showing 365-day rolling window\n- **GitHub-style** contribution colors\n\n## Project Structure\n\n```\ndist/                       # Generated files (git-ignored)\n├── index.html              # Full page with theme toggle\n├── index-embed.html        # Embeddable version\n├── widget.html             # Animated widget (257KB)\n└── widget-data.json        # Widget data\n\ntemplates/                  # Build templates\n└── widget.html.template    # Widget HTML template\n\nexamples/                   # Demo and test files\n├── widget-demo.html        # Widget showcase\n└── widget-embed-test.html  # Embedding tests\n\ndocs/                       # GitHub Pages\n└── theme-demo.html         # Theme configuration demo\n```\n\n## Caching\n\nCache stored in `.cache/commits.json`. Delete to force full refresh or use `--refresh` flag.\n\n```bash\n./run.sh          # First run: ~5 min\n./run.sh          # Second run: ~30 sec (incremental)\n./run.sh --cached # Use cache, skip API calls\n./run.sh --refresh # Force full refresh\n```\n\n## Repository Filters\n\n| Filter | Description |\n|--------|-------------|\n| `all` | Everything (default) |\n| `owned` | Repos you own, excluding forks |\n| `forks` | Only forked repositories |\n| `contributions` | Only commits to repos you don't own |\n\n## Troubleshooting\n\n**No commits found:**\n- Check token has `repo` and `read:user` scopes\n- Verify token isn't expired\n- Check rate limits: [github.com/settings/tokens](https://github.com/settings/tokens)\n\n**Rate limit exceeded:**\n- Wait an hour or use `--cached` to work with existing data\n- Authenticated requests get 5,000/hour vs 60/hour unauthenticated\n\n**Widget not animating:**\n- Check browser console for errors\n- Verify browser supports ES6+ (Chrome 90+, Firefox 88+, Safari 14+)\n- Try `?autoplay=false` to debug\n\n## License\n\nMIT\n\n## Credits\n\nBuilt by [@kibotu](https://github.com/kibotu)\n\nInspired by GitHub's contribution graph but showing the complete picture.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkibotu%2Fgit-history-timeline","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkibotu%2Fgit-history-timeline","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkibotu%2Fgit-history-timeline/lists"}