Plugin Module
Every plugin is a class that extends FastPluggyBaseModule (a Pydantic BaseModel).
Minimal example
from fastpluggy.core.module_base import FastPluggyBaseModule
from .router import my_router
class MyPlugin(FastPluggyBaseModule):
module_name = "my_plugin"
module_version = "1.0.0"
module_router = my_router
Field reference
| Field | Type | Default | Description |
|---|---|---|---|
module_name |
str |
"" |
Unique identifier. Used in URLs, admin, and depends_on. |
module_version |
str |
"0.0.0" |
Semantic version string. |
module_menu_name |
str |
"" |
Label shown in the sidebar. Defaults to module_name. |
module_menu_icon |
str |
"fas fa-cube" |
Icon CSS classes, e.g. "ti ti-star". |
module_menu_type |
str \| None |
"main" |
Sidebar section: "main", "admin", or None to hide. |
module_router |
APIRouter \| list \| callable |
None |
FastAPI router(s), or a zero-arg factory callable. |
module_mount_url |
str \| None |
None |
Override mount URL. Default: /{module_type}/{module_name}. |
module_settings |
type \| None |
None |
Pydantic BaseSettings class (not instance). |
depends_on |
Dict[str, str] |
{} |
Plugin dependencies: {"other": ">=1.0.0"}. |
extra_js_files |
List[str] |
[] |
JS file paths injected into every page <head>. |
extra_css_files |
List[str] |
[] |
CSS file paths injected into every page <head>. |
Plugin discovery
Plugins are loaded from two sources:
Folder scan
Place a directory with a plugin.py (containing a FastPluggyBaseModule subclass) under the
configured plugins/ path:
plugins/
my_plugin/
__init__.py
plugin.py ← MyPlugin(FastPluggyBaseModule) must be importable here
router/
templates/
static/
Entry points
Declare in pyproject.toml:
The framework walks up the directory tree from plugin.py to locate pyproject.toml /
requirements.txt for dependency display.
Control which entry-point plugins are loaded with the FP_PLUGINS env var
(comma-separated names, or "*" for all).