Início Rápido
Este guia ajudará você a começar a criar plugins para o servidor Pumpkin utilizando a linguagem de programação D.
Os plugins em D para o Pumpkin são compilados em componentes WebAssembly (Wasm) utilizando os bindings oficiais pumpkin-api-d.
Pré-requisitos
Antes de iniciar, certifique-se de ter as seguintes ferramentas instaladas:
- LDC: Versão 1.43 ou posterior (compilador D baseado em LLVM).
addon-wasi: O pacote de destino WASI para o LDC.- DUB: O gerenciador de pacotes e compilação de D (geralmente incluso no LDC).
1. Configurando o Projeto
Crie um novo diretório para o seu projeto de plugin e adicione o arquivo de configuração dub.json:
mkdir my-d-plugin
cd my-d-pluginCrie o arquivo dub.json na raiz do projeto:
{
"name": "my-d-plugin",
"description": "Um plugin mínimo para o Pumpkin feito em D.",
"license": "proprietary",
"authors": ["SeuNome"],
"copyright": "Copyright © 2026, SeuNome",
"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
A flag -Xcc=-mexec-model=reactor é exigida pelo linker do WebAssembly para que o plugin seja tratado como um reator (um componente que expõe pontos de entrada) em vez de um programa executável com ponto de saída imediato.
2. Escrevendo o Plugin
Crie o diretório source e adicione o seu código em source/app.d:
module plugin;
import wit.pumpkin.plugin.plugin;
import wit.common;
import pumpkin.register;
struct MyPlugin {
@GetMetadata PluginMetadata getMetadata()
{
immutable(WitString)[$] authors = [
"SeuNome".witList
];
return (immutable PluginMetadata(
name: "my-d-plugin".witList,
version_: "0.1.0".witList,
authors: authors.witList,
description: "Um exemplo de plugin em D.".witList,
dependencies: WitList!WitString(),
permissions: WitList!WitString()
)).witClone;
}
@OnLoad
Result!(void, WitString) onLoad(Context ctx)
{
scope (exit)
ctx.witDrop; // Recursos de entrada devem ser liberados após o uso
log(Level.info, "Olá do plugin em D!".witList);
return ok!WitString;
}
}
mixin RegisterPlugin!MyPlugin;3. Compilando o Plugin
Compile o seu plugin como um componente WebAssembly com o alvo wasm32-wasip2:
dub build -b release -a wasm32-wasip2Isso gerará o arquivo my-d-plugin.wasm na raiz do seu projeto.
4. Executando o Plugin
- Copie o arquivo
.wasmgerado para a pastaplugins/do seu servidor Pumpkin:bashcp my-d-plugin.wasm /caminho/para/pumpkin/plugins/ - Inicie ou reinicie o servidor Pumpkin:bash
./pumpkin - Verifique os logs do servidor para confirmar o carregamento:text
[INFO] Olá do plugin em D!