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.