Features

Everything you can build with Kore

Commands, every data-driven JSON file, world generation, gameplay systems and the tooling to ship them. All typed, all generated from Minecraft's own data, all compiled to plain vanilla datapacks.

65+typed commands
50+JSON resource types
80+generated registries
4mod loaders to export to
Get Started Compare with other tools

Kotlin in, vanilla datapack out

What you write on the left, the exact files Kore generates on the right. Nothing else ships.

You write
dataPack("arena") {
	lootTable("boss_chest") {
		pool {
			rolls = constant(3f)
			entries {
				item(Items.DIAMOND) { weight = 1 }
				item(Items.GOLDEN_APPLE) { weight = 4 }
				item(Items.IRON_INGOT) { weight = 10 }
			}
		}
	}
}
Kotlin
Kore generatesdata/arena/loot_table/boss_chest.json
{
	"pools": [
		{
			"rolls": 3.0,
			"entries": [
				{
					"type": "minecraft:item",
					"name": "minecraft:diamond",
					"weight": 1
				},
				{
					"type": "minecraft:item",
					"name": "minecraft:golden_apple",
					"weight": 4
				},
				{
					"type": "minecraft:item",
					"name": "minecraft:iron_ingot",
					"weight": 10
				}
			]
		}
	]
}
JSON
Commands & functions

The whole command set, autocompleted

Every vanilla command as a typed Kotlin call. Your IDE lists every item, block and effect, and the compiler rejects a typo before /reload ever sees it.

Arena.kt
function("reward") {
give(self(), Items.DIA
EDIAMONDItems
EDIAMOND_AXEItems
EDIAMOND_BLOCKItems
EDIAMOND_BOOTSItems
EDIAMOND_CHESTPLATEItems
EDIAMOND_HELMETItems
}
generates
give @s minecraft:diamond
Game data, typed

Items, text and NBT as real objects

Build an item once with its name, lore and components, then reuse it anywhere an item is expected.

Relic.kt
val relic = Items.NETHERITE_SWORD {
	customName(textComponent("Blade of the Arena", Color.GOLD))
	lore(textComponent("Awarded to the last one standing", Color.GRAY) + text("Season 3", Color.DARK_PURPLE))
	unbreakable()
}

give(self(), relic)
Kotlin
Data-driven resources

Every JSON file, without writing JSON

Each resource is a Kotlin builder that serializes to the exact vanilla schema and lands in the right folder.

build/arena
arena/
pack.mcmeta
data/arena/
advancement/first_kill.jsonopen
dialog/main_menu.json
enchantment/lifesteal.json
function/load.mcfunction
loot_table/boss_chest.jsonopen
recipe/arena_key.jsonopen
tags/item/weapons.json
trial_spawner/arena_wave.json
worldgen/biome/ashlands.json
written bydataPack("arena") { ... }.generate()
World generation

Shape entire worlds from Kotlin

Custom dimensions, biomes and structures, down to density functions and noise, without hand-editing thousand-line JSON.

seaLevel
desert temperature
Islands.kt
val terrain = noiseSettings("islands") {
	seaLevel = 63
}

dimension("islands", type = islandsType) {
	noiseGenerator(settings = terrain, biomeSource = multiNoise {
		add(multiNoiseEntry(Biomes.DESERT) {
			temperature = doubleOrPair(0.1, 1.0)
		})
		// forest, plains, snowy plains, peaks...
	})
}
Kotlin
Gameplay objects

Minigame systems in a few lines

The oop module turns teams, timers, boss bars and events into handles you create once and call like regular objects.

LOBBYPLAYINGENDED
Ready-made helpers

The hard math, already solved

Raycasts, particle shapes, trigonometry on scoreboards, menus and text rendering, written and tested so you don't have to.

drawShape("fx") { shape = Shape.CIRCLE }
Build & ship

From save to in‑game in one command

Every save rebuilds the pack, copies it into your worlds and reloads the server. When it's ready, export it anywhere.

Terminal
$ gradlew koreRun --continuous
FolderZipFabricForgeQuiltNeoForge
Ecosystem & interop

Fits the tools you already use

Kore plays well with the datapacks, mods and editors around it.

What Kore does not do

Knowing the boundaries saves you time before you pick a tool.

Resource packs

Kore generates datapacks only. Textures, models and sounds still live in a separate resource pack.

Runtime speedups

Output is the same vanilla commands you would write by hand, so it runs exactly as fast, no faster.

Zero-setup editing

You need a JDK and Gradle, and a build step sits between editing and /reload.

Rough edges are tracked in Known Issues, and Why Kore covers when another tool fits better.

Build your first datapack in Kotlin

Craft your first datapack with Kore and enjoy the power of Kotlin for Minecraft development.

Get Started Migrate an existing pack