Skip to content
ES6 WeakMap based event emitter in ~350 bytes
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
.eslintrc.json Upgrade: Standard to eslint standard Jan 8, 2020
LICENSE Update: WeakMaps Jan 8, 2020
package.json Update: WeakMaps Jan 8, 2020


ES6 WeakMap based event emitter in ~350 bytes

Build Status npm version

Weak-emitter stores events in ES6 weakmaps, so objects are the only valid type for the event keys.

const emitter = weakEmitter()
const key = {}
emitter.on(key, () => doSomething())
// will `doSomething`
  • ~350 bytes when gzipped
  • conventional api (on, off, once and emit)
  • check arbitrary-emitter for a version that uses maps to store events


Install with npm or yarn, clone the repo or download and extract the zip. Then import or insert it as script tag.

Emitter API

on(key, handler)

Adds the handler function to the event tagged with key. key can be any type of value. Every handler will be added once, despite the number of times it was added to the event. Handlers are invoked in the order they were added.

const key = {}
emitter.on(key, () => doSomething())
emitter.emit(key) // will `doSomething`

once(key, handler)

Same as on, but listener will be triggered just once, then it will be removed.

const key = {}
emitter.once(key, () => doSomethingOnce())
emitter.emit(key) // will `doSomethingOnce`
emitter.emit(key) // won't do anything

emit(key[, ...args])

Invoke all handlers tagged with key, passing the rest of the arguments

emitter.on('test', (opts) => console.log(opts.test))
const options = { test: 'Testing!' }
emitter.emit('test', options) // => 'Testing!'

off([key[, handler]])

  • If a key but no handler is passed the event will be removed
  • If key and handler are passed as arguments just the handler will be removed from the event, action) // will remove action from listeners // will remove all the listeners tagged with `key`, and the tag itself


npm test

© 2020 Jacobo Tabernero - Released under MIT License

You can’t perform that action at this time.