Interactive online map for Minecraft Bedrock servers
🗺️ Real-time rendering • 🎨 Depth shading • 👥 Player tracking
MipMap transforms your Minecraft Bedrock server into a living, breathing web map. As players explore, the world renders itself automatically — no commands, no waiting, just pure real-time magic.
Two parts. One vision:
🎮 Plugin — Captures chunk data as your world loads and streams it to the web
🌐 Web Server — Generates beautiful map tiles and serves an interactive interface
💜 The map that grows with your world.
No manual rendering. No restarts. Just exploration.
|
Chunks appear on the map instantly as they load in-game. Watch your world expand as players explore. Navigate between Overworld, Nether, and The End with a single click. Each dimension, beautifully rendered. See who's online, where they are, and even their Minecraft skins — all live on the map. |
Blocks rendered with depth-aware shading, ambient occlusion, and custom color palettes. Your world never looked this good. Pre-render entire regions with One command. One container. Your map is live in seconds. |
Download the latest plugin file from Releases and place it in your server's plugins folder. Restart the server.
For LeviLamina: You need to have LeviStone installed.
cd webmap
docker build -t mipmap-webmap .
docker run -d --name mipmap-webmap -p 8000:8000 mipmap-webmap✅ Done! Visit http://localhost:8000
cd webmap
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000✅ Done! Visit http://localhost:8000
| Command | Description |
|---|---|
/loadmap |
Start loading with default area from config |
/loadmap <minX> <minZ> <maxX> <maxZ> |
Start loading with custom coordinates |
/loadmap status |
Check current loading progress and remaining areas |
/loadmap help |
Display command usage |
Edit plugins/mipmap/config.toml:
| Key | Type | Default | Description |
|---|---|---|---|
sendPlayers |
boolean |
true |
Enable player position tracking |
api.chunks |
string |
"http://localhost:8000/api/chunks-data" |
Chunks data endpoint |
api.players |
string |
"http://localhost:8000/api/players-data" |
Players data endpoint |
mapLoading.batchSize |
int |
100 |
Number of chunks to process per batch |
mapLoading.maxAreas |
int |
10 |
Maximum concurrent loading areas |
blacklist.blocks |
array |
["air", "water", ...] |
Blocks to skip when finding surface |
Edit webmap/core/config.py:
| Key | Type | Default | Description |
|---|---|---|---|
MAP_SIZE |
int |
2000 |
Map viewport size in pixels (width/height) |
MAP_UPDATE_INTERVAL |
int |
5000 |
Player position update interval (milliseconds) |
MAP_DEFAULT_WORLD |
string |
"Overworld" |
Default dimension to display on load |
GENERATE_ZOOM_INTERVAL |
int |
300 |
Zoom level generation interval (seconds) |
Example:
MAP_SIZE = 3000 # Larger viewport for bigger screens
MAP_UPDATE_INTERVAL = 3000 # Update players every 3 seconds
MAP_DEFAULT_WORLD = "Nether" # Start in the Netherwebmap/data/
├── worlds/ # 🌍 World data organized by dimension
│ ├── Overworld/
│ │ └── tiles/ # 🖼️ Generated PNG tiles
│ │ ├── zoom-0/
│ │ ├── zoom-1/
│ │ └── zoom-2/
│ ├── Nether/
│ │ └── tiles/
│ └── TheEnd/
│ └── tiles/
├── skins/ # 👤 Player skin cache
│ └── default.png
└── failedTextures.json # 🚫 Failed texture loading log
Receives chunk data from the plugin.
Request Body:
{
"chunk": {
"dimension": "Overworld",
"blocks": [
{
"name": "minecraft:grass_block",
"coordinates": [64, 72, -32]
},
{
"name": "minecraft:stone",
"coordinates": [64, 71, -32]
}
]
}
}Receives player position data.
Request Body:
{
"players": [
{
"name": "Steve",
"skin": "89504e47...", // Hex-encoded PNG
"skinShape": [64, 64, 4],
"dimension": "Overworld",
"x": 123.45,
"y": 64.0,
"z": -67.89
}
]
}- 🌍 Overworld rendering
- ⚡ Real-time chunk updates
- 👥 Player tracking with skins
- 📦 Batch loading command
- 🐳 Docker deployment
- 🌌 The End dimension support
- 🔥 Nether dimension support
- 🎨 Custom dimension API
Contributions are welcome! Fork the repo, make your changes, and open a Pull Request.
This project is licensed under the MIT License. See LICENSE for details.
✨ MipMap - where each block finds its place. ✨
