Config Plugin (Paper/Velocity)runs inside your Minecraft server or proxy and exposesConfigManagerto other pluginsConfig APIstores the authoritative config documents, versions them perappandenv, and serves snapshots over gRPC
How It Fits Together
Each config document is identified by these fields:app: the application or service namespace your plugin registers againstenv: the environment inside that application, such asprodorstagingnamespace: the logical config namespace inside the appkey: the document key inside the namespace- typed payload: the JSON body mapped into your Kotlin type
(app, env) scope, and then reads typed values through ConfigManager.
The authoritative state is the snapshot served by
Config API. NATS exists to reduce reload
latency, not to define correctness.Core Contract
The Config System is snapshot-based.Config APIstores the authoritative config state in PostgresConfig Pluginsyncs defaults, loads snapshots, and applies them to local typed bindings- NATS change events may be delayed, duplicated, or missed
- Consumers must reconcile through
GetSnapshotIfNewerinstead of deriving state from NATS payloads
Start Here
Config Plugin (Paper/Velocity)
Integrate typed config into Paper and Velocity plugins, define defaults, register documents, and
react to updates.
Config API
Understand the backend service, consumer and admin gRPC surfaces, and the current operational
caveats.
Runtime Behavior
Read the bootstrap, reconciliation, degraded startup, and best-effort NATS delivery contract.
Typical Use
Use this model when:- multiple plugins need consistent config delivery from a shared service
- you want typed config access instead of reading raw JSON at every call site
- you need default documents to be created automatically when a plugin starts
- you want live config refresh without coupling correctness to event delivery