Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including gist-db with all npm packages installed. Try it out:

var gistDb = require("gist-db")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

gist-db v0.1.4

Treat your gist account like a database


Treat your gist account like a database. Powered by TaffyDB and Github.


npm install gist-db


var config = {

var GISTDB = require("gist-db");

var _db = GISTDB(config);

_db.event.on('refreshing', function(){
  console.log("LETS DO THIS");

_db.event.on('refreshed', function(err){

File Object

    id = gist_id+"_"+filename,
    filename = filename,
    gist_id = gist_id,
    error: undefined,
    type: "mime type",
    language: "language the file is written in",
    raw_url: "https path to the raw text version of the file",
    size: numeric size of the file,
    gist: {
        id: gist_id
        public: boolean,
        created_at: date object,
        updated_at: date object,
        description: "the gist description"


Please refer to the TaffyDB docs for more details

GISTDB(config, fileInit, fileSave)

Create a new gist-db.


  • config: A settings object.

      Required: {
      Defaults: {
          refreshMin: 10,
          github: {
              per_page: 100,
              timeout: 5000,
              version: "3.0.0"
          local: {
              save: "NEVER", //NEVER, ON_REFRESH, ALWAYS 
              location: undefined
      Available: {
          refreshMin: 10,
          github: {
              per_page: 100,
              timeout: 5000
              version: "3.0.0",
              authenticate: {
                  type: "basic or oauth",
                  username: "your_username_if_basic",
                  password: "your_password_if_basic",
                  token: "your_oauth_token_if_oauth"
              local: {
                  save: "NEVER OR NEVER OR ON_REFRESH OR ALWAYS"
                  location: "path and filename"
  • fileInit: function(file). A function that returns the file obj if it should be added to the DB and undefined if it should be excluded.

  • fileSave: function(file, callback). A function that allows for further parameter work on files after the raw data has been received. A functioning implementation of this MUST pass the file object as a parameter to callback to save changes to the DB. Note: this will perform an update to the database.


  • TaffyDB: Yes
  • Returns: All rows that meet the passed criteria. Not passing an object, will return all rows.


Inserts records into the database.

  • TaffyDB: Yes
  • Returns: A query pointing to the inserted records


Full use of the github module passed the github subsection of your config file.


An implementation of require("events").EventEmitter

_db.event.on('refreshing', function(){})

Use to be notified when gist-db is connecting gist for a refresh.

_db.event.on('refreshed', function(err){})

Use to be notified when gist-db is done its current refresh. If err is set, this refresh was ended due to error.

_db.event.on('file_error', function(err, file){})

Use to be notified of errors in gathering data on the gist files.


  • err: The error object that triggered this event
  • file: The file object that was being gathered when the error occurred

_db.event.on('github_error', function(err, res){})

Use to be notified of errors when connecting with github.


  • err: the github module error object that triggered this event
  • res: The github module response object. Might contain good data about the error.



  • Added gist object to file for meta data on the gist the file is from.
  • Changed database refresh to use merge rather than insert so items won't duplicate
  • Added check just before getRawFile and the add to database that checks if the file is in the db and if it is compares if the gist.updated_at of the new file is newer than that of the old file. This was can lower the number of calls to github and speed up the code a bit.
  • Changed github module to be my fork which supports since on the gist endpoints. Will change back once a new version of node-github is in NPM
  • Added since param to github calls, so we will only return gists added/edited since our last call.


  • Added github authentication and thus the ability to access private gists


  • Added userFileSave function, which allows users to do custom (async) actions to a file after the raw data has been pulled in.


  • Request was being requried before each use, which was causing a timeout problems. Updated the code to use a single request object.

Things to be done


  • Add local file loading
  • Add local file saving
  • Add tests


  • Add Update gist.github
  • Add Insert gist.github
  • Add Delete gist.github


All code not otherwise specified is Copyright 2013 Matthew Chase Whittemore and is released under the MIT License.

All code found in the node_modules directory is Copyrighted by its creators. Please see each module for further details.


RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free