Rethink your datapack development experience with

Kore2.10.0
Minecraft26.2-snapshot-4

A modern, type-safe Kotlin datapack generator for Minecraft. Create complex datapacks without ever writing JSON or MCFunction manually.

Get Started GitHub
fun main() {
	val datapack = dataPack("test") {
		function("display_text") {
			tellraw(allPlayers(), textComponent("Hello World!"))
		}

		function("tp_random_entity_to_entity") {
			val target = allEntities(limitToOne = true) {
				sort = Sort.RANDOM
			}

			execute {
				asTarget(target)
				run {
					summon(Entities.CREEPER, vec3())
				}
			}
		}

		pack {
			description = textComponent("Datapack test for ", Color.GOLD) + text("Kore", Color.AQUA) {
				bold = true
			}
		}
	}

	datapack.generateZip()
}
Kotlin

Quick Installation

Start building your Minecraft datapacks with Kore by adding it to your project's dependencies.

Check out the latest releases or read the getting started.

dependencies {
    implementation("io.github.ayfri.kore:kore:2.10.0-26.2-snapshot-4")
}
Kotlin

Why choose Kore?

Kore is built by datapack developers, for datapack developers. Same output as a hand-written pack, without the stringly-typed guesswork.

architecture

Errors at build time, not on /reload

A misspelled item, a wrong selector argument or an invalid loot table field stops the compiler. You find out in your editor instead of after loading the world and reading the log.

data_object

Autocomplete for the whole game

Blocks, items, enchantments, sounds, advancements and every other registry are generated as enums straight from Minecraft's data. The API mirrors vanilla structure, so what you already know still applies.

group_add

Refactor a pack the way you refactor code

Rename a function and every call site follows. Share logic with real functions instead of copy-paste, split a large pack across files, and keep it reviewable in git.

book

Documented feature by feature

Every command, data-driven file and helper has a reference page with a copy-pastable example, plus guides for migrating an existing pack and a cookbook of common patterns.

Read the full comparison with hand-written datapacks, Sandstone and beet, including when Kore is the wrong tool.

fun myDatapack() = dataPack("my_datapack") {
	function("test") {
		say("Hello World!")
	}

	function("gamemode_creative") {
		gamemode(Gamemode.CREATIVE)
		tellraw(
			targets = allPlayers(),
			message = "You are now in creative mode!",
			color = Color.GREEN
		)
	}
}
Kotlin

Simple APIs

Kore provides simple and intuitive APIs to create Minecraft datapacks and call commands. Almost all the lists from the game are available as enums, so you are always sure to use the right value.

fun myDatapack() = dataPack("my_datapack") {
	function("execute_my_function") {
		execute {
			ifCondition(myPredicate)

			run {
				function(myFunction)
				scoreboard.player(self()) {
					add(myScore, 1)
				}
			}
		}
	}
}
Kotlin

Perfect for big projects

Kore is perfect for big projects, as it allows you to split your code into multiple files and use the full power of Kotlin to manage your code.

fun myDatapack() = dataPack("my_datapack") {
	val myRecipe = recipesBuilder.smithingTransform(
		name = "diamond_to_netherite"
	) {
		template(Items.DIAMOND_BLOCK)
		base(Items.DIAMOND_SWORD)
		addition(Items.NETHERITE_INGOT)
		result(Items.NETHERITE_SWORD)
	}

	function("give_recipe") {
		recipe(allPlayers()).give(myRecipe)
	}
}
Kotlin

JSON-less

By using Kore, you don't have to write a single line of JSON ever. You only have one language to learn and maintain. Feature-complete code completion and documentation are available in your IDE.

fun myDatapack() = dataPack("my_datapack") {
	function("kore_is_great") {
		advancement(allPlayers {
			gamemode = !Gamemode.CREATIVE
			nbt = nbt {
				this["using_kore"] = true
			}
		}) {
			grant(Advancements.Story.SHINY_GEAR)
		}

		playSound(
			sound = Sounds.Block.EnchantmentTable,
			source = PlaySoundSource.MASTER,
			target = allEntities()
		)
	}
}
Kotlin

Type-safe

We crafted generators for dozens of Minecraft lists, so you can be sure to use the right value at the right place. No more typos in your commands, JSON files, or functions.

Join Our Community

Connect with other Kore developers and get involved

Frequently Asked Questions

This is the most important concept in Kore. Standard Kotlin variables (val/var) and loops (for/while) are evaluated at compile-time to generate your datapack. To handle actual in-game logic at runtime, Kore provides built-in abstractions over Minecraft's scoreboards, command macros, and data storages. You write Kotlin, but Kore correctly maps your logic to Minecraft's execution engine. See the Runtime Logic guide for the full picture.

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