Installation
Immer can be installed as a direct dependency, and will work in any ES5 environment:
- Yarn:
yarn add immer
- NPM:
npm install immer
- CDN: Exposed global is
immer
- Unpkg:
<script src="https://unpkg.com/immer"></script>
- JSDelivr:
<script src="https://cdn.jsdelivr.net/npm/immer"></script>
- โ ๏ธ When using a CDN, it is best to check the url in your browser and see what version it resolves to, so that your users aren't accidentally served a newer version in the future when updates are release. So use an url like: https://unpkg.com/immer@6.0.3/dist/immer.umd.production.min.js instead. Substitute
production.min
withdevelopment
in the URL for a development build.
- Unpkg:
#
Pick your Immer versionThis section only applies to version 6 and later
To make sure Immer is as small as possible, features that are not required by every project has been made opt-in, and have to be enabled explicitly. This ensures that when bundling your application for production, unused features don't take any space.
The following features can be opt-in to:
Feature | Description | Method to call |
---|---|---|
ES 5 support | If your application needs to be able to run on older JavaScript environments, such as Internet Explorer or React Native, enable this feature. | enableES5() |
ES2015 Map and Set support | To enable Immer to operate on the native Map and Set collections, enable this feature | enableMapSet() |
JSON Patch support | Immer can keep track of all the changes you make to draft objects. This can be useful for communicating changes using JSON patches | enablePatches() |
All of the above | Unsure what features you need? We recommend to enable all of the features above by default on new projects. Premature optimization of a few KB might not be worth the initial trouble. Also, enabling or disabling features doesn't impact the performance of Immer itself | enableAllPlugins() |
For example, if you want to use produce
on a Map
, you need to enable this feature once during the start of your application:
Vanilla Immer kicks in at ~3KB gzipped. Every plugin that is enabled adds < 1 KB to that. The breakdown is as follows:
#
Immer on older JavaScript environments?By default produce
tries to use proxies for optimal performance. However, on older JavaScript engines Proxy
is not available. For example, when running Microsoft Internet Explorer or React Native (if < v0.59 or when using the Hermes engine on React Native < 0.64) on Android. In such cases, Immer will fallback to an ES5 compatible implementation which works identically, but is a bit slower.
Since version 6, support for the fallback implementation has to be explicitly enabled by calling enableES5()
.