Plugin Development Guide¶
Lyndrix Core ist als modulare Plattform konzipiert. Jedes Tool, das du baust (z. B. ein Docker-Dashboard oder ein Tool für Meeting-Bingo), ist ein isoliertes Plugin.
Plugin Struktur¶
Ein Plugin lebt in einem eigenen Ordner unter app/plugins/dein_plugin_name/ und benötigt mindestens eine entrypoint.py (oder __init__.py).
app/plugins/mein_plugin/
├── entrypoint.py # Hauptlogik & UI
└── assets/ # (Optional) Bilder, CSS, etc.
Das Modul-Manifest¶
Jedes Plugin beginnt mit einem ModuleManifest. Dies sagt dem Core-System, wer du bist und was dein Plugin darf.
from core.modules.models import ModuleManifest
manifest = ModuleManifest(
id="lyndrix.plugin.beispiel",
name="Mein erstes Plugin",
version="1.0.0",
description="Ein tolles neues Tool.",
author="Dein Name",
icon="rocket_launch",
type="PLUGIN",
ui_route="/mein-plugin", # Erzeugt automatisch einen Menüeintrag!
permissions={"subscribe": ["system:boot_complete"], "emit": []}
)
Die setup(ctx) Funktion¶
Der Core ruft beim Booten die setup() Funktion deines Plugins auf und übergibt einen Sandbox-Kontext (ctx).
from nicegui import ui
from ui.layout import main_layout
def setup(ctx):
ctx.log.info("Plugin wird geladen...")
# Eine eigene UI Seite registrieren
@ui.page('/mein-plugin')
@main_layout('Mein Plugin')
async def plugin_page():
ui.label('Willkommen in meinem neuen Lyndrix Plugin!').classes('text-2xl')
# Auf globale Events reagieren
@ctx.subscribe('system:boot_complete')
async def on_boot(payload):
ctx.log.info("Juhu, das System ist hochgefahren!")
Tipp: Schau dir das Meeting Bingo Plugin im Quellcode an, um ein Gefühl für Echtzeit-Komponenten (WebSockets) in NiceGUI zu bekommen.