MeowMC

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-threshold is not a MeowMC key. It is a server.properties value, and a MeowMC key duplicating it is two sources of truth. The fork's lever is network.compression-threshold-override, whose 0 default means "use server.properties".
  • spark.* stays in Paper's own paper-global.yml. MeowMC does not duplicate it.
  • Paper's chunk-system.* keys stay in paper-global.yml, because chunk-system is a global section. The fork changes the default resolution behind some of them (the world-side pool keys in world keys), not their location.