Skip to content

Schnellstart

Dieser Leitfaden hilft dir beim Einstieg in die Entwicklung von Pumpkin-Server-Plugins mit der Programmiersprache D.

D-Plugins für Pumpkin werden mithilfe der offiziellen Bindings pumpkin-api-d als WebAssembly-Komponenten (Wasm) kompiliert.


Voraussetzungen

Bevor du D-Plugins für Pumpkin erstellst, stelle sicher, dass folgende Software installiert ist:

  • LDC: Version 1.43 oder neuer (LLVM-basierter D-Compiler).
  • addon-wasi: Das WASI-Zielpaket für LDC.
  • DUB: Der D-Paket- und Build-Manager (in der Regel in LDC enthalten).

1. Projekt einrichten

Erstelle ein neues Verzeichnis für dein Plugin-Projekt und lege eine dub.json-Konfigurationsdatei an:

bash
mkdir my-d-plugin
cd my-d-plugin

Erstelle die dub.json im Projektstammverzeichnis:

json
{
    "name": "my-d-plugin",
    "description": "Ein minimales Pumpkin-Plugin in D.",
    "license": "proprietary",
    "authors": ["DeinName"],
    "copyright": "Copyright © 2026, DeinName",

    "dependencies": {
        "pumpkin-api-d": "~>0.1.0"
    },

    "targetType": "executable",
    "dflags": ["-Xcc=-mexec-model=reactor"],
    "buildTypes": {
        "debug": {
            "buildOptions": ["debugMode", "debugInfo"]
        },
        "release": {
            "buildOptions": ["optimize", "inline"],
            "dflags": ["-L-S"]
        }
    }
}

NOTE

Das Flag -Xcc=-mexec-model=reactor wird vom WebAssembly-Linker benötigt, damit das Plugin als Reaktor (eine Komponente mit exportierten Einstiegspunkten) anstelle eines eigenständigen CLI-Programms mit Beendigungspunkt behandelt wird.


2. Das Plugin schreiben

Erstelle ein source-Verzeichnis und lege deinen Code in source/app.d ab:

d
module plugin;

import wit.pumpkin.plugin.plugin;
import wit.common;
import pumpkin.register;

struct MyPlugin {
    @GetMetadata PluginMetadata getMetadata()
    {
        immutable(WitString)[$] authors = [
            "DeinName".witList
        ];

        return (immutable PluginMetadata(
                name: "my-d-plugin".witList,
                version_: "0.1.0".witList,
                authors: authors.witList,
                description: "Ein Beispiel-Plugin in D.".witList,
                dependencies: WitList!WitString(),
                permissions: WitList!WitString()
        )).witClone;
    }

    @OnLoad
    Result!(void, WitString) onLoad(Context ctx)
    {
        scope (exit)
            ctx.witDrop; // Eingehende Ressourcen müssen nach der Nutzung freigegeben werden

        log(Level.info, "Hallo vom D-Plugin!".witList);
        return ok!WitString;
    }
}

mixin RegisterPlugin!MyPlugin;

3. Plugin kompilieren

Kompiliere dein Plugin zu einer WebAssembly-Komponente mit dem Ziel wasm32-wasip2:

bash
dub build -b release -a wasm32-wasip2

Dadurch wird my-d-plugin.wasm im Projektstammverzeichnis erzeugt.


4. Plugin ausführen

  1. Kopiere die kompilierte .wasm-Datei in das plugins/-Verzeichnis deines Pumpkin-Servers:
    bash
    cp my-d-plugin.wasm /pfad/zu/pumpkin/plugins/
  2. Starte oder starte den Pumpkin-Server neu:
    bash
    ./pumpkin
  3. Prüfe die Server-Logs auf die Erfolgsmeldung:
    text
    [INFO] Hallo vom D-Plugin!

Veröffentlicht unter der MIT-Lizenz.