DataStore interface

Objects implementing the DataStore interface represent stores for small amounts of arbitrary data attached to other objects, such as SecurityPrincipal and Plugin. This is usually accessed through a data property.

This is only suitable for data which does not change often, for example, configuration or rarely changing values.



Only strings are supported as keys. Some uses of DataStore objects impose extra requirements, such as the requirement to use a prefix with the plugin name.


Only values which can be serialised to JSON can be stored.


There is a low limit on the amount of data which can be stored. The JSON serialisation should ideally be less than 1024 bytes.

Race conditions

Because of the underlying implementation, there is a potential race condition which means this is not suitable for concurrent writes.

  • All the data is stored as one blob in the underlying storage.
  • When the store is first accessed (read or write), all the data is loaded from the storage.
  • When a value is written, all the data is written back to storage.
  • The store is discarded at the end of the request.

This means that if there are two concurrent requests which write different values in the data store, one of those values can be lost if the timing is unlucky.

This is a deliberate design decision to enable the platform to be implemented efficiently. If this is unacceptable for your plugin, use the database interface instead.


DataStore objects implement the standard JavaScript Object interface for key/value data using the [] operator.

Only strings are allowed as keys.