# Nitt > Small functional event emitter / pubsub. * **Microscopic:** weighs less than 200 bytes gzipped * **Useful:** a wildcard `"*"` event type listens to all events * **Familiar:** same names & ideas as [Node's EventEmitter](https://nodejs.org/api/events.html#events_class_eventemitter) nitt was made for the browser, but works in any JavaScript runtime. It has no dependencies and supports IE9+. ## Table of Contents * [Install](#install) * [Usage](#usage) * [Examples & Demos](#examples--demos) * [API](#api) * [Contribute](#contribute) * [License](#license) ## Install This project uses [node](http://nodejs.org) and [npm](https://npmjs.com). Go check them out if you don't have them locally installed. ```sh $ npm install --save nitt ``` Then with a module bundler like [rollup](http://rollupjs.org/) or [webpack](https://webpack.js.org/), use as you would anything else: ```javascript // using ES6 modules import nitt from 'nitt' // using CommonJS modules var nitt = require('nitt') ``` The [UMD](https://github.com/umdjs/umd) build is also available on [unpkg](https://unpkg.com): ```html ``` You can find the library on `window.nitt`. ## Usage ```js import nitt from 'nitt' const emitter = nitt() // listen to an event emitter.on('foo', e => console.log('foo', e) ) // listen to all events emitter.on('*', (type, e) => console.log(type, e) ) // fire an event emitter.emit('foo', { a: 'b' }) // clearing all events emitter.all.clear() // working with handler references: function onFoo() {} emitter.on('foo', onFoo) // listen emitter.off('foo', onFoo) // unlisten ``` ### Typescript Set `"strict": true` in your tsconfig.json to get improved type inference for `nitt` instance methods. ```ts import nitt from 'nitt'; type Events = { foo: string; bar?: number; }; const emitter = nitt(); // inferred as emitter emitter.on('foo', (e) => {}); // 'e' has inferred type 'string' emitter.emit('foo', 42); // Error: Argument of type 'number' is not assignable to parameter of type 'string'. (2345) ``` Alternatively, you can use the provided `emitter` type: ```ts import nitt, { emitter } from 'nitt'; type Events = { foo: string; bar?: number; }; const emitter: emitter = nitt(); ``` ## API #### Table of Contents * [nitt](#nitt) * [all](#all) * [on](#on) * [Parameters](#parameters) * [off](#off) * [Parameters](#parameters-1) * [emit](#emit) * [Parameters](#parameters-2) * [once](#once) * [Parameters](#parameters-3) * [when](#when) * [Parameters](#parameters-4) ### nitt Nitt: Tiny (~200b) functional event emitter / pubsub. Returns **Nitt** ### all A Map of event names to registered handler functions. ### on Register an event handler for the given type. #### Parameters * `type` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [symbol](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Symbol))** Type of event to listen for, or `'*'` for all events * `handler` **[Function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function)** Function to call in response to given event ### off Remove an event handler for the given type. If `handler` is omitted, all handlers of the given type are removed. #### Parameters * `type` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [symbol](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Symbol))** Type of event to unregister `handler` from (`'*'` to remove a wildcard handler) * `handler` **[Function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function)?** Handler function to remove ### emit Invoke all handlers for the given type. If present, `'*'` handlers are invoked after type-matched handlers. Note: Manually firing '\*' handlers is not supported. #### Parameters * `type` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [symbol](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Symbol))** The event type to invoke * `evt` **Any?** Any value (object is recommended and powerful), passed to each handler ### once Register an event handler that is executed just once for the given type. #### Parameters * `type` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [symbol](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Symbol))** Type of event to listen for, or `'*'` for all events * `handler` **[Function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function)** Function to call in response to given event ### when Returns a promise for a single event #### Parameters * `type` **[String](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Type of event to listen for, or `"*"` for any event Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\** ## Contribute For reporting issues and submitting patches, send an email. ## License [MIT License](https://opensource.org/licenses/MIT)