Since day one, our mission has been to take the hardest parts of building an online game off your plate so you can focus on the fun. Our chunk-based engine already lets a single seamless world scale across many servers. But not every multiplayer game is one big seamless world — and today we’re closing that gap with dimensions.
What is a dimension?
A dimension is an independent, parallel instance of your game world. Each dimension has its own set of chunks, its own entities and its own simulation state, yet every dimension runs the same Lua scripts you’ve already uploaded. Think of a dimension as a self-contained copy of your world that shares your game’s rules but nothing of its live state.
Entities in one dimension cannot see or interact with entities in another unless you explicitly move them across. That isolation is the whole point: it gives you clean boundaries between players who should never share a world.
If a chunk is a tile of one world, a dimension is a whole world. Chunks scale a single space horizontally; dimensions let you run many independent spaces side by side.
Why we built it
Our chunk system is fantastic for persistent, seamless worlds — the sprawling MMO where everyone shares one map. But indie studios kept asking us for things that don’t fit that shape:
- Match-based games — a battle-royale or arena shooter needs many short-lived, isolated matches running at once.
- Lobbies and instances — party-based dungeons, raid instances, or private rooms that shouldn’t bleed into the public world.
- Sharding — when a single world gets too crowded, spilling overflow players into a duplicate shard keeps everyone playing smoothly.
- Staging and test realms — a safe copy of the live world to try changes against real scripts.
Before dimensions, building these meant awkward workarounds or running entirely separate games. Now it’s a first-class concept baked into the engine.
How dimensions work
One game, many worlds
Your game still has a single repository of entity scripts and a single control panel. Dimensions are created on top of that shared codebase, so there is no duplication of logic. Update a script once and every dimension picks up the new behaviour.
Creating and destroying dimensions
Dimensions can be spun up and torn down at runtime through the server-side API. A match-based game might create a fresh dimension the moment a lobby fills, then destroy it when the match ends and resources are no longer needed — keeping your footprint, and your bill, tightly matched to real demand.
-- Create a dimension for a new match
local dim = pp.dimensions.create({
template = "arena",
metadata = { mode = "3v3", region = "eu" },
})
-- Place players into it
for _, player in ipairs(lobby.players) do
pp.entity.move(player, dim, spawn_point())
end
-- Later, when the match is over
pp.dimensions.destroy(dim)Moving entities between dimensions
Entities — players included — can be transferred from one dimension to another. A player might leave the shared hub dimension, drop into a private dungeon dimension with their party, and return to the hub when they’re done. The transfer carries the entity’s state with it, so inventories, stats and progress survive the jump.
Independent simulation
Because each dimension is simulated independently, what happens in one has zero performance impact on another. A chaotic 200-player brawl in one match dimension won’t cost a single frame in the calm lobby next door. And just like chunks, dimensions that go idle can be unloaded so they stop consuming compute while preserving their state.
What you can build now
- MMOs with instanced dungeons and raids alongside a shared open world.
- Match-based shooters and MOBAs where every match is its own clean dimension.
- Social hubs that branch off into private rooms, mini-games and events.
- Massive worlds that shard automatically when population spikes.
Dimensions turn Planetary Processing from “one big world” into “as many worlds as your game needs” — using the same scripts, the same SDKs and the same control panel.
Available today
Dimensions are live now for all projects, including those on the free tier, and they’re fully documented in our developer docs. There’s no migration needed — existing games keep working exactly as before, with a single default dimension, until you decide to create more.
We can’t wait to see the worlds you build with this. Hop into our Discord to share what you’re making, ask questions, or just tell us which feature we should ship next.