Skip to content

Plugin Kit

For apps where "just add a flag" has become the beginning of every bug.

Plugin Kit is a runtime for Dart apps that have grown into platforms. Features get real lifecycles. Services get replaceable, prioritized implementations. Sessions stay sealed. Events flow between parts of your app that have never been formally introduced.

Toggle features live

A customization dialog enables, disables, and reprioritizes plugins at runtime. The runtime detaches losers, attaches winners, and keeps the session coherent across the swap.

Swap features, not screens

A model selector, search box, or editor tool targets a slot instead of a concrete service. The UI stays put while plugins compete underneath it.

Open two sessions safely

Two chats, documents, or workspaces get separate registries, buses, and plugin state by default. No mystery leaks because one tab forgot to clean up after itself.

Add a 'hooks' pipeline

Plugins inspect an outgoing action, inject context, enrich metadata, or stop it entirely. The button that started it does not need to know who helped or interfered.

If your app has one HTTP client, one auth service, and a few screens that call them, use the boring thing. Plugin Kit earns its weight when behavior needs to be replaced, layered, disabled, overridden, or vetoed while the app is running, and settings have stopped being data your app reads and started being something that actively reshapes the system. If you are wiring features by hand and noticing the same scaffolding for the third time, this is built for that case.

Plugins

Lifecycle-aware feature units. Global or session scope, with register, attach, detach, and live settings reconciliation as first-class hooks.

Services

A priority-based registry where multiple plugins can claim the same slot. Higher priority wins, the loser stays reachable as a fallback.

Events

A typed, priority-ordered bus for fire-and-forget and request/response. Handlers run in order, so plugins can mutate, observe, or short-circuit.

Sessions

Isolated execution scopes. Each gets its own registry, bus, and context. Open ten and close one without touching the others.