cardinal-plugins

Crates.iocardinal-plugins
lib.rscardinal-plugins
version0.2.41
created_at2025-09-26 03:12:36.169622+00
updated_at2025-11-28 16:40:38.33802+00
descriptionMiddleware registry and execution engine for the Cardinal gateway
homepagehttps://github.com/andrespirela/cardinal
repositoryhttps://github.com/andrespirela/cardinal
max_upload_size
id1855374
size138,887
(andreespirela)

documentation

README

cardinal-plugins

The middleware runtime.

What it does

  • Tracks builtin middleware (RestrictedRouteMiddleware, etc.) and user-supplied WASM plugins inside PluginContainer.
  • Executes middleware chains via PluginRunner, respecting global order and destination-scoped middleware.
  • Wraps WASM modules by delegating to cardinal-wasm-plugins.

Adding middleware

Rust

struct MyInbound;

#[async_trait::async_trait]
impl RequestMiddleware for MyInbound {
    async fn on_request(&self, session: &mut Session, backend: Arc<DestinationWrapper>, ctx: Arc<CardinalContext>) -> Result<MiddlewareResult, CardinalError> {
        // inspect/modify session, backend, ctx
        Ok(MiddlewareResult::Continue)
    }
}

Register it by inserting into PluginContainer during bootstrap (either by editing the defaults or supplying a provider factory).

WASM

  1. Compile an AssemblyScript or Rust-compiled WASM file.
  2. Add it to configuration:
[[plugins]]
wasm = { name = "my-filter", path = "filters/my_filter.wasm" }

The runner validates exports (handle, __new) and executes it in inbound or outbound mode depending on where it’s registered.

Commit count: 0

cargo fmt