Catalog npm
Back to packageRELEASE DETAILS

3.1.1

npm

@0xshariq/timeline

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

analyticsbar-chartbitbucketchartclicommitsgitgithubgitlabheatmappie-chartsourcehutstatisticstimelinevisualization
Published26 Mar 2026
Direct dependencies18
Transitive dependenciesNot calculated

README

Current package documentation

� 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

# 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 tokens → Tokens (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

FlagAliasDescriptionExample
-p, --platform <name>Git platform-p github
-u, --username <name>Username-u octocat
-r, --repos <list>Comma-separated repos-r "repo1,repo2"
-a, --allAnalyze all repos--all
-t, --type <type>-c, --chartChart type-t line
-v, --verboseShow detailed output--verbose
-q, --quietMinimal output--quiet
--no-mergeExclude merge commits--no-merge
-o, --openOpen chart after generation--open
-V, --versionShow version--version
-h, --helpShow help--help

Chart Customization Options

Colors & Gradients:

FlagDescriptionExample
--colors <colors>Custom colors (hex, comma-separated)--colors "#FF5733,#33FF57,#3357FF"
--gradientEnable gradient colors--gradient
--gradient-start <color>Gradient start color--gradient-start "#667eea"
--gradient-end <color>Gradient end color--gradient-end "#764ba2"

Borders:

FlagDescriptionExample
--border-width <width>Border width (number)--border-width 3
--border-color <color>Border color (hex)--border-color "#000000"

Animations:

FlagDescriptionExample
--no-animateDisable animations--no-animate
--animation-duration <ms>Animation duration--animation-duration 2000
--animation-easing <easing>Easing function--animation-easing "easeInOutCubic"

Scales:

FlagDescriptionExample
--scale-type <type>Scale type (linear, logarithmic, time)--scale-type logarithmic
--no-zeroDon't begin Y-axis at zero--no-zero
--no-gridHide grid lines--no-grid

Labels & Text:

FlagDescriptionExample
--no-labelsHide labels--no-labels
--label-size <size>Label font size--label-size 14
--label-color <color>Label color (hex)--label-color "#333333"

Tooltips:

FlagDescriptionExample
--no-tooltipsDisable tooltips--no-tooltips
--tooltip-bg <color>Tooltip background color--tooltip-bg "rgba(0,0,0,0.9)"

Legend:

FlagDescriptionExample
--no-legendHide 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

PlatformSupportAPI VersionRate Limit
GitHub 🐙✅ FullREST v360/hour
GitLab 🦊✅ FullREST v410/sec
Bitbucket 🪣✅ FullAPI 2.0Varies
SourceHut 🎯✅ FullGraphQLCheck 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 TypeBest ForOutput
📈 LineTimeline trends, activity patternstimeline-line.png
📊 BarRepository comparison, totalstimeline-bar.png
🥧 PieContribution percentagestimeline-pie.png
🍩 DoughnutModern contribution breakdowntimeline-doughnut.png
📡 RadarMulti-metric comparisontimeline-radar.png
🔥 HeatmapDaily activity calendartimeline-heatmap.png
🎯 Polar AreaRadial visualizationtimeline-polarArea.png
⚡ ScatterPattern detectiontimeline-scatter.png
� BubbleMulti-dimensional datatimeline-bubble.png
🎨 MixedCombined line + bartimeline-mixed.png

3D Charts (Three.js)

Chart TypeBest ForOutputStatus
� Bar 3DImpressive presentationstimeline-bar3d.png✅ Available
📈 Line 3D3D trend visualizationtimeline-line3d.png🚧 Coming Soon
🔮 Scatter 3DMulti-dimensional patternstimeline-scatter3d.png🚧 Coming Soon
🌊 Surface 3DActivity landscapestimeline-surface3d.png🚧 Coming Soon
� Bubble 3DFour-dimensional datatimeline-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

FeatureDescription
🎨 Gradient BannersEye-catching startup screen
🌈 Colored PromptsCyan questions, gray feedback
⏳ Progress SpinnersReal-time animated feedback
📦 Styled BoxesImportant messages in frames
✓ Status IconsSuccess (✓), Info (ℹ), Warning (⚠)
🎯 Emoji IndicatorsVisual 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

PackagePurpose
@inquirer/promptsInteractive CLI prompts
chalkTerminal styling
oraProgress spinners
boxenTerminal boxes
gradient-stringGradient text
chart.jsChart generation
canvasNode canvas renderer
node-fetchHTTP 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! 🚀

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 18

Native requirements
18 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
@inquirer/prompts
Environment
{
  "local_name": "@inquirer/prompts",
  "alias": false,
  "peer_metadata": null
}
^7.0.1runtime
@types/three
Environment
{
  "local_name": "@types/three",
  "alias": false,
  "peer_metadata": null
}
0.181.0runtime
boxen
Environment
{
  "local_name": "boxen",
  "alias": false,
  "peer_metadata": null
}
^8.0.1runtime
canvas
Environment
{
  "local_name": "canvas",
  "alias": false,
  "peer_metadata": null
}
^3.2.0runtime
chalk
Environment
{
  "local_name": "chalk",
  "alias": false,
  "peer_metadata": null
}
^5.3.0runtime
chart.js
Environment
{
  "local_name": "chart.js",
  "alias": false,
  "peer_metadata": null
}
^4.4.7runtime
chartjs-chart-matrix
Environment
{
  "local_name": "chartjs-chart-matrix",
  "alias": false,
  "peer_metadata": null
}
^2.0.1runtime
chartjs-node-canvas
Environment
{
  "local_name": "chartjs-node-canvas",
  "alias": false,
  "peer_metadata": null
}
5.0.0runtime
chartjs-plugin-datalabels
Environment
{
  "local_name": "chartjs-plugin-datalabels",
  "alias": false,
  "peer_metadata": null
}
^2.2.0runtime
commander
Environment
{
  "local_name": "commander",
  "alias": false,
  "peer_metadata": null
}
^12.1.0runtime
date-fns
Environment
{
  "local_name": "date-fns",
  "alias": false,
  "peer_metadata": null
}
^4.1.0runtime
gradient-string
Environment
{
  "local_name": "gradient-string",
  "alias": false,
  "peer_metadata": null
}
^3.0.0runtime
node-fetch
Environment
{
  "local_name": "node-fetch",
  "alias": false,
  "peer_metadata": null
}
^3.3.2runtime
ora
Environment
{
  "local_name": "ora",
  "alias": false,
  "peer_metadata": null
}
^9.0.0runtime
three
Environment
{
  "local_name": "three",
  "alias": false,
  "peer_metadata": null
}
0.181.0runtime
typescript
Environment
{
  "local_name": "typescript",
  "alias": false,
  "peer_metadata": null
}
5.9.3runtime
@types/gradient-string
Environment
{
  "local_name": "@types/gradient-string",
  "alias": false,
  "peer_metadata": null
}
1.1.6development
@types/node
Environment
{
  "local_name": "@types/node",
  "alias": false,
  "peer_metadata": null
}
24.9.2development

Distribution files

1 collected
Distribution 1

Source distribution

Source file
Checksums from source
{
  "integrity": "sha512-PHJhdnXAJ89OYHUzpVsoWR+LNutarJthVvOpJJJj7cadKm0SHgJh2BqfX33uU0aQ9LiH/VZl32VRhurTI7Sp+A==",
  "shasum": "80a8c6a63fcac33d18be93c09838ea92d2e68f6e",
  "tarball": "https://registry.npmjs.org/@0xshariq/timeline/-/timeline-3.1.1.tgz",
  "fileCount": 67,
  "unpackedSize": 202616,
  "signatures": [
    {
      "keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U",
      "sig": "MEUCIQD5TWoqAEKtr+NFW7aMhkwZdszcjrk78U+GbOHId3Jv6wIgM3xw7zKf01G66HGVwnv43KAcDfTF/T/H14sWFhVDI9A="
    }
  ]
}

Repository

PENDING
0xshariq/timeline

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 21 Oct, 11:26 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:f3a61ef8a6564df16be5955b4e364181ca88f3fe573e30d8632257941c8526f5

Other collected versions

3.1.03 Nov3.0.03 Nov2.1.03 Nov2.0.02 NovView all collected versions →