Privacy
Playmatter sends anonymous usage statistics to a server run by its developer, at
analytics.playmatter.bybrooklyn.dev. That is the only address the game sends anything to.
They are on by default and can be turned off in the settings. They show whether the game runs
well, where it crashes and which parts get used.
The game does not send your name, an account, an e-mail address, file or folder names, text you type, things you build or screenshots. The server does not store your internet address or your country.
Everything that is sent is listed on this page. If the game sends something that is not listed here, that is a bug.
Turning it off
- In the game, set Settings > "Send anonymous statistics" to Off. Anything waiting to be sent is deleted from your machine and nothing more is sent.
- Or start the game with the environment variable
DO_NOT_TRACK=1. Then nothing is sent whatever the setting says, and no ID is made.
On first launch the game shows this line in the corner of the screen: "Anonymous usage statistics are on. You can turn them off in the settings." Nothing is sent before that line has been shown, or for 30 seconds after it.
The install ID
The game makes a random 128-bit number, the install ID, and keeps it in statistics.json in
its settings folder. It is not derived from your hardware, user name or any account. The
server uses it to tell ten sessions from one copy of the game apart from ten copies.
- "Reset my ID" in the settings replaces it with a new random number. What is sent afterwards cannot be connected with what was sent before.
- Each run of the game also gets a random session ID.
What is sent
Messages are sent a few seconds after the game starts, every five minutes, and when it closes. Every message has these fields:
| Sent | What it is | Example |
|---|---|---|
| Format version | Which version of this list the message follows | 1 |
| Install ID | The random number described above | d294ddb6b44c… |
| Session ID | A random number for this run | 7c1e09aa35f2… |
| Message number | 0 for the first message of the run, 1 for the next, and so on | 3 |
| Game version | The version of the game | 0.0.1 |
| Build | Release or developer build | release |
Once per run
| Sent | What it is | Example |
|---|---|---|
| Operating system | The family | linux, windows |
| System version | The system's name and version number. On Linux, the distribution's name and the kernel version. Not the machine's name | Ubuntu 24.04, kernel 6.8.0 |
| Processor type | The architecture, not the model | x86_64 |
| Processor cores | How many | 8 |
| Memory | In whole gigabytes | 16 |
| Graphics adapter | The model name the driver reports | NVIDIA GeForce RTX 3070 Ti |
| Graphics interface | Which one the game is using | vulkan |
| Window size | Width and height in pixels | 1920, 1080 |
| Refresh rate | Of the display, in hertz | 144 |
| Tick rate | The simulation setting | 120 |
| Vsync | On or off | false |
| Frame cap | The setting; 0 for none | 0 |
| Mods | The number of mods running. Not their names or contents | 2 |
During the run
Each message repeats the run's totals so far. They are totals, not a record of when you did what.
| Sent | What it is |
|---|---|
| Length | Seconds since the game started |
| Time in the sandbox | Seconds, and how many of them were paused, in slow motion or in fast forward |
| Frames | How many frames were drawn |
| Frame time | Mean, median, 95th and 99th percentile and the worst, in milliseconds |
| Slow frames | The share of frames too slow for 60 frames a second, and the share too slow for 30 |
| Tick cost | Mean and 99th percentile of the time one simulation step took, in milliseconds |
| Most bodies and people | The largest number of physics bodies, and of people, in the world at once |
| Time held back | Seconds in which the simulation was slowed down to keep the frame rate up |
| The same per map | The rows above for each map you were on, with the map's name. Only maps that come with the game are named; any other is counted as "(other map)" |
What was used
These are counts with no times attached.
| Sent | What it is | Example |
|---|---|---|
| Items spawned | How many of each catalog item, by catalog name. An item added by a mod is counted as "(mod item)" | Human: 3, Crate: 2 |
| Tools and powers used | How many times each was used, by name | Drag: 40, Pin: 1 |
| Maps opened | How many times each map was opened, by name | Default: 1, Sea: 1 |
| Settings changed | The names of settings that are not at their defaults, without their values. Changed key bindings are sent as the single name "bindings" | video.vsync |
| Quick saves and loads | How many | 1, 0 |
| Contraptions | How many were saved, placed, and imported from the original game. Not their names or contents | 0, 2, 0 |
When the run ends
| Sent | What it is |
|---|---|
| Length | Seconds the run lasted |
| Ended cleanly | Yes if you closed the game, no if it was killed or crashed |
If the last message cannot be sent when the game closes, it is kept on your machine and sent the next time the game starts. After three failed starts it is deleted.
Crashes
When the game stops with an internal error it writes a report to its data folder and sends it the next time it starts.
| Sent | What it is | Example |
|---|---|---|
| The error message | The game's description of what went wrong, at most 300 characters | index out of bounds: the len is 3 but the index is 7 |
| Where | The source file, line and column in the game's code | crates/game/src/ui.rs:120:9 |
| Thread | The name of the thread it happened on | main |
| What was running | Up to 24 function names from the game and its engine, some with source file and line | openplayground::ui::toolbox |
| When | Seconds since the game started | 431 |
An error message can contain a file path. Before the report is written, the game removes your home folder and user name from the message. If a path remains that is not part of the game's own source code, the message is cut off at that point. The server checks again and discards anything that still looks like a path.
What the server adds
The server records the date, without the time, on which it first heard from a session.
It does not store your internet address or your country. The statistics go to computers run by Cloudflare, which see the address a request comes from while they handle it, as any internet service does. The collector uses the address to limit how many requests one machine can send. It counts requests against a hash of the address made with a secret, and the hash changes every day. The address is not written to the database or to a log, and request logging is switched off.
What is kept on your machine
statistics.jsonin the game's settings folder holds the install ID, your choice, and whether you have been shown the notice.- A folder called
statisticsin the game's data folder holds the current run's totals and at most one crash report until they are sent. Switching statistics off deletes it.
How long it is kept
180 days. Each day the server deletes sessions, frame times and crash reports older than that, and install IDs it has not heard from in that time.
Deleting your data
Write to playmatter@bybrooklyn.dev with your install ID. The settings show it, and it is in
statistics.json. Everything stored under that ID is then deleted. The ID is the only way to
find your data, so if you have reset it or deleted the file, the old data cannot be found and
is removed when it is 180 days old.
When nothing is sent
- Statistics are switched off, or
DO_NOT_TRACKis set. - The game was built without a server address, as developer builds are.
- The game is running its own automated tests.