npm i @gasbuddy/mst-async-storage



A mobx-state-tree extension granting your models React Native's AsyncStorage powers of persistance.


  • mobx-state-tree 2.x or 3.x
  • react-native >= 0.56
  • @react-native-async-storage/async-storage >= 1.x.x


yarn add mst-async-storage


The following async actions are added:

import { types } from "mobx-state-tree"
import { withAsyncStorage } from "mst-async-storage"

export const NiceThingsModel = types
    unicorns: true,
    dragons: true,
    cake: true,
    spiders: false,
    nickleback: false,
  .actions(self => ({
    setSpiders(value: boolean) {
      self.spiders = value
  .extend(withAsyncStorage({ key: "nice.things" })) // <-- 🎉

Now you can load it:

async demo () {
  // create your model as usual
  const happy = NiceThingsModel.create()

  // now load the data from async storage
  await happy.load()

  // and when you change something

  // it will automatically save back to async storage!


withAsyncStorage() accepts an optional object as a parameter with these keys:

keytypewhat it does
keystringThe key to use when saving to AsyncStorage (default: the model type name)
autoSavebooleanShould we automatically save when any values change on the model? (default: true)
onlystring, string[]will only include the keys with these names
exceptstring, string[]will omit keys with these names


Yes plz!

Fork it, Clone it, Branch it, Yarn it
Build it, Test it, Push it, PR it

To run the tests, I like to open two shells yarn test:compile:watch and yarn test --watch. If you run ava manually, make sure to add -s to run the tests serially because I fail mocking (because the mocks are shared state and bleed into each other).

Jump To