Compatibility#
VSU targets modded Minecraft server jars only: Fabric, Forge, and NeoForge. It is not a Bukkit-family plugin and does not run on Spigot, Paper, Purpur, or any fork of them.
Supported server software#
| Server | Supported | Notes |
|---|---|---|
| Fabric server | Yes | Needs Fabric Loader and Fabric API for the matching Minecraft version |
| Forge server | Yes, 1.18.2 / 1.19.2 / 1.20.1 | Needs Architectury API for the same Minecraft version |
| NeoForge server | Yes, 1.21.1 and 26.1.2 | 26.1.2 requires NeoForge 26.1.2.93 or newer |
| Vanilla server | No | A vanilla jar has no mod loader |
| Bukkit / Spigot / Paper / Purpur | No | Different plugin API; VSU is a mod, not a plugin |
| Fabric quilt | Untested | Quilt is loader-compatible in principle; VSU is not built or tested against it |
The 26.1.2 lane is a standalone NeoForge project rather than an Architectury multi-loader build, because NeoForge 26.1.x uses a different toolchain. It has no Fabric sibling.
Hybrid servers#
Hybrid servers that mix a Bukkit plugin API with a mod loader — Mohist, Arclight, Mohist-based forks, and similar — are not supported. VSU's moderation enforcement hooks the loader chat and command events, and its command tree is registered through Brigadier. A hybrid that routes chat or commands through a plugin layer can bypass or break both, and the symptom is silent: mutes that do not apply, permissions that are not consulted.
If you must run a hybrid, treat VSU's moderation as unreliable and test every enforcement path explicitly. There is no supported configuration for it.
Clients#
Clients need nothing. VSU declares "environment": "server" in its Fabric
metadata, registers no client entrypoint, and adds no blocks, items, entities, or
GUI screens.
The practical consequences:
- Vanilla clients can join a server running VSU.
- Modded clients that do not have VSU can join.
- A client that happens to have VSU installed is harmless; the client-side classes do nothing.
- Nothing about VSU appears in a client's mod list requirement check, so there is no "missing mod" disconnect.
The one client-visible effect is chat formatting: when LuckPerms supplies prefix, suffix, or name colour metadata, chat lines arrive pre-formatted as components. A vanilla client renders them normally.
Release cells#
Nine artifacts, one per Minecraft version and loader combination.
| Cell | Minecraft | Loader | Java | Jar |
|---|---|---|---|---|
| 1 | 1.18.2 | Fabric | 17 | vsu-1.18.2-fabric-2.2.0.jar |
| 2 | 1.18.2 | Forge | 17 | vsu-1.18.2-forge-2.2.0.jar |
| 3 | 1.19.2 | Fabric | 17 | vsu-1.19.2-fabric-2.2.0.jar |
| 4 | 1.19.2 | Forge | 17 | vsu-1.19.2-forge-2.2.0.jar |
| 5 | 1.20.1 | Fabric | 17 | vsu-1.20.1-fabric-2.2.0.jar |
| 6 | 1.20.1 | Forge | 17 | vsu-1.20.1-forge-2.2.0.jar |
| 7 | 1.21.1 | Fabric | 21 | vsu-1.21.1-fabric-2.2.0.jar |
| 8 | 1.21.1 | NeoForge | 21 | vsu-1.21.1-neoforge-2.2.0.jar |
| 9 | 26.1.2 | NeoForge | 25 | vsu-26.1.2-neoforge-2.2.0.jar |
What each cell targets:
- 1.18.2, 1.19.2, 1.20.1 (Forge) — Forge 40, 43, and 47 minimum respectively,
plus Architectury API. Minecraft dependency ranges are pinned to the minor line,
so the 1.20.1 jar accepts
[1.20.1,1.21). - 1.18.2, 1.19.2, 1.20.1 (Fabric) — Fabric Loader
>=0.19.2on the 1.19.2 and 1.20.1 lanes,>=0.16.0on 1.21.1, plus Fabric API and Architectury API. - 1.21.1 (Fabric and NeoForge) — NeoForge
[21.1,)on the NeoForge cell. No Architectury dependency is declared on the 1.21.1 Fabric cell's metadata beyond the shared build; check the jar's metadata if you are pinning versions. - 26.1.2 (NeoForge) — NeoForge
[26.1.2.93,), Minecraft pinned to exactly[26.1.2].
Each lane has its own mods.toml / neoforge.mods.toml / fabric.mod.json with
those ranges. The loader enforces them, so an out-of-range loader produces a
dependency error rather than a partial start.
The mod id is vonix_server_utilities on every cell. A server cannot run two
different Minecraft-version jars of VSU at once, and putting two copies of the same
jar in mods/ produces a conflict.
Standalone boundary in 2.2.0#
VSU 2.2.0 is server-local and self-contained. The following do not exist in
this version, and any guide that describes them is describing an older or
different product:
| Not present | Detail |
|---|---|
| Public API or SPI package | The api package and its service-loader contract were removed; there is no third-party extension point |
| HTTP client | No outbound requests of any kind |
| Account linking | No player-to-account association |
| Site or control-panel integration | No panel protocol, no remote control surface |
| Donation-rank sync | No rank mirroring; LuckPerms is the only rank source |
| Feature polling | No remote feature registry; internal feature keys are always open |
| Remote configuration | Config is a local file only |
The changelog records the removal of the account-link, site, player-sync,
feature-polling, and donation-rank paths, along with the public inventory SPI.
/backsee still resolves Curios, capability, DataComponents, and legacy-NBT
inventories, but through private implementation classes
(network.vonix.serverutilities.inventory.internal), not a registration API.
If you need panel or web integration, it is a separate product in the Vonix line-up, not a VSU feature. Do not expect a config key or a command to enable it.
LuckPerms#
LuckPerms is an optional soft dependency, declared as optional in the Forge and
NeoForge metadata and listed under suggests in the Fabric metadata, version
>=5.4 where a range is given.
| LuckPerms state | Behaviour |
|---|---|
| Not installed | Every check falls through to the vanilla operator level. Log line: LuckPerms not detected on classpath; using vanilla op fallback. |
| Installed, nodes granted | Nodes are honoured for non-op players, and operators still pass through the op check |
| Installed, nothing granted | Op-0 commands work for everyone, op-2 and op-3 commands need operator level. No lockout |
| Installed, then removed | Detection is at class load; a restart re-probes. On the next start the mod logs the fallback line and uses operator levels |
VSU never writes to LuckPerms. It does not create groups, assign ranks, or sync anything. All grants are yours to manage, and the recipes on Permissions are suggestions rather than something the mod installs.
Chat metadata is read through the same bridge: prefix, suffix, and name colour are pulled from the player's cached LuckPerms data and applied to the chat line. If LuckPerms is absent, or the user has no metadata, VSU leaves the message alone and the vanilla format is used.
Accessory and inventory peeking#
/invsee uses VSU's own container view and needs nothing installed.
/backsee walks an ordered list of resolvers to find a container held or worn by
the target:
| Resolver | Priority | What it finds |
|---|---|---|
vonix:curios |
100 | Curios slots, when Curios is present |
vonix:data_components |
150 | Vanilla DataComponents.CONTAINER contents (1.21+) |
vonix:capability |
200 | Any IItemHandler reachable by reflection |
vonix:legacy_nbt |
300 | Items, inventory, and BlockEntityTag.Items NBT walks |
Higher priority runs first. A resolver that throws is logged and skipped, and the next one is tried, so one broken mod's inventory shape cannot break the command. The list is built in, not extensible.
/accsee uses the loader accessory bridge, which is not finished in 2.2.0.
On both Fabric and NeoForge the bridge answers with a "not fully mapped yet"
message instead of opening a menu. Curios is a compile-only dependency on the
Forge and NeoForge side and Trinkets on the Fabric side; neither is required at
runtime and neither currently produces a working accessory view.
Chat formatting#
When LuckPerms supplies metadata, VSU rewrites the outgoing chat line as:
<prefix> <name> <suffix> <message>
prefixandsuffixare parsed for legacy colour codes, including&-style codes and&#rrggbbhex.namecolour comes from the LuckPerms meta value; a hex value or a named colour is accepted.- Empty prefix or suffix is omitted rather than leaving a double space.
On Fabric the formatted component is broadcast by the mod and the original event is cancelled; on NeoForge the event's message component is replaced. If anything in that path throws, VSU logs the failure once and leaves vanilla formatting in place, so a broken metadata value cannot silence chat.
A player with no LuckPerms metadata is unaffected and keeps the vanilla
<name> message format.
Interaction notes#
Other chat mods. VSU cancels the loader chat event for muted players. A mod that broadcasts chat through its own channel rather than the loader event can bypass the mute. Test with a second account if you run a custom chat mod.
Other permission mods. Only LuckPerms is detected. A different permissions mod is invisible to VSU, so its grants do nothing and its denials do not apply; the operator level remains the only non-VSU authority.
World management mods. Homes and warps store a dimension id string. A mod that renames or removes a dimension leaves those rows pointing at a world that no longer loads, and the command reports "world is unavailable" rather than teleporting.
Backup mods. Back up config/vonix_server_utilities/ as a unit. A backup that
captures data.db without its WAL sidecar can restore to a state missing recent
writes; the .backup procedure on
Database & storage avoids that.