node package manager
Love JavaScript? Your insights can make it even better. Take the 2017 JavaScript Ecosystem Survey »



simple cross-platform event emitter based on EventEmitter


Create an emitter instance

var energy = require('energy')
var emitter = energy()

Or use new if you prefer. Either way works :)

var energy = require('energy')
var emitter = new energy()



  • emitter refers to an energy() object
  • event refers to an event name
  • listener refers to a function that listens to an event

emitter.on(event, listener)

  • Add listener for event
  • @return emitter, listener?, quota?)

  • Remove listener(s)
    • .off() removes all listeners for all events
    • .off(event) removes all event listeners
    • .off(event, listener) removes all occurrences of event listener
    • .off(event, listener, quota) remove quota occurrences of event listener
  • @return emitter

emitter.emit(event, ...args)

  • Fire event listeners (in sequence) with the supplied arguments
  • Listeners run in the context of emitter
  • @return integer (number of listeners that fired)

emitter.once(event, listener)

  • Add a one-time event listener
  • @return emitter


  • Clone an emitter at its current state
  • @return a new emitter


  • Access the listeners array for the specified event
  • @return array (reference)


  • Reinitialize an emitter
  • @return emitter

  • Make target emitter-like based on emitter as the source.
  • @return emitter

  • Make target emitter-like based on a energy() object as the source
  • @return target with emitter methods and properties

energy.applies(fns, scope, args, breaker?)

  • Apply each function with scope and args
  • If breaker is defined, then functions can return breaker to abort subsequent applies
  • @return integer (number of functions that fired)


Works in node and in any browser. Tested in node, Chrome, FF, Opera, IE8