Pumpkin Plugin API for TypeScript
Go to file
2026-08-03 09:56:06 -07:00
.github/workflows Adding rolling CI release 2026-08-03 09:56:06 -07:00
dist Update componentize-js to v0.21 and use new WIT repo (#2) 2026-05-20 22:24:50 +02:00
example Update componentize-js to v0.21 and use new WIT repo (#2) 2026-05-20 22:24:50 +02:00
src Update componentize-js to v0.21 and use new WIT repo (#2) 2026-05-20 22:24:50 +02:00
wit@2aacac1f07 Sync to Pumpkin-MC/pumpkin-plugin-wit@2aacac1 2026-07-20 12:39:29 -07:00
.gitignore Fix everything up (various changes) 2026-05-15 16:25:22 +02:00
.gitmodules Update componentize-js to v0.21 and use new WIT repo (#2) 2026-05-20 22:24:50 +02:00
package-lock.json Update componentize-js to v0.21 and use new WIT repo (#2) 2026-05-20 22:24:50 +02:00
package.json Sync to Pumpkin-MC/pumpkin-plugin-wit@2aacac1 2026-07-20 12:39:29 -07:00
README.md Update componentize-js to v0.21 and use new WIT repo (#2) 2026-05-20 22:24:50 +02:00

Pumpkin API for TypeScript

This package provides the TypeScript bindings for building Pumpkin plugins using WebAssembly (Wasm) components.

Features

  • Type-safe API: Full TypeScript definitions for all Pumpkin plugin interfaces.
  • Easy Build Process: Includes a build script to bundle your TypeScript code and componentize it into a .wasm file.
  • Wasm Components: Built on the WebAssembly Component Model for high performance and portability.

Installation

npm install @pumpkinmc/pumpkin-api-ts

Creating a Plugin

  1. Create a new TypeScript file (e.g., my-plugin.ts).
  2. Extend the Plugin class and implement the metadata() method.
  3. Register your plugin using registerPlugin().
  4. Add export * from "@pumpkinmc/pumpkin-api-ts"; at the end.

Example:

import { Plugin, registerPlugin } from "@pumpkinmc/pumpkin-api-ts";

import { PluginMetadata } from "pumpkin:plugin/metadata@0.1.0";
import { Context } from "pumpkin:plugin/context@0.1.0";
import { TextComponent } from "pumpkin:plugin/text@0.1.0";
import * as logging from "pumpkin:plugin/logging@0.1.0";
import { PlayerJoinEventData } from "pumpkin:plugin/event@0.1.0";

class MyPlugin extends Plugin {
  metadata(): PluginMetadata {
    return {
      name: "My TypeScript Plugin",
      version: "0.1.0",
      authors: ["alex"],
      description: "A sample plugin written in TypeScript",
      dependencies: [],
      permissions: []
    };
  }
  onLoad(ctx: Context): void {
    super.onLoad(ctx);
    logging.log("info", "Hello from TypeScript plugin!");

    this.registerEvent(
      ctx,
      "player-join-event",
      (_srv, evt: PlayerJoinEventData) => {
        logging.log("info", `Player ${evt.player.getName()} joined!`);

        evt.player
          .getWorld()
          .broadcastSystemMessage(
            TextComponent.text(
              `Welcome ${evt.player.getName()} to the server!`,
            ),
            false,
          );
      },
    );
  }
}

registerPlugin(new MyPlugin());

export * from "@pumpkinmc/pumpkin-api-ts";

Building Your Plugin

To build your plugin into a .wasm component, use the provided build script:

./node_modules/.bin/pumpkin-plugin-build <entry-file.ts> <output-file.wasm>

Example:

./node_modules/.bin/pumpkin-plugin-build my-plugin.ts build/my-plugin.wasm

For convience, it's recommended to add a scripts section to your package.json

{
  "scripts": {
    "build": "pumpkin-plugin-build my-plugin.ts build/my-plugin.wasm"
  },
  "dependencies": {
    ...
  }
}

Execute with npm run build