TypeScript-first Minecraft plugin development

Build production-grade Paper and Spigot plugins with a modern DX.

EcmaCraft lets you write plugin logic in TypeScript, bundle with esbuild, and run through a Java host plugin powered by GraalVM.

Language
TypeScript
Runtime
GraalVM
Targets
Paper/Spigot

Quick Start

$ pnpm create ecmacraft
$ cd my-plugin
$ pnpm dev

Example Plugin

import { type PluginContext, type SpigotEventType Event, } from 'ecmacraft';
class LightningStriker {
@Event('PlayerToggleSneakEvent')
onSneak(event: SpigotEventType<'PlayerToggleSneakEvent'>) {
if (!event.isSneaking()) return;
const player = event.getPlayer();
player.getWorld().strikeLightning(player.getLocation());
}
}
export default function main(ctx: PluginContext) {
ctx.registerHandlers(new LightningStriker());
}

Everything you need to ship plugins confidently

A focused toolchain for strongly typed APIs, fast local iteration, and clean builds.

Typed Spigot API

Work with generated event and runtime types so handlers are autocomplete-friendly and safer to refactor.

Fast CLI Workflow

Use ecmacraft dev for live bundling + server reload, and ecmacraft build to produce production jars.

Zero-Friction Scaffolding

Bootstrap a plugin project with create-ecmacraft and start coding immediately with sensible defaults.

From idea to running plugin in minutes

Step 1

Create a project

Scaffold a new plugin with starter config, scripts, and TypeScript entrypoint.

Step 2

Develop in watch mode

Run ecmacraft dev to rebuild on change and trigger server/plugin reload commands.

Step 3

Ship a production jar

Build a minified bundle and package it into dist/ecmacraft.jar for deployment.