Platforms

Supported platforms

Imperat supports various platforms as shown in the table below:

Platform Name Compatible Platforms Supported Versions
imperat-bukkit Bukkit / Spigot / Paper 1.8.8 - 1.21.11
imperat-bungee BungeeCord / Waterfall 1.21-R0.2
imperat-velocity Velocity 3.5.0
imperat-minestom Minestom 1.21.11
imperat-jda JDA (Java Discord API) 6.1.1
imperat-hytale Hytale Game 0.5.6
imperat-cli Any OS / Console Any version

Platform Differences

The main differences between all platforms are the implementation of Imperat that represents the framework on this platform along with the Implementation of CommandSource that represents the command-sender on this platform. They are following the naming format: <platform>Imperat, Same with the senders/sources : <platform>CommandSource (except for CLI) as shown in the table below:

Platform Name Implementation to Use CommandSource (Command Sender)
imperat-bukkit BukkitImperat BukkitCommandSource
imperat-bungee BungeeImperat BungeeCommandSource
imperat-velocity VelocityImperat VelocityCommandSource
imperat-minestom MinestomImperat MinestomCommandSource
imperat-jda JDAImperat JDACommandSource
imperat-hytale HytaleImperat HytaleCommandSource
imperat-cli CommandLineImperat ConsoleCommandSource

BUKKIT Brigadier Integration

Brigadier integration is automatic in v4. The Bukkit backend selects the strongest available registration capability at runtime — modern Paper's lifecycle Brigadier API on supported servers, the legacy Brigadier path through Commodore on older Spigot/Paper builds, and a plain command-map fallback when neither is present. There's no boolean flag to toggle.

BukkitImperat<BukkitCommandSource> imperat = BukkitImperat.builder(this).build();

On modern Paper, this gives you Brigadier-backed client-side suggestions, native argument types (Player, OfflinePlayer, Location, target selectors), and rich error highlighting — for free. On legacy backends you get the same Imperat features minus the Brigadier-only client-side bells.

Do NOT register your commands within your plugin's plugin.yml file. Imperat handles registration dynamically and internal conflicts may occur if defined in both places.