DefinitelyTyped icon, indicating that this package has TypeScript declarations provided by the separate @types/nodegit package

    0.27.0 • Public • Published


    Node bindings to the libgit2 project.

    Actions Status

    Stable (libgit2@v0.28.3): 0.28.3

    Have a problem? Come chat with us!

    Visit to sign up, then join us in #nodegit.

    Maintained by

    Tyler Ang-Wanek @twwanek with help from tons of awesome contributors!

    Alumni Maintainers

    Tim Branyen @tbranyen, John Haley @johnhaley81, Max Korp @maxkorp, Steve Smith @orderedlist, Michael Robinson @codeofinterest, and Nick Kallen @nk

    API Documentation.

    Getting started.

    NodeGit will work on most systems out-of-the-box without any native dependencies.

    npm install nodegit

    If you receive errors about libstdc++, which are commonly experienced when building on Travis-CI, you can fix this by upgrading to the latest libstdc++-4.9.

    In Ubuntu:

    sudo add-apt-repository ppa:ubuntu-toolchain-r/test
    sudo apt-get update
    sudo apt-get install libstdc++-4.9-dev

    In Travis:

          - ubuntu-toolchain-r-test
          - libstdc++-4.9-dev

    In CircleCI:

          - sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
          - sudo apt-get update
          - sudo apt-get install -y libstdc++-4.9-dev

    If you receive errors about lifecycleScripts preinstall/install you probably miss libssl-dev In Ubuntu:

    sudo apt-get install libssl-dev

    You will need the following libraries installed on your linux machine:

    • libpcre
    • libpcreposix
    • libkrb5
    • libk5crypto
    • libcom_err

    When building locally, you will also need development packages for kerberos and pcre, so both of these utilities must be present on your machine:

    • pcre-config
    • krb5-config

    If you are still encountering problems while installing, you should try the Building from source instructions.

    API examples.

    Cloning a repository and reading a file:

    var Git = require("nodegit");
    // Clone a given repository into the `./tmp` folder.
    Git.Clone("", "./tmp")
      // Look up this known commit.
      .then(function(repo) {
        // Use a known commit sha from this repository.
        return repo.getCommit("59b20b8d5c6ff8d09518454d4dd8b7b30f095ab5");
      // Look up a specific file within that commit.
      .then(function(commit) {
        return commit.getEntry("");
      // Get the blob contents from the file.
      .then(function(entry) {
        // Patch the blob to contain a reference to the entry.
        return entry.getBlob().then(function(blob) {
          blob.entry = entry;
          return blob;
      // Display information about the blob.
      .then(function(blob) {
        // Show the path, sha, and filesize in bytes.
        console.log(blob.entry.path() + blob.entry.sha() + blob.rawsize() + "b");
        // Show a spacer.
        console.log(Array(72).join("=") + "\n\n");
        // Show the entire file.
      .catch(function(err) { console.log(err); });

    Emulating git log:

    var Git = require("nodegit");
    // Open the repository directory."tmp")
      // Open the master branch.
      .then(function(repo) {
        return repo.getMasterCommit();
      // Display information about commits on master.
      .then(function(firstCommitOnMaster) {
        // Create a new history event emitter.
        var history = firstCommitOnMaster.history();
        // Create a counter to only show up to 9 entries.
        var count = 0;
        // Listen for commit events from the history.
        history.on("commit", function(commit) {
          // Disregard commits past 9.
          if (++count >= 9) {
          // Show the commit sha.
          console.log("commit " + commit.sha());
          // Store the author object.
          var author =;
          // Display author information.
          console.log("Author:\t" + + " <" + + ">");
          // Show the commit date.
          console.log("Date:\t" +;
          // Give some space and show the message.
          console.log("\n    " + commit.message());
        // Start emitting events.

    For more examples, check the examples/ folder.

    Unit tests.

    You will need to build locally before running the tests. See above.

    npm test


    npm i nodegit


    DownloadsWeekly Downloads






    Unpacked Size

    23.8 MB

    Total Files


    Last publish


    • tbranyen
    • johnhaley81
    • maxkorp
    • faceleg
    • implausibility
    • ianhattendorf