Paper & Spigot 1.21+

Script your server
without writing Java.

Kode is a plain-text scripting plugin for Minecraft. Drop a .kode file, run /kode reload — done.

No Java required Hot reload Free & open source
welcome.kode
# Runs every time a player joins
on PlayerJoin:
    send "&aWelcome, player.name!" to player
    give player bread 4
    title "&6Welcome!" subtitle "&7Enjoy your stay"

# Custom command — no plugin.yml needed
command /kit:
    give player iron_sword 1
    give player cooked_beef 16
    sound BLOCK_CHEST_OPEN
    send "&aKit delivered!" to player
20+
Built-in Events
15+
Built-in Actions
1.21+
Minecraft Version
0
Lines of Java needed

Everything you need.
Nothing you don't.

A complete scripting environment packed into a single drag-and-drop jar.

Hot Reload

Edit a .kode file, run /kode reload. Changes go live in seconds with zero server restarts.

🎮

Custom Commands

Define /kit, /balance, or any command with a simple command /name: block. No plugin.yml required.

📦

Persistent Storage

Save and load data across restarts with store and load. Per-player data, coin balances, visit counters — all built-in.

🔁

Full Control Flow

if/else, while, for, repeat, switch/case, try/catch, break, continue — a complete language with Python-like indentation.

🧩

Functions

Define reusable functions with parameters and return values. Namespace them across scripts with define math:clamp().

🔗

Plugin Interop

Call EssentialsX, Vault, or any other plugin's commands with execute (as player) or console (as server).

Events

React to anything that happens on your server.

Listen to 20+ built-in Minecraft events — player joins, block breaks, level changes, deaths, and more — with a single line.

  • PlayerJoin, PlayerQuit, PlayerDeath, PlayerRespawn
  • BlockBreak, BlockPlace, EntityDamage, EntityDeath
  • InventoryClick, ItemPickup, WeatherChange
  • Custom events via emit between your own scripts
level_rewards.kode
on PlayerLevelChange:
    switch player.level:
        case 10:
            give player iron_sword 1
            send "&fLevel 10 reward!" to player

        case 25:
            give player diamond_sword 1
            title "&bLevel 25!" subtitle "Diamond unlocked"
            broadcast "&bplayer.name reached level 25!"

        default:
            send "&7Level player.level. Keep going!" to player
Custom Commands

Add commands to your server in seconds.

Create /balance, /kit, /hub — or any command — with a command /name: block. Arguments are automatically available as $arg1, $arg2, $argc.

  • No plugin.yml editing, no restart
  • Run other plugins' commands via execute
  • Access arguments with $arg1, $args, $argc
  • Persist data with store / load
commands.kode
command /balance:
    load $coins from coins_player.name
    send "&6Balance: &e$coins coins" to player

command /pay:
    if $argc == 0:
        send "&cUsage: /pay <amount>" to player
        return
    load $coins from coins_player.name
    if $coins < $arg1:
        send "&cNot enough coins." to player
        return
    store coins_player.name $coins - $arg1
    send "&aSpent $arg1 coins!" to player

command /hub:
    execute "warp hub"  # runs as the player

Ready to start scripting?

Drop the jar in your plugins folder and write your first script in under a minute.