npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@0xshariq/timeline

v3.1.0

Published

Generate beautiful commit timeline charts for GitHub, GitLab, Bitbucket, and SourceHut repositories with an interactive CLI - supports multiple chart types

Readme

� Repository Timeline Generator

Version Node License

Generate beautiful commit timeline charts for your Git repositories across multiple platforms.

Beautiful CLI • Multi-Platform • Interactive • Analytics


✨ Features

  • 🎨 15 Chart Types - 10 2D charts (Chart.js) + 5 3D charts (Three.js)
  • 🎨 Full Customization - Colors, gradients, borders, animations, scales, labels, tooltips, and legends
  • 🌐 Multi-Platform Support - GitHub, GitLab, Bitbucket, and SourceHut
  • 💻 Interactive CLI - Gradient banners, colored prompts, progress spinners
  • 📊 Smart Analytics - Statistics dashboard with top repositories
  • 🎯 Flexible Selection - Analyze all repos or choose specific ones
  • 🚀 Real-time Progress - Live updates while fetching commit data
  • 3D Visualizations - Modern Three.js powered 3D charts
  • 💾 Export Options - High-resolution PNG images
  • ⚙️ Config Management - Save default settings

📊 Detailed Chart Documentation: See docs/CHARTS.md for comprehensive information about all chart types, including visual examples, use cases, and best practices.


� Quick Start

Prerequisites

Install system dependencies for canvas rendering:

Ubuntu/Debian:

sudo apt update
sudo apt install -y build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev

macOS:

brew install pkg-config cairo pango libpng jpeg giflib librsvg

Fedora/RHEL:

sudo dnf install gcc-c++ cairo-devel pango-devel libjpeg-turbo-devel giflib-devel

Installation

Option 1: Install from npm (Recommended)

# Install globally
npm install -g @0xshariq/timeline

# If you get canvas errors, rebuild it:
npm rebuild canvas -g

# Run anywhere
timeline

Or with pnpm:

pnpm add -g @0xshariq/timeline

# If you get canvas errors:
pnpm rebuild canvas -g

timeline

Or with yarn:

yarn global add @0xshariq/timeline

# If you get canvas errors:
yarn global rebuild canvas

timeline

Note: Canvas automatically rebuilds on every run to ensure compatibility. This takes a few seconds initially. If you still encounter issues, see the Troubleshooting Guide.

Option 2: Install from Source

# Clone the repository
git clone https://github.com/0xshariq/timeline.git
cd timeline

# Install dependencies
pnpm install

# Run the CLI
pnpm start

# Or link globally
pnpm link --global
timeline  # Now you can use it anywhere!

Option 3: Run with npx (No Installation)

npx @0xshariq/timeline

💻 How to Use

🔧 Having issues? Check the Troubleshooting Guide for solutions to common problems including canvas errors and rate limits.

⚠️ Important: GitHub Authentication (Avoid Rate Limits)

GitHub API has strict rate limits:

  • Without authentication: 60 requests/hour ❌ (Will fail for most users!)
  • With authentication: 5,000 requests/hour ✅ (Recommended)

Step 1: Create a GitHub Personal Access Token

  1. Go to GitHub.com → Click your profile picture → Settings
  2. Scroll down to Developer settings (bottom of left sidebar)
  3. Click Personal access tokensTokens (classic)
  4. Click Generate new token (classic)
  5. Give it a name (e.g., "timeline-cli")
  6. Select scopes:
    • public_repo (required for public repositories)
    • repo (only if you want to access private repos)
  7. Click Generate token at the bottom
  8. ⚠️ Copy the token immediately (you won't see it again!)

Step 2: Set the Token

Option A: Temporary (Current Session Only)

export GITHUB_TOKEN=ghp_your_token_here
timeline -p github -u 0xshariq

Option B: Permanent (Recommended)

For Bash users (~/.bashrc):

echo 'export GITHUB_TOKEN=ghp_your_token_here' >> ~/.bashrc
source ~/.bashrc

For Zsh users (~/.zshrc):

echo 'export GITHUB_TOKEN=ghp_your_token_here' >> ~/.zshrc
source ~/.zshrc

For Fish users:

set -Ux GITHUB_TOKEN ghp_your_token_here

Step 3: Verify It's Working

# Check if token is set
echo $GITHUB_TOKEN

# Test with timeline
timeline -p github -u 0xshariq --verbose

Troubleshooting Rate Limits

If you still see "403: rate limit exceeded":

  1. Make sure token is set: echo $GITHUB_TOKEN
  2. Verify token has correct permissions on GitHub
  3. Wait for rate limit reset (error shows reset time)
  4. Try with fewer repositories: timeline -p github -u username -r "repo1,repo2"

Security Tips:

  • Never commit tokens to Git repositories
  • Use minimum required permissions
  • Rotate tokens periodically
  • Revoke unused tokens in GitHub settings

Basic Usage

# Interactive mode (recommended for beginners)
timeline

# Or with npx (no installation)
npx @0xshariq/timeline

Command-Line Flags

Timeline supports powerful command-line flags for automation:

timeline [options]
timeline <command> [options]

Global Options

| Flag | Alias | Description | Example | | ----------------------- | ------------- | --------------------------- | ------------------ | | -p, --platform <name> | | Git platform | -p github | | -u, --username <name> | | Username | -u octocat | | -r, --repos <list> | | Comma-separated repos | -r "repo1,repo2" | | -a, --all | | Analyze all repos | --all | | -t, --type <type> | -c, --chart | Chart type | -t line | | -v, --verbose | | Show detailed output | --verbose | | -q, --quiet | | Minimal output | --quiet | | --no-merge | | Exclude merge commits | --no-merge | | -o, --open | | Open chart after generation | --open | | -V, --version | | Show version | --version | | -h, --help | | Show help | --help |

Chart Customization Options

Colors & Gradients: | Flag | Description | Example | |------|-------------|---------| | --colors <colors> | Custom colors (hex, comma-separated) | --colors "#FF5733,#33FF57,#3357FF" | | --gradient | Enable gradient colors | --gradient | | --gradient-start <color> | Gradient start color | --gradient-start "#667eea" | | --gradient-end <color> | Gradient end color | --gradient-end "#764ba2" |

Borders: | Flag | Description | Example | |------|-------------|---------| | --border-width <width> | Border width (number) | --border-width 3 | | --border-color <color> | Border color (hex) | --border-color "#000000" |

Animations: | Flag | Description | Example | |------|-------------|---------| | --no-animate | Disable animations | --no-animate | | --animation-duration <ms> | Animation duration | --animation-duration 2000 | | --animation-easing <easing> | Easing function | --animation-easing "easeInOutCubic" |

Scales: | Flag | Description | Example | |------|-------------|---------| | --scale-type <type> | Scale type (linear, logarithmic, time) | --scale-type logarithmic | | --no-zero | Don't begin Y-axis at zero | --no-zero | | --no-grid | Hide grid lines | --no-grid |

Labels & Text: | Flag | Description | Example | |------|-------------|---------| | --no-labels | Hide labels | --no-labels | | --label-size <size> | Label font size | --label-size 14 | | --label-color <color> | Label color (hex) | --label-color "#333333" |

Tooltips: | Flag | Description | Example | |------|-------------|---------| | --no-tooltips | Disable tooltips | --no-tooltips | | --tooltip-bg <color> | Tooltip background color | --tooltip-bg "rgba(0,0,0,0.9)" |

Legend: | Flag | Description | Example | |------|-------------|---------| | --no-legend | Hide legend | --no-legend | | --legend-position <pos> | Position (top, bottom, left, right) | --legend-position right |

Refer customization guide CUSTOMIZATION.md

Subcommands

1. quick - Quick generation

timeline quick -p <platform> -u <username> [options]

# Examples
timeline quick -p github -u octocat
timeline quick -p gitlab -u johndoe -t pie
timeline quick -p bitbucket -u alice --no-merge

Required options:

  • -p, --platform - Platform name
  • -u, --username - Username

Optional:

  • -t, --type - Chart type (default: line)
  • --no-merge - Exclude merge commits

2. platforms - List platforms

timeline platforms

# Output:
# 📦 Supported Platforms:
#   🐙 github     - GitHub
#   🦊 gitlab     - GitLab
#   🪣 bitbucket  - Bitbucket
#   🎯 sourcehut  - SourceHut

3. charts - List chart types

timeline charts

# Output:
# 📊 Available Chart Types:
#   📈 line      - Timeline of commits over time
#   📊 bar       - Compare commits across repositories
#   🥧 pie       - Repository contribution percentage
#   🍩 doughnut  - Like pie chart with center hole
#   📡 radar     - Multi-dimensional comparison
#   🔥 heatmap   - Activity calendar (GitHub-style)

4. config - Show configuration

timeline config

# Shows package version, Node version, etc.

5. examples - Show usage examples

timeline examples

# Displays common usage patterns

Usage Examples

Interactive Mode

# Full interactive experience
timeline

You'll be prompted for:

You'll be prompted for:

  1. Platform Selection - Choose your Git platform
  2. Username - Enter your username
  3. Repository Selection - All or specific repos
  4. Chart Type - Choose visualization type
  5. Options - Verbosity, merge commits, auto-open

Quick Commands

# GitHub user with line chart (default)
timeline quick -p github -u octocat

# GitLab user with pie chart
timeline quick -p gitlab -u johndoe -t pie

# Bitbucket with bar chart, no merge commits
timeline quick -p bitbucket -u alice -t bar --no-merge

With Flags (Skip Prompts)

# Specific platform and user
timeline -p github -u octocat

# All repos with verbose output
timeline -p github -u octocat --all --verbose

# Specific repos with heatmap
timeline -p gitlab -u johndoe -r "project1,project2,project3" -t heatmap

# Pie chart, open automatically
timeline -p bitbucket -u bob --all -t pie --open

# Bar chart without merge commits, quiet mode
timeline -p github -u charlie --all -t bar --no-merge --quiet

Chart Customization Examples

# Custom colors (3 repositories with specific colors)
timeline -p github -u octocat -t bar --colors "#FF5733,#33FF57,#3357FF"

# Gradient colors for line chart
timeline -p github -u octocat -t line --gradient --gradient-start "#667eea" --gradient-end "#764ba2"

# Thick borders with custom color
timeline -p github -u octocat -t pie --border-width 5 --border-color "#FF0000"

# No animations for faster generation
timeline -p github -u octocat -t bar --no-animate

# Logarithmic scale for large value differences
timeline -p github -u octocat -t line --scale-type logarithmic

# Large labels with custom color
timeline -p github -u octocat -t bar --label-size 16 --label-color "#FF6B6B"

# No grid lines, no legend for clean look
timeline -p github -u octocat -t line --no-grid --no-legend

# Right-positioned legend
timeline -p github -u octocat -t pie --legend-position right

# Combine multiple customizations
timeline -p github -u octocat -t bar \
  --colors "#FF6B6B,#4ECDC4,#45B7D1,#FFA07A,#98D8C8" \
  --border-width 3 \
  --label-size 14 \
  --no-grid \
  --animation-duration 2000

# Perfect for presentations (clean, no tooltips)
timeline -p github -u octocat -t pie \
  --colors "#667eea,#764ba2,#f093fb,#4facfe" \
  --no-tooltips \
  --label-size 16 \
  --border-width 0

# Heatmap with custom colors
timeline -p github -u octocat -t heatmap \
  --gradient \
  --gradient-start "#9be9a8" \
  --gradient-end "#216e39"

Automation & CI/CD

# Perfect for scripts and automation
timeline quick -p github -u $GIT_USERNAME -t line

# Generate multiple charts
for type in line bar pie; do
  timeline quick -p github -u octocat -t $type
done

# Environment variables
export TIMELINE_PLATFORM=github
export TIMELINE_USER=octocat
timeline quick -p $TIMELINE_PLATFORM -u $TIMELINE_USER

Interactive Workflow

When you run timeline in interactive mode:

Step 1: Platform

Step 4: Chart Type

? Select chart type: (Use arrow keys)
❯ 📈 Line Chart      - Timeline of commits over time
  📊 Bar Chart       - Compare commits across repositories
  🥧 Pie Chart       - Repository contribution percentage
  🍩 Doughnut Chart  - Like pie chart with center hole
  📡 Radar Chart     - Multi-dimensional repository comparison
  🔥 Heatmap         - Activity calendar (GitHub-style)

Step 5: Options

Step 5: Options

? Select options: (Press space to select)
❯ ◉ Show detailed progress
  ◉ Include merge commits
  ◯ Open chart after generation

Step 6: Processing

Step 6: Processing

──────────────────────────────────────────────────

⠼ Processing awesome-project (3/12)
ℹ Found 12 repositories
✓ my-library: 89 commits
✓ cli-tool: 143 commits
⚠ Skipped empty-repo: No commits found
✓ awesome-project: 67 commits
...

Step 7: Results

Statistics Summary:

📊 Statistics Summary
─────────────────────
Total Commits: 847
Repositories: 12
Date Range: 2023-01-15 to 2024-11-02 (657 days)
Average per Repo: 70 commits
Average per Day: 1.29 commits

🏆 Top Repositories:
  1. cli-tool: 143 commits
  2. my-library: 89 commits
  3. awesome-project: 67 commits
  4. web-app: 58 commits
  5. api-server: 52 commits

Success Message:

╭─────────────────────────────────────────────╮
│                                             │
│   ✨ Chart saved as timeline.png ✨        │
│                                             │
│   You can find it in the current directory │
│                                             │
╰─────────────────────────────────────────────╯

🌐 Supported Platforms

| Platform | Support | API Version | Rate Limit | | ---------------- | ------- | ----------- | ---------- | | GitHub 🐙 | ✅ Full | REST v3 | 60/hour | | GitLab 🦊 | ✅ Full | REST v4 | 10/sec | | Bitbucket 🪣 | ✅ Full | API 2.0 | Varies | | SourceHut 🎯 | ✅ Full | GraphQL | Check docs |

Increase Rate Limits (Optional)

Add authentication tokens to provider files for higher limits:

GitHub (src/providers/github.js):

async fetchRepos() {
  const res = await fetch(`${this.baseUrl}/users/${this.username}/repos`, {
    headers: { 'Authorization': 'token YOUR_GITHUB_TOKEN' }
  });
  // ...
}

GitLab (src/providers/gitlab.js):

headers: { 'PRIVATE-TOKEN': 'YOUR_GITLAB_TOKEN' }

📈 Chart Types

2D Charts (Chart.js)

| Chart Type | Best For | Output | |------------|----------|--------| | 📈 Line | Timeline trends, activity patterns | timeline-line.png | | 📊 Bar | Repository comparison, totals | timeline-bar.png | | 🥧 Pie | Contribution percentages | timeline-pie.png | | 🍩 Doughnut | Modern contribution breakdown | timeline-doughnut.png | | 📡 Radar | Multi-metric comparison | timeline-radar.png | | 🔥 Heatmap | Daily activity calendar | timeline-heatmap.png | | 🎯 Polar Area | Radial visualization | timeline-polarArea.png | | ⚡ Scatter | Pattern detection | timeline-scatter.png | | � Bubble | Multi-dimensional data | timeline-bubble.png | | 🎨 Mixed | Combined line + bar | timeline-mixed.png |

3D Charts (Three.js)

| Chart Type | Best For | Output | Status | |------------|----------|--------|--------| | � Bar 3D | Impressive presentations | timeline-bar3d.png | ✅ Available | | 📈 Line 3D | 3D trend visualization | timeline-line3d.png | 🚧 Coming Soon | | 🔮 Scatter 3D | Multi-dimensional patterns | timeline-scatter3d.png | 🚧 Coming Soon | | 🌊 Surface 3D | Activity landscapes | timeline-surface3d.png | 🚧 Coming Soon | | � Bubble 3D | Four-dimensional data | timeline-bubble3d.png | 🚧 Coming Soon |

📚 Full Documentation: For detailed information about each chart type, including visual characteristics, features, and usage examples, see docs/CHARTS.md

Quick Examples

# 2D Line chart (default)
timeline -p github -u octocat

# 3D Bar chart
timeline -p github -u octocat -t bar3d

# Heatmap for daily patterns
timeline -p github -u octocat -t heatmap

# Pie chart with custom colors
timeline -p github -u octocat -t pie --colors "#FF6B6B,#4ECDC4,#45B7D1"

🏗️ Project Structure

repo-timeline/
├── src/
│   ├── index.js              # CLI entry point (styled prompts)
│   ├── timeline.js           # Core logic & orchestration
│   ├── chart.js              # Chart.js configuration
│   ├── config.default.js     # Default settings
│   ├── providers/            # Platform-specific APIs
│   │   ├── github.js         # GitHub integration
│   │   ├── gitlab.js         # GitLab integration
│   │   ├── bitbucket.js      # Bitbucket integration
│   │   └── sourcehut.js      # SourceHut integration
│   └── utils/                # Helper utilities
│       ├── colors.js         # Color schemes
│       └── stats.js          # Statistics calculations
├── index.js                  # Entry point
├── package.json              # Dependencies & scripts
└── README.md                 # Documentation

🎨 CLI Features

Visual Components

| Feature | Description | | -------------------- | ---------------------------------- | | 🎨 Gradient Banners | Eye-catching startup screen | | 🌈 Colored Prompts | Cyan questions, gray feedback | | ⏳ Progress Spinners | Real-time animated feedback | | 📦 Styled Boxes | Important messages in frames | | ✓ Status Icons | Success (✓), Info (ℹ), Warning (⚠) | | 🎯 Emoji Indicators | Visual context throughout |

Interactive Options

// Available configurations
{
  verbose: true,           // Show detailed progress
  includeMerges: true,     // Include merge commits
  openChart: false         // Auto-open after generation
}

🔧 Development

Run in Development Mode

pnpm run dev  # Auto-reload on file changes

Adding New Platforms

  1. Create Provider (src/providers/newplatform.js):
export class NewPlatformProvider {
  constructor(username) {
    this.username = username;
    this.baseUrl = "https://api.newplatform.com";
  }

  async fetchRepos() {
    // Return array of repo names
  }

  async fetchAllCommits(repo, config) {
    // Return array of commits
    // Format: [{ date, author, message }, ...]
  }
}
  1. Register in Timeline (src/timeline.js):
import { NewPlatformProvider } from "./providers/newplatform.js";

const providers = {
  // ...existing
  newplatform: NewPlatformProvider,
};
  1. Add to CLI Menu (src/index.js):
choices: [
  // ...existing
  { name: "🎯 NewPlatform", value: "newplatform" },
];

Dependencies

| Package | Purpose | | ------------------- | ----------------------- | | @inquirer/prompts | Interactive CLI prompts | | chalk | Terminal styling | | ora | Progress spinners | | boxen | Terminal boxes | | gradient-string | Gradient text | | chart.js | Chart generation | | canvas | Node canvas renderer | | node-fetch | HTTP requests |


🐛 Troubleshooting

Refer the troubleshooting guide TROUBLESHOOTING.md


📝 Scripts

# For users
npm install -g @0xshariq/timeline  # Install globally
npx @0xshariq/timeline              # Run without installing
timeline                            # Run if installed globally

# For developers
pnpm start          # Run the CLI
pnpm run dev        # Run with auto-reload
node index.js       # Direct execution

📦 Publishing to npm

For maintainers:

# Login to npm
npm login

# Bump version
npm version patch  # or minor, or major

# Publish (scoped package)
npm publish --access public

# Verify
npm view @0xshariq/timeline

� License

ISC License - Feel free to use and modify!


🤝 Contributing

Contributions welcome! Ideas:

  • 🔐 Add built-in auth token support
  • 📊 More chart types (bar, pie)
  • 🎨 Additional color schemes
  • 📁 Export to JSON/CSV
  • 🌍 More Git platforms
  • 📱 Generate HTML reports

🙏 Acknowledgments

Built with amazing open-source tools:


Made with ❤️ and ☕

Happy Analyzing! 🚀