Lumen's plugin system is crates that register systems into the runtime. The registry distributes them prebuilt: publish once, and anyone pulls your plugin as a ready-to-load library — no full source build.
Publish a compiled plugin once; others load it into an app without pulling your source or waiting on a first-run build.
lumenc addThe index maps a plugin name to its location, so adding a dependency is a single command instead of a manual wire-up.
A manifest lets an app opt a plugin out of specific powers — network, filesystem — before it loads.
A plugin implements one trait and registers its systems. The registry distributes exactly this — prebuilt, so you don't compile it yourself.
pub struct MyPlugin; impl Plugin for MyPlugin { fn build(self, app: &mut App) { app.world.insert_resource(MyConfig::default()); app.add_systems( TickStage::Systems, my_tick_system, ); } }
# pull a prebuilt plugin into your app $ lumenc add lumen-charts # it loads on the next run — no rebuild, # no cargo, no waiting on a compile
The public plugin API is stable. Build against the trait and publish — the primitives Lumen ships are plugins themselves.
Read the source →