Minecraft Bedrock · algorithms 26.50 - 26.60 · WebAssembly

Every Bedrock seed,mapped beforeyou mine.

OpenBase draws the biome map, the structures and the spawn point of any Bedrock seed in your browser, using the game's own generation algorithms rebuilt as readable code. Nothing is uploaded. There is no server to upload to.

01

Origin

What is OpenBase?

OpenBase is a reconstruction project. It started with Chunkbase, the Bedrock seed map, whose engine reaches the browser as WebAssembly compiled from Rust: quick to load, small to serve, and completely opaque. A wasm file is instructions without names, comments or source, and that is all a visitor ever receives.

So the binary was taken apart, piece by piece. The WebAssembly text format (wat) rendered it as instructions a person can read, wasm2c translated whole functions into C, and then the slow part ran by hand: every routine traced back to what it computes, named, and rewritten as source. OpenBase is that translation finished and running. The pages you are on execute the rebuilt engine, compiled back from its reconstructed source.

The pipeline, from bytes to badges

In everyday terms, the whole journey goes like this. The engine arrives in your browser as a .wasm file, and that file is a recipe printed in barcode: the computer scans the stripes and bakes perfectly, while a person looking at the same page sees nothing but stripes. Pure instructions, no names, no comments, no hint of what any part is for.

The first tool, wat, decodes that barcode into readable text, and this is where the problem shows its real size: the module ships 39 exports, and the Rust compiler had shrunk every single name down to one letter. Imagine finally reading the recipe and finding every ingredient listed as i, j or k. Correct, complete, and completely anonymous.

The second tool, wasm2c, translates the whole module into C source. It works like a dictionary translation of a foreign cookbook: every word is right, every sentence is stiff, and no cook would ever write like that, yet nothing is missing either. That faithful, ugly text is exactly what makes it usable as raw material.

The last step is the one no tool can do, and it is the same craft as recreating a restaurant's secret dish at home: taste, guess, cook, compare, repeat until the plate matches. Here, tasting means tracing: run a routine, watch what it computes, give it a name, rewrite it as readable source, then prove the rewrite draws the exact same map as the original barcode. That is the step that turns a translation into an understanding.

Village placement, climate noise, stronghold rings, the 2% zombie roll: each came back as named code, and each is something you can toggle on the map today. What began as a single-letter export table is now a repository with sentences in it.

02

Engine

How the engine runs

One requirement shaped the build: the generation math runs on your machine, and only there. Everything below follows from that single decision, including what the tool refuses to be.

Computation
A WebAssembly module in a pool of web workers. Tile fills and structure scans run off the main thread, so panning and zooming never stutter.
Input
Any Bedrock seed. Numbers are used exactly as typed; words are hashed the way the game hashes text seeds.
Output
The biome map, structure positions with block coordinates, the spawn point, and per-structure detail on click, including a ready-made /tp command.
Dimensions
Overworld, Nether and End, each with its own climate rules and its own structure set, all derived from the same seed.
Servers
None. There is no backend between you and the engine, so there is nowhere for your seed to go.

03

Tools

Two ways to use it

The same engine answers two opposite questions, so it ships as two tools. Both run entirely in the browser, and both accept the same seeds.

The map

Answers what is here. Pan and zoom across the three dimensions, toggle every structure type, and click any badge for its block coordinates, its details and a ready-made /tp command. The preview in the hero is the live engine on a fixed window; the map is the same thing without limits.

The finder

Answers the opposite question: which seeds put it there? Stack biome and structure conditions, each with its own center and radius, and the engine tests seed after seed in your browser until enough of them fit. Every result opens on the map in one click.

04

Flight

Step inside the seed

The map answers what is where from above. The flight view drops you into the middle of it: first person, no clip, over terrain built from the engine's own biome and height grids, block for block under you, colored with the map's own palette. The same wasm that paints the flat map extrudes every column you fly past, in your browser, from the seed alone.

Click the world to fly
VLetter badgePixel iconthe same Village marker in both styles, switched live at the top of the view
Region
Endless. Terrain streams in 128-block sectors around the camera and drops away behind the fog, so the world never ends and memory stays flat however far you fly. The sectors under you carry the game's own block-for-block heights; the far ring keeps the map's coarser grid.
Markers
The map's own letter badges, or its pixel icons, your pick from the Letter / Icon control at the top of the view. The scan ring follows you as you fly.
Controls
W A S D to fly, the mouse to look, Space and Shift for pure verticals, the wheel to scale speed. The arrows steer without a mouse, and touch gets its own flight pad.

05

Compare

Two seeds, one verdict

The finder answers one seed at a time. The comparison tool puts two worlds on one screen: the engine fills the same neighborhood window for seed A and seed B, paints both biome maps side by side, then walks the grids cell by cell and flags every place they disagree. Spawn-adjacent layouts, biome shares, the exact line where a better seed starts: all three land in one view, computed by the game's own algorithms.

The A / B mechanism · one window, two fills

two engine instances

Both sides run the full Bedrock pipeline in your browser, nothing server-side, so the comparison is the same computation the map would show for each seed:

the URL carries both seeds, the dimension, the window and the view - a pasted link opens the exact comparison

The window

default 512
radii256 / 512 / 1024 / 2048 blocks
centereach spawn, or one shared X Z
viewssplit maps, or the difference map
dimsoverworld / nether / end

Spawn mode centers each window on its own seed's spawn point - the neighborhoods you would actually spawn into - while shared-coordinates mode pins both to the same spot for a fair cell-by-cell fight.

06

Biomes

The biome rules

Every color on the map is a decision the engine made. The biome dictionary turns those decisions into a reference: three dimensions, three different rules for picking a biome, and for each biome the full table of who can sit next to it. The numbers quoted below are counted from the engine's own output, never copied from a wiki.

Overworld · nearest climate box

3,796 boxes · 53 biomes

Each world column becomes six climate readings (temperature, humidity, continentalness, erosion, depth, weirdness), every axis an integer between −10000 and 10000. The biome is whichever leaf box lies nearest on those axes. The specimen is Desert's own box: temperature alone carves it, the other axes stay open.

T
0.55 … 1.00
H
-1.00 … 1.00
C
-0.19 … 1.00
E
-1.00 … 1.00
W
-1.00 … 1.00

the code's own climate box (surface band, D = 0)

its borders actually meet:

River41.7%Warm Ocean19.1%Badlands11.1%

share of Desert's observed border cells

Nether · a 5-prototype Voronoi

2 channels

No depth, no continents: temperature and humidity place every quart on a plane, and the biome is the nearest of five fixed prototypes. Two of them carry a constant distance penalty that shrinks their territory into bands.

Nether Wastes(0.00, 0.00)0
Crimson Forest(0.40, 0.00)0
Soul Sand Valley(0.00, -0.50)0
Basalt Deltas(-0.50, 0.00)+1750²
Warped Forest(0.00, 0.50)+3750²

The End · island geometry

1 height value

No climate at all. Inside the main island's circle, radius 64 sixteen-block cells on every seed, the biome is The End. Outside, each cell reads one island-height value f, and a plain threshold picks the biome:

f > 40End Highlands
0 ≤ f ≤ 40End Midlands
−20 ≤ f < 0End Barrens
f < −20Small End Islands
field notesengine-verified
nether
soul sand valley and warped forest never share a border: 0 crossings in the plane analysis and in 13,500,000 sampled cells
overworld
sulfur caves (id 187) surfaced 129 times in 27,000,000 cells, always in windswept country: the quirk card

Sources, all recountable: 27,000,000 overworld cells across 12 seeds, 13,500,000 nether cells across 6, and a 12,000,000-trial walk of the climate channels' measured ranges. Every share above is a count of observed border cells.

07

Structures

The structure rules

Every letter badge on the map is the end of a dice chain the engine rolled long before the first block rendered. The structure dictionary turns that chain into a reference: the region grid that fences every placement, the four random number generators behind the rolls, and the gates that keep most candidates empty. The constants below are the engine's own, read out of its C code.

The region grid · one dice roll per cell

20 region types · 9 per-chunk · 1 special

The world is cut into region cells, spacing × spacing chunks each. Each cell stirs its coordinates, the world seed and the structure's own salt into one number, and an RNG rolls the candidate's offset inside it. The specimen is the village:

cell34×34 chunks (544 blocks)
salt10387312
rngMT19937 · low 32 bits of rs
drawfloor((nextInt(26) + nextInt(26)) / 2)

the offset can never leave [0, 26), so no two villages from neighboring cells sit closer than 9 chunks (144 blocks)

The four RNG cores

2 widths
Java Random (LCG)48-bit
MT19937 (Mersenne Twister)32-bit
Named feature seed32-bit
Plain feature seed32-bit

Java's LCG serves the trial chamber family; Mersenne Twister runs almost everything else and only ever sees 32 bits of the seed; two feature-seed recipes hash chunk coordinates for the underground features.

The gates · placement is not enough

one nextInt(6) per nether cell: < 2 fortress · ≥ 2 the bastion track

village · a ±2-block climate box must agree
ancient city · the biome at y = −27, not the surface
mansion · a ±32 cube that checks the caves below; buried ones pass on Lush Caves alone
nether portal · no gate at all, every candidate builds
field notesengine-verified
slime chunks
Slime chunks are the same in every world. The formula MT(cx · 522133279 ^ cz) → nextInt(10) == 0 never touches the world seed, so the slime map Bedrock draws for one seed is the map it draws for all of them (structures.c, BST_SLIME_CHUNK).
non-dark-forest mansions
A mansion needs zero dark forest to exist, and when it does the cube is always pure Lush Caves. Where the density scan and the climate spline disagree the anchor drops to py 24 or below and the whole cube passes on Lush alone: 20,000 seeds, 345,227 mansions, 937 under foreign map biomes, 935 buried cubes, not one Dripstone or Sulfur sample among them. That is terrain law: Dripstone's climate region (continentalness +0.30 up) never reaches the coastal band where cubes bury (+0.04 down), and coastal Sulfur needs weirdness below -0.35 while burial terrain holds 0 or above in 98.9 percent of 40,490 measured columns. The only Sulfur ever seen under a foreign map was the map layer itself answering Sulfur Caves at depth 0: a cave biome surfaced over dark forest, cubes anchored at the surface.
sister seeds
Structure placement only sees the low bits of the world seed (32 for Mersenne types, 48 for Java ones), so billions of world seeds share one structure layout; only the biome gates differ. The finder's Sister seeds toggle walks exactly these classes.

Sources, all recountable: 2,387 lines of reverse-engineered Bedrock 26.50 C; non-dark-forest mansions: 6 specimens + a 20,000-seed census, all pure Lush.

08

Catalog

The notation

On the map, every structure type is a colored badge with a letter: the engine's own shorthand, drawn exactly where the game's algorithms place it. This is the full legend, 32 types grouped by dimension. Dense underground types (geodes, ravines, dungeons) reveal themselves as you zoom in, which keeps the far view clean.

Overworld

26 types
  • VVillage
  • POPillager Outpost
  • MOcean Monument
  • WMWoodland Mansion
  • BTBuried Treasure
  • MSMineshaft
  • SHStronghold
  • DTDesert Temple
  • JTJungle Temple
  • WHWitch Hut
  • IIgloo
  • SWShipwreck
  • OROcean Ruin
  • ACAncient City
  • TCTrial Chamber
  • TRTrail Ruins
  • SCSlime Chunk
  • GAmethyst Geode
  • FFossil
  • DWDesert Well
  • RRavine
  • RPRuined Portal
  • CAbandoned Camp
  • DDungeon
  • EAEnchanted Apple
  • ZVZombie Village

Nether

4 types
  • NFNether Fortress
  • BBastion Remnant
  • RPRuined Portal (Nether)
  • FNether Fossil

End

2 types
  • ECEnd City
  • EGEnd Gateway

09

API

Ask the engine directly

The engine that draws the map also answers plain HTTP: 20 GET endpoints, no keys, no accounts. One call reads a seed's spawn and surroundings. Another reads a whole block column: the biome, the terrain levels, the cave biomes underneath, the climate that picked it. Another samples all 25 perlin noise channels, another lists every structure near any point with the same detail the map's popups show, and another returns a region as a grid of biome ids. Every answer is JSON, every call is rate limited per IP, and the quota rides along in the response headers so scripts can pace themselves.

10

CODE

Hunt with code

The finder's condition rows cover the common hunts. SeedScript covers everything else: your own JavaScript, running against the same engine, once per seed, as many seeds as your patience - on a pool of worker threads sized to your machine. Ask for the questions no dropdown can hold, like a double village inside 180 blocks, a village on a true island ringed by ocean, a spawn whose soil hangs over 28 blocks of open air, a windswept peak above y 180, or the sister of a seed whose stronghold finally sits on land.

Behind the editor: biome and structure queries, terrain heights and the floating-terrain column profile, area scans, cave bands, the region grid, climate channels, spawn, slime chunks and the sister-seed walk, the full catalog the map itself answers. Your code runs in a sandboxed worker with no network; hits stream in live and open on the map in one click, for as long as you let the walk run. Thirteen ready hunts ship as templates, a blank canvas starts your own, and the hunts you save stay in your browser; the reference page documents every function.

11

Rate

A judge for every seed

The map shows a world; the finder hunts one; the judge hands down a verdict. Hand it any seed (or roll the 64-bit dice) and it reads the world's own math within 2,048 blocks of spawn: every biome in the window, the skyline against sea level, sixteen kinds of landmark with distances and bearings, the nether pair off the portal estimate. Five scored categories, one number out of 100, and a commentary that names the strongest and weakest card on every seed. The judgment rules live on the page itself: no cloud AI, no invented numbers, and the same seed always says the same thing.

The verdict ladder

six tiers, 0 to 100

Where a score lands, straight from the judge's own tier table:

  • a legendary seed88 to 100
  • a great seed74 to 87
  • a decent seed57 to 73
  • a rough seed42 to 56
  • a brutal seed27 to 41
  • a cursed seed0 to 26

What gets weighed

five categories
  • The start spawn biome, the village next door, the portal plan22%
  • Structures sixteen landmark types, scored by distance22%
  • Biomes distinct count, ocean share, the rare treats20%
  • Terrain high point, high-country share, the spread22%
  • The nether bastion variant and fortress off the portal estimate14%

the weights sum to 100; a seed's score is the weighted mean

A seed is just a number until someone reads it. OpenBase is the reading: the map, the finder, and the source they came from.