Install and configuration
Install #
First time with Prometheus and Grafana? docs/getting-started.md
covers install through your first dashboard, step by step.
download pulse_0.2.0.zip version 0.2.0, released 2026-09-29
download pulseotlp_0.2.0.zip version 0.2.0, released 2026-09-29
Drop pulse_x.x.x.zip into your server's Mods/ folder and start the server. Add
pulseotlp_x.x.x.zip beside it if you want OTLP push as well; the base mod works on its own and
the OTLP one does not. On first boot Pulse writes ModConfig/pulse.json with its defaults:
{
"Enabled": true,
"Bind": "127.0.0.1",
"Port": 9464,
"RuntimeMetrics": true,
"ChunksRefreshSeconds": 30,
"Attribution": {
"Enabled": false,
"BurstTicks": 10,
"IntervalSeconds": 10
}
}Set Enabled to false and the mod loads but registers nothing at all: no tick listener, no
socket, no meter. RuntimeMetrics false drops the dotnet_* families and keeps the rest, which
is what you want if something else already collects them on that host. ChunksRefreshSeconds
is how often the loaded-chunk gauge is refreshed, and 30 is already fast for what that read
costs; lower it only if you know why. Attribution is the per-mod breakdown described further
down, off because it costs tick time.
Everything outside the Attribution block takes a server restart. The block itself does not:
/pulse reload applies it live, and /pulse attribution on and off switch it without touching
the file at all.
Upgrading does not mean editing the file by hand. Each mod checks its config file at startup and
writes back any key it knows about that the file is missing, with that key's default; the values
you already set are kept exactly as they are, and the log lists what was added. A key neither mod
recognises does not survive that rewrite, so it is reported as a warning instead of disappearing
quietly: usually it is a typo, and the setting you meant has been running on its default. A file
that already holds every key is not written at all, which matters if you mount ModConfig
read-only or keep it under version control.
Configuration #
Pulse and the OTLP mod each keep their settings in their own file under ModConfig/, written
with their defaults on first boot. Both files pick up new keys the same way an upgrade adds
them to a file that predates those keys; see the paragraph on that in Install.
A file that exists but will not parse is left exactly as it is: the mod logs the full path and
the parser's own message, and Pulse runs that session on its built-in defaults rather than
failing to start. Pulse OTLP does the same for pulse-otlp.json, except exporting stays off for
that session instead of falling back to its own default endpoint, and any value Newtonsoft
quoted in its message, a misconfigured Headers entry most often, is redacted before it reaches
the log.
ModConfig/pulse.json
| Key | Default | What it does | Live or restart |
|---|---|---|---|
Enabled | true | Turns the mod on. false loads it but registers nothing: no tick listener, no socket, no meter. | Restart |
Bind | "127.0.0.1" | Address the metrics endpoint binds. See A word on the bind address. | Restart |
Port | 9464 | Port the metrics endpoint listens on. If it is already taken, Pulse logs an error and runs without the endpoint. | Restart |
RuntimeMetrics | true | Serves the .NET runtime's own dotnet_* metrics alongside Pulse's. See Runtime metrics. | Restart |
ChunksRefreshSeconds | 30 | How often the loaded-chunk gauge, and the entity breakdown riding the same listener, are refreshed. Floored at 1 second, capped at one day (86400). | Restart |
Attribution.Enabled | false | Turns per-mod tick attribution on. See Attribution. | Live, via /pulse reload |
Attribution.BurstTicks | 10 | Consecutive ticks profiled per burst. Clamped to 1 through 300. | Live, via /pulse reload |
Attribution.IntervalSeconds | 10 | Seconds between the end of one burst and the start of the next. Floored at 1. | Live, via /pulse reload |
ModConfig/pulse-otlp.json
The OTLP mod has no reload command: every key below needs a restart to take effect.
| Key | Default | What it does | Live or restart |
|---|---|---|---|
Enabled | true | Turns OTLP export on. false keeps the mod loaded but exports nothing. | Restart |
Endpoint | "http://localhost:4318" | Base address of the collector, without a signal path. Pulse appends /v1/metrics for http/protobuf; the exporter appends its own service path for grpc. | Restart |
Protocol | "http/protobuf" | http/protobuf or grpc. Anything else logs a warning and falls back to http/protobuf. | Restart |
Headers | {} | Headers sent with every export, for backend authentication. See OTLP export. | Restart |
IntervalSeconds | 60 | Seconds between two exports. Floored at 5, capped at 86400 (24 hours). | Restart |
IncludeRuntimeMetrics | true | Adds the System.Runtime meter to what gets pushed. Independent of the base mod's RuntimeMetrics. | Restart |
ServiceName | "vintagestory" | Sets the service.name resource attribute. A blank value falls back to vintagestory; OTEL_SERVICE_NAME, if set, overrides this key. | Restart |
Source: README.md