Event manager.
npm install sister

Foundation for your emitter implementation.
I have observed that there is a tendency to write your own implementation of event emitter. I have written a starter pack for those wishing to improve upon existing variations of event emitter implementation.
Please submit your implementation to the index when you are done.
Sister is 0.5kb event emitter that does three things: on, off and trigger. It performs well (~18,313,548 operations/sec in browser). If you need something more advanced, consider one of the existing, mature alternatives.
Download using NPM:
``sh`
npm install sister --save
Download using Bower:
`sh`
bower install sister --save
In browser, use gajus.Sister window object.
- emitter.on(event, handler)
- emitter.off(listener)
- emitter.trigger(event, data)
* emitter Instance of the Sister() object.event
* Name of the event.handler
* A function to execute when the event is triggered.listener
* Event listener.
#### emitter.on(event, handler)
- Add handler for event.listener
- Return .
- Remove listener.
#### emitter.trigger(event, data)
- Invoke event listeners (in sequence) with the supplied argument.emitter
- Return .
`js
var Sister = require('sister'),
emitter = Sister(),
listener;
listener = emitter.on('foo', console.log);
emitter.trigger('foo', 'bar');
emitter.off(listener);
emitter.trigger('foo', 'baz');
`
This example will print "bar" in the console.log`.
There are several existing alternatives that you might want to consider before starting to write your own implementation of an event emitter.
| Repository | Stars | Forks | Commits | Last Commit |
| --- | --- | --- | --- | --- |
|asyncly/EventEmitter2| 846 | 92 | 321 | 2014-06-12 |
|Wolfy87/EventEmitter| 711 | 102 | 628 | 2014-09-30 |
|RobertWHurst/LucidJS| 375 | 15 | 141 | 2014-09-26 |
|jeromeetienne/microevent.js| 284 | 57 | 17 | 2014-07-23 |
|uxder/Radio| 242 | 20 | 47 | 2013-06-14 |
|component/emitter| 150 | 52 | 69 | 2014-08-29 |
|necolas/emitter.js| 75 | 3 | 51 | 2014-05-16 |
|mkuklis/asEvented| 74 | 13 | 80 | 2014-01-10 |
|FredyC/promised-land| 67 | 1 | 25 | 2014-09-05 |
|postaljs/monologue.js| 66 | 6 | 32 | 2014-06-20 |
|scottcorgan/tiny-emitter| 66 | 2 | 24 | 2014-09-16 |
|primus/EventEmitter3| 57 | 7 | 76 | 2014-10-10 |
|segmentio/wildcards| 56 | 2 | 21 | 2014-04-10 |
|facebook/emitter| 50 | 12 | 6 | 2014-02-20 |
|Gozala/events| 39 | 11 | 45 | 2014-08-29 |
|danielstjules/pattern-emitter| 38 | 3 | 38 | 2014-04-25 |
|hrsh7th/js-co-on| 31 | 0 | 12 | 2014-07-01 |
|cpsubrian/node-eventflow| 22 | 5 | 44 | 2013-07-16 |
|medikoo/event-emitter| 20 | 1 | 155 | 2014-08-22 |
|component/channel| 19 | 1 | 20 | 2014-02-13 |
|mixu/microee| 15 | 0 | 21 | 2014-02-27 |
|qawemlilo/emitter| 14 | 2 | 26 | 2013-12-10 |
|substack/node-ordered-emitter| 13 | 2 | 21 | 2013-07-11 |
|godmodelabs/fwd| 12 | 1 | 23 | 2013-03-12 |
|ericz/EventEmitter| 11 | 7 | 3 | 2013-02-08 |
|fent/pauseable.js| 11 | 3 | 20 | 2014-07-29 |
|defunctzombie/dom-events| 10 | 1 | 16 | 2013-11-20 |
|bredele/emitter-queue| 10 | 0 | 14 | 2014-04-07 |
|postaljs/monopost.js| 9 | 2 | 10 | 2013-02-04 |
|addyosmani/polymer-eventemitter| 9 | 0 | 15 | 2014-01-24 |
|busterjs/bane| 8 | 1 | 33 | 2013-11-23 |
|fnando/emitter| 8 | 1 | 16 | 2014-10-01 |
|sakabako/paperboy| 7 | 1 | 59 | 2014-10-01 |
|Nicolab/node-ipc-events| 7 | 0 | 4 | 2014-07-02 |
|fent/node-eventyoshi| 7 | 0 | 35 | 2014-07-29 |
|yields/delegate-events| 7 | 0 | 2 | 2013-11-06 |
|feross/re-emitter| 6 | 1 | 15 | 2014-07-23 |
|dmotz/stream-snitch| 6 | 0 | 13 | 2014-09-07 |
|jhermsmeier/emitter.js| 6 | 0 | 52 | 2014-05-19 |
|hapijs/kilt| 5 | 1 | 17 | 2014-09-29 |
|1000ch/EventEmitter| 5 | 0 | 23 | 2014-02-25 |
|Raynos/eventemitter-light| 5 | 0 | 20 | 2012-08-04 |
|mcollina/patrun-emitter| 5 | 0 | 26 | 2014-05-26 |
|pgte/propagate| 5 | 0 | 12 | 2014-01-30 |
|jonnywyatt/eventsWithPromises| 4 | 2 | 21 | 2014-08-26 |
|oleics/node-caevents| 4 | 2 | 9 | 2012-04-09 |
|lelandtseng/EventEmitter| 4 | 1 | 17 | 2013-10-19 |
|petkaantonov/FastEmitter| 4 | 1 | 29 | 2013-10-22 |
|Alex-ray/concierge| 4 | 0 | 33 | 2014-05-12 |
|derekr/paganate| 4 | 0 | 13 | 2014-04-17 |
|gdi2290/angular-event-emitter| 4 | 0 | 31 | 2014-07-19 |
|maxponte/EventEmitter| 4 | 0 | 7 | 2014-08-08 |
|iwillwen/node_emitter| 3 | 2 | 2 | 2012-03-10 |
|IndigoUnited/js-events-emitter| 3 | 1 | 73 | 2014-04-18 |
|kamicane/emi| 3 | 1 | 2 | 2012-03-06 |
|olav/ee.js| 3 | 1 | 21 | 2014-02-13 |
|vesln/evts| 3 | 1 | 14 | 2013-12-15 |
|fent/node-newsemitter| 3 | 0 | 10 | 2014-07-29 |
|yields/buffer-events| 3 | 0 | 4 | 2014-06-27 |
|aconbere/evented| 2 | 2 | 10 | 2010-10-27 |
|shokai/event_emitter.js| 2 | 2 | 39 | 2013-05-17 |
|aluarosi/event0.js| 2 | 1 | 10 | 2014-03-17 |
|benjreinhart/node-event-emitter| 2 | 1 | 5 | 2014-03-29 |
|madimp/deferredEventEmitter| 2 | 1 | 6 | 2012-05-13 |
|pierrec/node-ev| 2 | 1 | 13 | 2012-06-25 |
|alexborisov/abNanoEvent| 2 | 0 | 5 | 2013-11-12 |
|apily/emitter| 2 | 0 | 27 | 2014-06-19 |
|eldargab/hooks-emitter| 2 | 0 | 5 | 2013-03-27 |
|ericelliott/clctr| 2 | 0 | 8 | 2013-08-06 |
|henrytseng/event-aggregator| 2 | 0 | 14 | 2014-03-05 |
|ksdlck/Emitterarchy| 2 | 0 | 7 | 2012-01-18 |
|pgte/boxed-emitter| 2 | 0 | 11 | 2012-12-31 |
|rubenv/angular-tiny-eventemitter| 2 | 0 | 5 | 2014-07-25 |
|ryanve/energy| 2 | 0 | 36 | 2014-05-10 |
|steerapi/ti-event-emitter| 2 | 0 | 5 | 2011-12-29 |
|tarunc/CollectionEventEmitter2| 2 | 0 | 2 | 2013-07-04 |
|vinayakcs/eventEmitter| 2 | 0 | 11 | 2014-08-25 |
|anthonyshort/emitter-manager| 1 | 2 | 12 | 2013-07-31 |
|joaquimserafim/tiny-eventemitter| 1 | 2 | 7 | 2014-03-26 |
|B-Vladi/EventEmitter| 1 | 1 | 111 | 2014-10-19 |
|MatthewMueller/aemitter| 1 | 1 | 8 | 2014-05-24 |
|chrisdickinson/estate| 1 | 1 | 7 | 2013-08-28 |
|mccalltd/EventEmitter| 1 | 1 | 49 | 2014-01-04 |
|UsabilityDynamics/node-object-emitter| 1 | 0 | 39 | 2014-08-30 |
|asbjornenge/nanoemitter| 1 | 0 | 10 | 2014-05-12 |
|buunguyen/evtify| 1 | 0 | 8 | 2014-03-09 |
|cballou/jquery-eventemitter| 1 | 0 | 6 | 2014-02-10 |
|enricomarino/events| 1 | 0 | 4 | 2011-10-31 |
|erykpiast/angular-event-emitter| 1 | 0 | 7 | 2014-08-26 |
|floatdrop/after-event| 1 | 0 | 9 | 2014-10-20 |
|gummesson/evmit| 1 | 0 | 2 | 2014-04-26 |
|hden/Bacon.EventEmitter| 1 | 0 | 5 | 2013-04-02 |
|jaridmargolin/event-emitter.js| 1 | 0 | 6 | 2014-08-20 |
|jdarling/hyjack| 1 | 0 | 28 | 2014-09-10 |
|jharding/boomerang| 1 | 0 | 13 | 2013-07-09 |
|jimgswang/EventEmitter| 1 | 0 | 44 | 2014-07-24 |
|jkroso/dom-emitter| 1 | 0 | 48 | 2013-08-29 |
|jls/emitJS| 1 | 0 | 9 | 2011-10-25 |
|ksdlck/Emitting| 1 | 0 | 14 | 2012-01-19 |
|maxhoffmann/emitter| 1 | 0 | 40 | 2014-08-20 |
|npmcomponent/littlebitselectronics-EventEmitter2| 1 | 0 | 290 | 2013-08-13 |
|nrn/nee| 1 | 0 | 4 | 2014-09-03 |
|pete-otaqui/EventEmitter| 1 | 0 | 7 | 2011-05-24 |
|pgte/switch-emitter| 1 | 0 | 9 | 2013-01-17 |
|plediii/HevEmitter| 1 | 0 | 92 | 2014-09-30 |
|rosylilly/EventEmitter.js| 1 | 0 | 5 | 2011-08-26 |
|sjmulder/event-registrar| 1 | 0 | 3 | 2012-07-20 |
|smagch/sprite| 1 | 0 | 10 | 2013-05-13 |
|steelsojka/leafyjs| 1 | 0 | 23 | 2014-06-08 |
|xwcoder/EventEmitter| 1 | 0 | 3 | 2014-09-14 |
|Livefyre/event-emitter| 0 | 1 | 29 | 2014-09-24 |
|evilharlequin/matter| 0 | 1 | 3 | 2014-07-25 |
|ricardobeat/emmy| 0 | 1 | 9 | 2014-10-02 |
|thibauts/eventemitter| 0 | 1 | 4 | 2014-06-25 |
|AndreasMadsen/emitterpoint| 0 | 0 | 1 | 2013-08-27 |
|Havvy/after-events| 0 | 0 | 1 | 2014-01-17 |
|Kl0tl/events-emitter| 0 | 0 | 4 | 2014-01-12 |
|LingyuCoder/EventEmitter| 0 | 0 | 7 | 2014-09-28 |
|RangerMauve/mqtt-emitter| 0 | 0 | 8 | 2014-09-07 |
|Raynos/cached-events| 0 | 0 | 1 | 2012-08-25 |
|Raynos/multi-event| 0 | 0 | 5 | 2012-08-10 |
|STRML/forward-emitter| 0 | 0 | 2 | 2014-06-30 |
|SoftwareDevPro/EventEmitter.coffee| 0 | 0 | 3 | 2013-11-28 |
|Tom32i/event-emitter.js| 0 | 0 | 9 | 2014-06-03 |
|Wizcorp/events| 0 | 0 | 5 | 2014-03-10 |
|alanshaw/funce-emitter| 0 | 0 | 10 | 2014-05-07 |
|anchorjs/events| 0 | 0 | 28 | 2013-06-20 |
|bendrucker/emit-then| 0 | 0 | 26 | 2014-10-11 |
|bevacqua/contra.emitter| 0 | 0 | 7 | 2014-09-21 |
|beyo/events| 0 | 0 | 10 | 2014-05-15 |
|bmullan91/evt-emitter| 0 | 0 | 14 | 2014-10-19 |
|browser-modules/event-emitter| 0 | 0 | 4 | 2014-07-20 |
|brycebaril/eenano| 0 | 0 | 2 | 2014-08-16 |
|btknorr/emitter-all| 0 | 0 | 14 | 2013-04-05 |
|canvace/EventEmitter| 0 | 0 | 7 | 2013-10-26 |
|chrisdickinson/every| 0 | 0 | 4 | 2013-02-19 |
|chuckpreslar/broadcaster| 0 | 0 | 22 | 2013-07-06 |
|cookfront/EventEmitter| 0 | 0 | 1 | 2014-07-19 |
|coolbloke1324/emitter| 0 | 0 | 3 | 2014-03-26 |
|coverslide/mkee| 0 | 0 | 8 | 2013-04-14 |
|cybrown/SimpleEventEmitter| 0 | 0 | 3 | 2013-07-08 |
|darlanalves/EventEmitter| 0 | 0 | 13 | 2014-10-11 |
|devangpaliwal/eventemitter| 0 | 0 | 2 | 2013-07-28 |
|dfcreative/emmy| 0 | 0 | 81 | 2014-10-15 |
|dimik/EventEmitter| 0 | 0 | 8 | 2013-09-28 |
|edubskiy/events.emitter.js| 0 | 0 | 2 | 2013-06-23 |
|ericgj/logged-emitter| 0 | 0 | 2 | 2013-05-22 |
|esatterwhite/node-pattern-emitter| 0 | 0 | 24 | 2014-05-08 |
|eventEmitter/ee-event-emitter| 0 | 0 | 7 | 2014-08-24 |
|exfm/event-emitter| 0 | 0 | 2 | 2012-09-07 |
|fabiosantoscode/clientjs-event-emitter| 0 | 0 | 2 | 2013-01-22 |
|fnobi/EventEmitter| 0 | 0 | 15 | 2014-08-12 |
|fskreuz/MiniEvent| 0 | 0 | 3 | 2013-09-04 |
|gaborsar/MicroEventEmitter| 0 | 0 | 6 | 2014-06-25 |
|hachr/EventEmitter| 0 | 0 | 2 | 2014-05-21 |
|jamesvsnowden/emitter| 0 | 0 | 9 | 2013-06-02 |
|jbrumwell/jqevents| 0 | 0 | 4 | 2012-12-05 |
|jdpanderson/OrderedEventEmitter| 0 | 0 | 3 | 2014-02-16 |
|jillix/emitter| 0 | 0 | 21 | 2014-08-13 |
|joechee/EventEmitter-async| 0 | 0 | 2 | 2014-09-27 |
|kaerus-component/emitter| 0 | 0 | 23 | 2014-05-10 |
|kalachevmax/semantic.events| 0 | 0 | 1 | 2014-06-22 |
|kallaspriit/EventEmitter| 0 | 0 | 2 | 2013-08-08 |
|lakenen/eemitter| 0 | 0 | 8 | 2014-06-26 |
|madbook/easy-events| 0 | 0 | 2 | 2014-01-23 |
|marcello3d/node-listenable| 0 | 0 | 1 | 2013-10-25 |
|mateuspv/Events| 0 | 0 | 9 | 2014-05-21 |
|mercmobily/EventEmitterCollector| 0 | 0 | 12 | 2013-11-23 |
|mescoda/EventEmitter| 0 | 0 | 25 | 2014-03-18 |
|michaelrhodes/event-relay| 0 | 0 | 5 | 2013-11-13 |
|mpotra/events-async| 0 | 0 | 5 | 2014-05-11 |
|mvantil/FutureEventEmitter| 0 | 0 | 3 | 2013-03-30 |
|nathanfaucett/event_emitter| 0 | 0 | 28 | 2014-10-19 |
|nathanmacinnes/edifice| 0 | 0 | 2 | 2014-04-28 |
|neocoder/emmi| 0 | 0 | 1 | 2013-08-23 |
|nib-health-funds/forward-events| 0 | 0 | 3 | 2014-07-14 |
|niyazpk/EventEmitter| 0 | 0 | 16 | 2014-02-08 |
|oliverroick/SuperSimpleEvents| 0 | 0 | 20 | 2014-10-12 |
|pfraces-wip/pubsub| 0 | 0 | 6 | 2013-02-15 |
|primus/emits| 0 | 0 | 13 | 2014-10-06 |
|radubrehar/zemitter| 0 | 0 | 11 | 2014-09-08 |
|redrockethq/jetpack| 0 | 0 | 4 | 2014-04-04 |
|renra/event_emitter_js| 0 | 0 | 1 | 2014-03-13 |
|reu/event-emitter.js| 0 | 0 | 4 | 2013-06-17 |
|richRemer/scoped-event-emitter| 0 | 0 | 4 | 2014-09-01 |
|roderickObrist/event-emitter| 0 | 0 | 1 | 2014-03-19 |
|rpstewart/EventEmitter| 0 | 0 | 8 | 2012-11-06 |
|sergeyt/fogbus.io| 0 | 0 | 23 | 2014-07-16 |
|shiroyasha/Shiro-EventEmitter| 0 | 0 | 7 | 2013-05-10 |
|skerit/hawkevents| 0 | 0 | 2 | 2014-06-18 |
|sosnowski/event-emitter-ng| 0 | 0 | 8 | 2013-02-11 |
|stayradiated/signals| 0 | 0 | 32 | 2014-03-23 |
|supershabam/pevents| 0 | 0 | 29 | 2013-12-04 |
|thechriswalker/TriggerHappy| 0 | 0 | 1 | 2012-09-28 |
|theotheu/eventEmitter| 0 | 0 | 1 | 2014-09-16 |
|thiagoneves/event-emitter| 0 | 0 | 3 | 2014-07-22 |
|thomaswelton/bower-event-emitter| 0 | 0 | 16 | 2013-10-24 |
|tim-smart/node-superemitter| 0 | 0 | 6 | 2014-06-19 |
|tomasperezv/event-emitter| 0 | 0 | 2 | 2013-10-20 |
|tunderdomb/EventStation| 0 | 0 | 2 | 2014-06-16 |
|tvsudhir/EventEmitter| 0 | 0 | 11 | 2014-07-30 |
|yomotsu/PeriodicEventEmitter| 0 | 0 | 1 | 2014-08-11 |
|zaphod1984/eventEmitterDemux| 0 | 0 | 8 | 2014-02-19 |