Stephen L. said: If you're trying to persist JSON generated by your script, normally you could use HTML 5's localStorage interface, but unfortunately the API doesn't allow it. An alternative that does work is to store the JSON as a property of an in-game object such as a token or handout or something. I know that this technique works because I use it to have tokens store references to other tokens in my marching order script. However, you'll lose this data if your sandbox crashes. This is basically what the state object is for. All scripts have access to an object named state which persists its content between game sessions. State contains nothing unless something is put there, but it's recommended that you put all of your stuff into one object which your store as a single property of state, so that you can avoid collisions with other scripts making use of it. For example, instead of state = { foo: 1, bar: 2 } , use state.myscript = { foo: 1, bar: 2 } . That said, state is not intended to be a database, it is meant to store... state. If you've got static unchanging content, it would be better to just write it as variables in your script. They'll be reinitialized each new session, but that's hardly important, since they're not changing. (There was a Pathfinder script a while back, for example, that was storing practically half the rulebook in state, causing the API server to choke. I believe campaigns which take too long to synchronize state with the API server now have the API throttled.)