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

commitmnt

v1.1.4

Published

Copy your gitlab and bitbucket commits to a new, publishable github repo

Readme

Commitment (commitmnt)

CircleCI codecov

Do you work for a company that uses Gitlab or Bitbucket? Are you worried that people are looking at your cold 🥶, barren 🌵 husk of a Github activity graph and judging you; wondering if you even code anymore? Commitment is a node.js library that helps you copy your commit history from a list of source repositories into a new repository you can then push up to Github.

There are several projects floating around Github that will fake you a commit history in a fresh repo, but that seemed bogus and so this library was born. No data is leaked from the source repos other than the dates of your commits. Once you copy the commits from your source repos to your new repo, you can then push the new repo up to Github and make it private (or don't!) and bingo. You now have a big green beautiful.. and most importantly accurate Github activity graph 📈.

This project is intended to be silly and fun. Please don't take it too seriously 👋.

Old 😢

New 😄

Features & Limitations

  • ✔️ Copy commits from source repos to your current repo
    • Basic, easy setup to copy a list of source repos
    • Advanced setup to take fine grained control of the copy process
  • ✔️ Incremental copies - re-running the library only copies commits dated after the last commit copied in the previous run
  • ✔️ Cool green github graph (⬅️ most important)
  • ❌ Unable to copy things other than commits that Gitlab/Github/Bitbucket might otherwise consider "activity" (eg. PRs, Issues)

Installation & Setup

# create a new project
$ mkdir work-history
$ cd work-history

# initialize a fresh git repo
$ git init

# install the library
$ yarn init
$ yarn add commitmnt

$ touch index.js && code ./

Usage

The library exposes two functions to help you copy commits from your source repos to your destination repo.

Basic

commitment(config, options) is intended to be a quick out of the box solution to copy commits from a list of source repos.

// in index.js
import { commitment } from 'commitmnt';

async function main() {
  const config = {
    branch: 'main',
    repositories: [
      {
        author: 'Chris Carrick',
        branch: 'main',
        path: '/Users/chriscarrick/Projects/project1',
      },
      {
        author: 'Chris Carrick',
        branch: 'main',
        path: '/Users/chriscarrick/Projects/project1',
      },
    ],
    rootDir: process.cwd(),
  };

  await commitment(config); // done 😃
}

main();

Advanced

initCommitment(config) is a function that returns you some utilities you can use to read and copy commits from source repos. These utilities are exposed to help you in case you want to do something a little different (eg. only copy commits that occur on weekdays).

The following is an example of combining the provided utilities to only copy commits from a source repo that occurred on weekdays.

// in index.js
import { initCommitment } from 'commitmnt';
import { isWeekend } from 'date-fns';

async function main() {
  const config = {
    branch: 'main',
    rootDir: process.cwd(),
  };

  const { getCommitsForRepo, copyCommitsToRepo } = await initCommitment(config);

  const commitDates = await getCommitsForRepo({
    author: 'Chris Carrick',
    branch: 'main',
    path: '/Users/chriscarrick/Projects/project1',
  });

  const weekdayCommits = commitDates.filter((date) => !isWeekend(new Date(date)));

  await copyCommitsToRepo(weekdayCommits); // done 😃
}

main();

Configuration

commitment(config, options)

interface Config {
  // the branch of the current repo to commit to
  branch: string;
  // an *absolute* path to the current directory
  path: string;
  // a list of source repos to copy from
  repositories: Repository[];
}

interface Options {
  // option to silence progress output from the library
  quiet: boolean;
}

interface Repository {
  // some identifier to help the library match your
  // commits by commit author such as "Chris Carrick" or "[email protected]"
  // this can also be a pattern -> "\\(Chris\\|Christopher\\) Carrick"
  author: string;
  // the branch of the source repo to copy commits from
  branch: string;
  // an *absolute* path to the source repo directory
  path: string;
}

initCommitment(config)

interface Config {
  // the branch of the current repo to commit to
  branch: string;
  // an *absolute* path to the current directory
  path: string;
}
Example
// commitment config & options
const config = {
  branch: 'main',
  repositories: [
    {
      author: 'Chris Carrick',
      branch: 'main',
      path: '/Users/chriscarrick/Projects/project1',
    },
    {
      author: 'Chris Carrick',
      branch: 'main',
      path: '/Users/chriscarrick/Projects/project1',
    },
  ],
  rootDir: process.cwd(),
};

const options = { quiet: true };

// initCommitment config
const config = {
  branch: 'main',
  rootDir: process.cwd(),
};