Skip to content

Plugin System Overview ​

The N.E.K.O. plugin system is a Python-based plugin framework built on process isolation and async IPC. It has two package types: Plugin for product features and Adapter for external protocol bridges. The former Extension package type has been removed; PluginRouter remains available inside a normal Plugin.

Architecture ​

┌────────────────────────────────────────────────────┐
│              Main Process (Host)                   │
│  ┌──────────────────────────────────────────────┐  │
│  │   Plugin Host (core/)                        │  │
│  │   - Plugin lifecycle management              │  │
│  │   - Bus system (memory, events, messages)    │  │
│  │   - ZMQ IPC transport                        │  │
│  └──────────────────────────────────────────────┘  │
│  ┌──────────────────────────────────────────────┐  │
│  │   Plugin Server (server/)                    │  │
│  │   - HTTP API endpoints (FastAPI)             │  │
│  │   - Plugin registry                          │  │
│  │   - Message queue                            │  │
│  └──────────────────────────────────────────────┘  │
└────────────────────┬───────────────────────────────┘
                     │ ZMQ IPC
      ┌──────────────┼──────────────┐
      ▼              ▼              ▼
  Plugin A       Plugin B       Adapter D
  (process)      (process)      (process)

Package types ​

ParadigmImport fromUse caseHow it runs
Pluginplugin.sdk.pluginIndependent features (search, reminders, etc.)Separate process
Adapterplugin.sdk.adapterBridge external protocols (MCP, NoneBot) to internal plugin callsSeparate process with gateway pipeline

When to use which? ​

  • "I want to add a new standalone feature" → use Plugin
  • "I want to add commands around an existing feature" → use a normal Plugin, or add a PluginRouter inside the existing host when you own it
  • "I want to accept MCP/NoneBot/external protocol calls and route them to plugins" → use Adapter

Start with Plugin. Migrate a former Extension by merging its Router into the owning Plugin or converting it into a standalone Plugin.

Start developing ​

Read Getting Started with Plugin Development for the package structure and complete workflow. Then follow the Quick Start and use the Plugin Capabilities and SDK Reference while implementing features.