Skip to content

Quick Start ​

Deze handleiding helpt je op weg met het schrijven van Pumpkin-serverplugins met de programmeertaal D.

D-plugins voor Pumpkin worden gecompileerd naar WebAssembly-componenten (Wasm) met behulp van de officiële pumpkin-api-d bindings.


Vereisten ​

Voordat je D-plugins voor Pumpkin bouwt, zorg ervoor dat het volgende is geïnstalleerd:

  • LDC: Versie 1.43 of nieuwer (LLVM-gebaseerde D-compiler).
  • addon-wasi: Het WASI-doelpakket voor LDC.
  • DUB: Het D-pakket- en buildbeheerprogramma (meestal inbegrepen bij LDC).

1. Het project opzetten ​

Maak een nieuwe map voor je pluginproject en voeg een dub.json-configuratiebestand toe:

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

Maak dub.json aan in de hoofdmap van het project:

json
{
    "name": "my-d-plugin",
    "description": "Een minimale Pumpkin-plugin gebouwd met D.",
    "license": "proprietary",
    "authors": ["JouwNaam"],
    "copyright": "Copyright © 2026, JouwNaam",

    "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

De vlag -Xcc=-mexec-model=reactor is vereist door de WebAssembly-linker zodat de plugin wordt behandeld als een reactor (een component met geëxporteerde toegangspunten) in plaats van een zelfstandig programma met een afsluitpunt.


2. De plugin schrijven ​

Maak een map source aan en plaats je code in source/app.d:

d
module plugin;

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

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

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

    @OnLoad
    Result!(void, WitString) onLoad(Context ctx)
    {
        scope (exit)
            ctx.witDrop; // Binnenkomende bronnen moeten na gebruik worden vrijgegeven

        log(Level.info, "Hallo vanuit de D-plugin!".witList);
        return ok!WitString;
    }
}

mixin RegisterPlugin!MyPlugin;

3. De plugin bouwen ​

Compileer je plugin naar een WebAssembly-component voor wasm32-wasip2:

bash
dub build -b release -a wasm32-wasip2

Dit genereert my-d-plugin.wasm in je projectmap.


4. De plugin uitvoeren ​

  1. Kopieer het gecompileerde .wasm-bestand naar de map plugins/ van je Pumpkin-server:
    bash
    cp my-d-plugin.wasm /pad/naar/pumpkin/plugins/
  2. Start of herstart Pumpkin:
    bash
    ./pumpkin
  3. Controleer de serverlogs om te bevestigen dat je plugin is geladen:
    text
    [INFO] Hallo vanuit de D-plugin!

Uitgebracht onder de MIT-licentie.