Node.js Twitter API

npm install mtwitter
75 downloads in the last day
186 downloads in the last week
465 downloads in the last month

Node.js Twitter API

Build Status NPM version Dependency Status

Versioning: Back to semver!

Instantiation & Keys

mtwitter cannot currently help with obtaining access tokens from Twitter, you'll have to do this yourself. For testing and simple apps, the keys can be obtained from after setting up a new App.

var Twitter = require('mtwitter');

Normal (client) authentication

var twitter = new Twitter({
  consumer_key: 'Twitter',
  consumer_secret: 'API',
  access_token_key: 'keys',
  access_token_secret: 'go here'

App-only authentication

var twitter = new Twitter({
  consumer_key: config.key,
  consumer_secret: config.secret,
  application_only: true

REST Interface

The REST interface is fully managed, which means it (will) transparently handles rate-limiting (in a more intelligent fashion than just waiting 15 minutes when an HTTP 429 is hit), and also takes care of fetching and refreshing configuration data as recommended by Twitter.


  {key: 'value'},
function logResponse(error, data, response) {
  console.log('Error? ', error);
  console.log('Parsed object of data: ', data);
  console.log('Raw HTTP response: ', response);
  '/favorites/create',      // URL. Don't use https:// ones
  'id=317050755691454464',  // Body content (can be a string or hashmap)
                            // Content-Type (omit to use default)
  function() { ... }        // Callback has the same signature as above

Additional examples

// Get a user's timeline
twit.get('statuses/home_timeline', {screen_name: '_matthewpalmer'}, function(err, item) {
  console.log(err, item);

// Search for a phrase
twit.get('search/tweets', {q: 'node.js'}, function(err, item) {
  console.log(err, item);

// Post a new status
var content = {status: 'Maybe he\'ll finally find his keys. /@peterfalk'};'statuses/update', content, function(err, item) {
  console.log(err, item);


For the moment, only "raw" access is available:
  {delimited: 'length'},
  // The above arguments are as for .rest.queueRequest()
  // i.e. the third argument has to be a {content: ...}
  // for POST. The URL has to include https://...

  process.stdout // Provide a stream to pipe to, here STDOUT

Community & Contributions

Originally forked from @AvianFlu's inactive repo, but reworked heavily, taking inspiration from many people and their attempts at making it better. Old (pre-rewrite) contributors can be found in HISTORICAL. Contributors to the present iteration can be found in the package.json.

License: Public Domain or CC0.
Style guide: passcod/node-style-guide.
IRC Channel: #mtwitter on Freenode.


See for details

  • Topical branches and standard PR etiquette is preferred.
  • You need to formally agree to release your contribution.
  • Both linting and testing should pass (the Travis build will fail a PR if there are linting errors):

    $ npm test
    $ npm run-script lint
npm loves you