Java Edition NBT Editor

Supports Minecraft Bedrock Edition and Java Edition — and every server core for both, popular or obscure: Vanilla, Paper, Spigot, Purpur, Folia, Fabric, Forge, NeoForge, Mohist, Sponge, Bedrock Dedicated Server, PocketMine-MP, Nukkit, PowerNukkitX, Cloudburst, Dragonfly, Endstone, LeviLamina and the rest. Full list.

Minecraft Java Edition stores its data as big-endian NBT, almost always gzip-compressed. Drop any Java file below — level.dat, a playerdata UUID file, servers.dat, a structure .nbt, a WorldEdit schematic — and the editor decompresses it, parses it big-endian and writes it back gzip-compressed so the game accepts it unchanged.

VanillaPaperSpigotPurpurFoliaFabricQuiltForgeNeoForgeSponge

Drop a Java NBT file here

level.dat · .nbt · .mcstructure · .schem · .schematic · .dat · chunk dumps

What a Java world is made of

Everything below opens in the editor above. Region files themselves (.mca) are a container of many compressed chunks rather than a single NBT document, so extract a chunk payload first — the editor reads the zlib-compressed chunk NBT that comes out.

PathContentsCompression
world/level.datWorld name, game mode, rules, spawn, DataVersiongzip
world/level.dat_oldPrevious save of the same filegzip
world/playerdata/<uuid>.datInventory, ender chest, position, health, XP, attributesgzip
world/data/raids.dat, idcounts.dat, map_*.datRaid state, entity id counters, map itemsgzip
world/data/scoreboard.datObjectives, teams, scoresgzip
world/region/*.mcaChunk NBT inside a region containerzlib per chunk
servers.datMultiplayer server list from the clientnone
hotbar.nbtSaved creative hotbarsnone
*.nbt in datapacksStructures placed by structure blocks and jigsawsgzip

How Java encodes NBT

  • Big-endian. Every integer and float is stored most-significant byte first, matching Java's DataOutputStream.
  • Named root. The file starts with tag type 0x0A, then a UTF-8 length-prefixed root name — historically empty in level.dat.
  • Modified UTF-8. Strings use Java's writeUTF encoding: a two-byte length, NUL written as C0 80, and characters outside the basic plane split into two three-byte halves (CESU-8). A tool that treats this as plain UTF-8 mangles emoji in world names; this editor encodes it correctly.
  • gzip by default. NbtIo.readCompressed expects a gzip stream. Files written uncompressed load in some tools but not in the game.
  • Nameless root on the network. Since 1.20.2 the protocol sends NBT without the root name. Packet dumps in that shape are detected as Java network here.

Paper, Spigot, Fabric, Forge — same files

Forks and mod loaders change how the server runs, not how the world is written. Paper, Purpur, Pufferfish, Folia, Fabric, Quilt, Forge, NeoForge, Mohist, Arclight and Sponge all use Vanilla's NBT layout, so anything on this page applies to them unchanged. What forks do add is extra files beside the world — paper-world.yml, mod configs — which are YAML or TOML and unrelated to NBT.

Mods and plugins may add their own compounds inside level.dat or playerdata. Those tags open here like any other; leave them alone unless you know what the mod does with them.

DataVersion and version migration

Java worlds carry a DataVersion integer that identifies the world format, incremented on every snapshot. Some useful anchors: 1.16.5 is 2586, 1.17.1 is 2730, 1.18.2 is 2975, 1.19.4 is 3337, 1.20.4 is 3700, 1.21 is 3953. Opening a world in an older client than the one that wrote it is refused precisely because of this tag, and lowering it by hand does not downgrade the chunk data behind it — it just removes the guard rail. Read it to find out what wrote a world; do not edit it to force a downgrade.

Frequently Asked Questions

Can I open a Java level.dat that will not load in game?

Usually yes — the editor is more tolerant than the game about trailing bytes, and it reports exactly where parsing stopped if the file is truncated. If it refuses too, try level.dat_old, which is the previous autosave.

Does it support 1.20.2+ network NBT?

Yes. From 1.20.2 the protocol omits the root name. A dump in that shape is detected as the Java network format and can be re-saved either as network NBT or as a normal named-root file.

Can I edit a chunk from a .mca region file?

You can edit chunk NBT once it is extracted from the region container. The .mca itself is an index plus many zlib-compressed chunk payloads, and this editor works on a single NBT document, not on the container.

Will editing playerdata break the player?

Only if the server is running while you do it — it holds player state in memory and writes it out on logout, overwriting your file. Take the player offline, edit, then let them reconnect. See the playerdata editor.

Is a gzip level.dat required?

The vanilla loader reads gzip. Save with compression set to gzip — the default when the file arrived that way — and the game will accept it.

Related tools