Conduit
A modern, async-first Economy abstraction for Minecraft.
Conduit is a modern, single-domain Economy abstraction for Minecraft. It targets Paper/Folia on Java 25 and is async-first, BigDecimal-everywhere, and UUID-native. It is not a Vault fork or shim. It is its own API under so.alaz.conduit.
If you have ever fought Vault's synchronous calls, double money, missing events, or load-order races, Conduit is the abstraction that fixes those at the design level instead of papering over them.
Pick your path
Server operators
Install Conduit and a provider, configure it, and run the /conduit admin commands.
Use an economy
Spend, check, and move money from your plugin: shops, rewards, jobs, and more.
Migrate from Vault
Port a Vault consumer plugin to Conduit with a side-by-side translation guide.
Implement a backend
Build an economy provider and register it with Conduit's registry.
Bridge a plugin
Adapt EssentialsX or any existing economy plugin to the Conduit API.
Learn the model
The async, BigDecimal, UUID, and capability model in one page.
What Conduit is (and is not)
It is a clean economy contract: one interface, many backends, zero coupling between the plugins that spend money and the plugin that stores it. Consumers depend only on conduit-api. Providers implement it. The conduit-core plugin wires everything together at runtime.
It is not a permission API, a chat API, a metadata API, or a Vault compatibility layer. Conduit ships no net.milkbowl.vault.* shims and does not let Vault plugins run unchanged. If you need permissions use LuckPerms; if you need chat use a chat plugin; if you want Vault, keep Vault. Conduit is for plugins and servers that deliberately adopt so.alaz.conduit.api for economy.
The five design commitments
- Async by default. Every operation that touches storage returns a
CompletableFuture. There is no synchronous facade. BigDecimaleverywhere. Nodoubleanywhere in the public API. Floating-point money is structurally excluded.- UUID-first. Accounts are keyed by
UUID. There is no name-based fallback on the primary surface. - Capability-aware. You ask what a provider supports, structurally (extension interfaces) and via flags, before you call it.
- Typed results and events. Sealed
EconomyResultcases, post-commit events, and synchronous pre-auth interceptors.
Module map
conduit-api Public API: interfaces, records, results. Zero implementation.
conduit-core The runtime plugin: registry, dispatch, events, commands, metrics.
bridges/bridge-essentialsx Native EssentialsX Economy bridge.
bridges/bridge-template Starter template for community bridges.
conduit-test-fixtures Conformance tests + MockEconomy.
examples/ Reference plugins: shop, points, per-action fees, multi-economy.Versioning
- Group
so.alaz.conduit, pre-1.0. - API version constant:
Conduit.API_VERSION("1.0"). Providers declare a minimum viaEconomy.requiredApiVersion(); the registry rejects providers that require a newer API than the running runtime. - Pre-1.0, the core contract is stabilizing. Anything annotated
@ApiStatus.Experimentalmay change before 1.0.
See the Glossary if any term here is unfamiliar.