Compatibility
Minecraft: Java Edition
Platforms
Tags
Creators
Details
Prism
A code-first command framework that lets you build commands directly in Java with a fluent, type-safe API. No annotations required.

What is this?
This is the standalone plugin version of Prism. Install it once on your server and every plugin that depends on it shares a single copy of the library, so there is nothing to shade or relocate. If you would rather bundle Prism into your own jar, use the Maven Central artifacts instead.
Features
- ๐งฑ Fluent, type-safe builder API. Arguments, executors and requirements are real typed objects, not strings in annotations.
- ๐ณ Subcommands and argument trees. Nest commands as deep as you need, and give each branch its own executor.
- โ Required and optional arguments, with defaults when a value is missing.
- ๐ฏ 40+ built-in arguments. Players, offline players, worlds, materials, block states and predicates, item predicates, locations, vectors, rotations, entity selectors, enchantments, potion effects, sounds, particles, biomes, colors, hex colors, time, UUIDs and more.
- ๐ Ranges and bounds. Integer, long, float and double arguments with min/max, plus range arguments like
1..10. - ๐ก Smart tab completion. Sensible defaults on every argument, custom static or computed suggestions, tooltips, and async suggestions for database or network lookups.
- ๐ฉ Flags. Parse
-c red -estyle flags in any order, with values or as simple switches. - ๐ Permissions and requirements. Check permissions and arbitrary conditions on commands and on individual arguments, such as "only in the lobby world".
- ๐งญ Per-sender executors. Separate handlers for players, console, remote console, command blocks and proxied senders. No
instanceofchecks. - โก Native Brigadier integration. Client-side validation, colored syntax and native suggestions, with an automatic fallback to legacy registration if your version can't use it.
- ๐๏ธ Wide version support. Brigadier adapters for Minecraft 1.13 through 1.21 and 26.x.
- ๐ Built-in help generator. Clickable usage for a command and all its subcommands, showing only what the sender is allowed to run.
- โป๏ธ Runtime registration and unregistration. Commands are cleaned up automatically when the plugin that owns them disables.
- ๐ Per-plugin registries. Each plugin gets its own registry, so commands are tracked and unloaded per plugin.
- ๐งฉ Command providers. Implement one interface and return your commands. Prism registers them for you.
- ๐ ๏ธ Extensible. Write your own argument types, error handlers and suggestion suppliers.
For plugin developers
Add Prism as a dependency in your plugin.yml so it always loads first:
depend: [prism]
Then register commands through a registry:
PrismPluginAPI api = PrismPluginAPI.getAPI();
BukkitCommandsRegistry<?> registry = api.createRegistry(this);
registry.register(
new PrismBukkitCommand("give")
.withArguments(
new PlayerArgument("target"),
new MaterialArgument("material"),
new IntegerArgument("amount", 1, 64)
)
.executes((sender, args) -> {
Player target = args.get("target");
Material material = args.get("material");
int amount = args.get("amount");
target.getInventory().addItem(new ItemStack(material, amount));
})
.build()
);
Or skip the registry code: implement PrismCommandProvider on your main class and return your commands from getCommands(). Prism registers them when your plugin enables and unregisters them when it disables.
Compile against Prism with compileOnly. Full setup, guides and the argument reference are in the documentation.
Configuration
plugins/prism/config.yml lets you disable the /prism info command, Brigadier or legacy registration, async suggestions, and command permission registration.
Also available for other platforms
Prism also runs on Velocity and BungeeCord (experimental) through the Maven Central artifacts, using the same API.
Prism is in beta, so APIs may change between releases. Licensed under MIT.


