Global keys
Every key declared in meowmc-global.yml, with its default and its status.
Global keys are not per-world: meowmc-global.yml is the only level above the
hardcoded Java field default.
How to read the Status column
wired — code reads the key today; changing it changes behaviour. declared — the field exists and the file parses it, but no code reads it yet, so setting it changes nothing on the server. No default is a promise about behaviour until the code behind it has passed its gate.
exec
Execution model. mode: compat is the only value that does anything in this
build.
| Key | Default | Status | Notes |
| --- | --- | --- | --- |
| exec.mode | compat | wired | compat \| regionized \| regionized_aggressive \| vertical \| diagnostic. Per-world override allowed, but only one-way toward INHERIT (see files and precedence). |
| exec.region-threads | -1 | declared | -1 = reserve-then-fill; positive = fixed count. |
| exec.region-threads-max | 16 | declared | Ceiling for the fill policy. |
| exec.region-scheduler | work_stealing | declared | work_stealing \| edf. |
| exec.global-tick-barrier | true | declared | Effective at regionized and above; restores back-pressure. |
| exec.region-tick-budget-ms | 0 | declared | 0 = unlimited. A soft budget that pauses non-critical work past it. |
| exec.teleport-handoff-timeout-ms | 500 | declared | Must exceed worst-case region-merge duration; one tick is structurally too tight. |
| exec.region-grid-exponent | 4 | declared | 4 = 256-chunk sections; per-world override. |
| exec.verification-mode | false | declared | Hard thread checks + linter report. |
| exec.threading.default | pinned | declared | What an unmarked plugin is treated as. The one @Setting-annotated key in the system (default is a Java reserved word). |
| exec.threading.enforcement | off | declared | off \| log \| throw. Effective value is max(configured, tier-implied). |
threads
| Key | Default | Status | Notes |
| --- | --- | --- | --- |
| threads.async-pool | -1 | declared | -1 = max(4, cores/4). |
network
The connection surface.
| Key | Default | Status | Notes |
| --- | --- | --- | --- |
| network.netty-threads | 0 | wired | 0 = auto max(4, cores/2), clamped [4, 32]. Applied at boot. |
| network.netty-boss-threads | 2 | declared | Accept-loop threads. |
| network.max-direct-memory | 0.25 | wired | Fraction of max heap, applied at boot as netty's io.netty.maxDirectMemory. Outside (0, 1) = no cap; an explicit JVM -D flag wins. |
| network.recv-byte-cap | -1 | wired | Per-channel netty recv allocator maximum, bytes. -1 = disabled (netty default 64..65536, initial 2048). An RSS knob, not a flood bound — the recommendation is a benchmarked value (per bind × connection count × inbound profile), not a default. |
| network.compression-threshold-override | 0 | wired | Connection-level protocol setting, applied once at login. 0 = fall back to server.properties' network-compression-threshold (default 256; -1 there disables compression); -1 here forces compression off. A real trade, not a free win: raising it lets small packets skip the no-op copy path, but packets in [old, new) change from compressed to raw on the wire. Not listed in the shipped meowmc-global.yml; the Java default applies. |
| network.handshake-throttle-cache-size | 2048 | wired | Bounded cache for the connection throttle. Vanilla keeps a static unbounded HashMap cleaned by a full scan inside a class-wide synchronized block on the handshake path — a global lock on a hot path. 0 = vanilla behaviour. |
| network.accept-rate | 200 | wired | Connections per second. |
| network.accept-burst | 100 | wired | Burst allowance on top of the rate. |
| network.max-pending-auth | 200 | wired | In-flight authentications. |
| network.status-rate | 50 | wired | Status pings per IP per second. |
| network.status-sample-threshold | 100 | wired | Sample threshold for the status limiter. |
| network.max-global-inbound-rate | -1 | wired | -1 = auto = maxPlayers × 150 packets/sec. Implemented with per-event-loop local rankings on atomics — no global lock on the read path, because a limiter that holds a global lock is a DoS amplifier. |
| network.proxy-trusted-cidrs | [] | wired | [] = trust all, but proxyProtocol refuses to enable without this or an explicit acknowledged override — spoofing under proxy protocol is a ban bypass. |
| network.inbound-queue | 1024 | declared | Queue depth per connection. |
| network.outbound-queue | 4096 | declared | Outbound depth. |
| network.chunk-payload-cache | false | declared | Anti-xray must be in the cache key; auto-degrades to per-view grouping when on. |
| network.debug.deferred-plugin-flush | false | declared | Counter toggle only. |
metrics.export
A loopback-only metrics exporter, off by default — an out-facing export
surface, not part of the /meow suite.
| Key | Default | Status | Notes |
| --- | --- | --- | --- |
| metrics.export.enabled | false | declared | Loopback-only; token required when enabled. |
| metrics.export.host | 127.0.0.1 | declared | Bind host. |
| metrics.export.port | 9100 | declared | Bind port. |
| metrics.export.token | "" | declared | Required when enabled. |
profiling
The /meow suite's gates.
| Key | Default | Status | Notes |
| --- | --- | --- | --- |
| profiling.support-cpu-time | true | wired | The per-thread CPU segment — gates /meow activity and the profiler's thread view. Turning it off answers with a refusal naming the key and the file. |
| profiling.relative-mspt-thresholds | true | declared | MSPT thresholds relative to nanosecondsPerTick() under /tick rate. |
| profiling.per-region-profiling | true | declared | Meaningful at regionized execution and above only. |
| profiling.benchmark-dump | true | wired | The machine-readable /meow benchmark dump command. |
compat
| Key | Default | Status | Notes |
| --- | --- | --- | --- |
| compat.enum-compatibility-mode | false | declared | The restored bukkit.yml switch. |
| compat.adventure-rerouting | true | declared | Adventure 4→5 rerouting. |
| compat.modern-pipeline-rewrite | true | declared | The rewrite of the modern pipeline. |
| compat.min-client-protocol | 777 | wired | The lowest client protocol the handshake gate admits. The default is this build's own protocol, so the default supported set is {777} and admission is identical to the exact-match gate it replaces. A value below 767 warns at boot: fidelity for older clients is collapsed, because no translation layer for them ships with this build. |
| compat.max-client-protocol | 777 | wired | The ceiling of the supported set, to hold a client newer than this build back. The default admits only this build's own protocol. |
optimization
| Key | Default | Status | Notes |
| --- | --- | --- | --- |
| optimization.event-dispatch-fast-path | true | declared | An invokedynamic hasListeners guard on event dispatch. The guard's cost on a live server has not been measured. |
setup
| Key | Default | Status | Notes |
| --- | --- | --- | --- |
| setup.setup-mode | auto | wired | auto \| on \| off — the first-run login gate. auto resolves ON exactly once, at boot, on a demonstrably fresh install, and stays on until the wizard completes. Read-side only: never written by the wizard. See first run. |
Keys that are deliberately not here
network.compression-thresholdis not a MeowMC key. It is aserver.propertiesvalue, and a MeowMC key duplicating it is two sources of truth. The fork's lever isnetwork.compression-threshold-override, whose0default means "useserver.properties".spark.*stays in Paper's ownpaper-global.yml. MeowMC does not duplicate it.- Paper's
chunk-system.*keys stay inpaper-global.yml, becausechunk-systemis a global section. The fork changes the default resolution behind some of them (the world-side pool keys in world keys), not their location.