Mods / Manifold
- Tags:
- Author:
- Pixnop
- Side:
- Both
- Created:
- May 20th at 8:42 PM
- Last modified:
- Jun 12th at 9:20 PM
- Downloads:
- 1343
-
Latest release (for Vintage Story 1.21.0-pre.1 - 1.22.3, potentially outdated):
Manifold-0.4.1.zip 1-click install
Manifold is a library mod for Vintage Story 1.21+ that lets other mods create and manage their own custom dimensions. It adds no content of its own - install it only because another mod depends on it.
Vintage Story 1.21+ Universal Zero Harmony NuGet API MIT
For players
Manifold is a dependency. If a mod you use requires Manifold, install this alongside it. It is safe on both client and server (Universal). On its own, it does nothing visible.
For mod developers
Manifold exposes a clean public API to declare and run custom dimensions:
- Custom dimensions - persistent or ephemeral, registered at boot or at runtime, identified by an
AssetLocationcode. - Active worldgen - implement
IWorldgenStrategy; Manifold pre-generates a chunk region around the arrival point before the player enters (bounded mode, configurable radius). Dimensions can also opt into streaming generation via.Streaming(loadRadius), which generates chunks on demand as players move with no fixed edge. The streaming radius is extended to the server view distance so generated terrain always reaches as far as players can see, and the relight band height is configurable per dimension viaWithRelightHeight. - Player transit - one call,
TeleportPlayer, moves a player between dimensions, with cancellable lifecycle events and opt-in helpers (a portal-block base class and a chat-command builder). - Non-player entity transit (0.3.0) -
TeleportEntitymoves items and other non-player entities between dimensions; the destination region is generated on demand before the entity is re-homed. - Block transit (0.4.0) -
TeleportBlock(source, targetDim, targetLocal)moves a single block plus itsBlockEntitystate (inventory, attributes, BE-behaviors) between dimensions, completing the Player / Entity / Block triplet. - Travel policy per dimension - pick the landing position (
SameCoordinates,DimensionSpawn, orLastVisited) and optionally force a game mode. - Per-dimension player inventory (0.3.0, opt-in) -
WithSeparateInventory(Hotbar | Backpack | Character)gives a dimension its own player inventory; profiles are stored in player moddata, saved together with the physical inventory, so they survive logout and server restarts with no item loss. - Per-dimension metadata (0.4.0) -
WithMetadata(key, value)attaches typed registration-time hints (display name, category, opt-in flags) readable by any consumer viaIDimension.GetMetadata<T>(key). Supports primitives,string,enum,byte[]. - Per-dimension streaming budget (0.4.0) -
WithStreamingBudget(maxColumnsPerTick)(range 1..64) caps streaming generation per dim per tick. Budgets are independent across dimensions so a busy dim cannot starve a quiet one. - Transit events (0.4.0) -
PlayerEntering(cancellable, pre-generation),PlayerArriving(cancellable, post-generation, pre-teleport),PlayerLeft/PlayerEntered(post-teleport), andEntityChangedDimension(postTeleportEntity). - Persistence - dimensions, generated chunks and per-player positions survive restarts. A dimension whose owning mod is removed is quarantined: its chunks are kept and transit is refused, never corrupted.
- Zero Harmony patches - built entirely on the public
VintagestoryAPI.
Quickstart
Add Manifold as a dependency in your modinfo.json:
"dependencies": { "manifold": "" }
Reference the API at compile time from the NuGet package Pixnop.Manifold:
dotnet add package Pixnop.Manifold
Then register a dimension from your mod system:
var manifold = sapi.GetManifoldServer(this);
manifold.Registry
.Define(new AssetLocation("mymod", "void"))
.Persistent()
.WithWorldgen(new BasicVoidWorldgenStrategy())
.RegisterStatic();
Full guide and API reference: pixnop.github.io/Manifold
Demo
Companion mods
Mods built on Manifold
Building something on Manifold? Tell me on the issue tracker or in the comments and I will list it here.
Why the name "Manifold"
In mathematics, a manifold is a space made of many local pieces glued into one coherent whole, and its structure is described by an atlas of charts (maps). The word also just means "many and various". That is exactly what this project does: it manages many dimensions as one system. It is also a nod to a mechanical manifold, the part that routes a single flow out to several outlets, like routing players out to several worlds.
Compatibility & source
- Vintage Story 1.21+, .NET 10, no Harmony required.
- Source: github.com/Pixnop/Manifold
- Issues: issue tracker
- MIT licensed.
| Mod Version | Mod Identifier | For Game version | Downloads | Released | Changelog | Download | 1-click mod install* |
|---|---|---|---|---|---|---|---|
| 0.4.1 | manifold | 1134 | Jun 12th at 9:20 PM | Manifold-0.4.1.zip | 1-click install | ||
|
Ephemeral dimensions now fire
For Vintage Story 1.21+. | |||||||
| 0.4.0 | manifold | 90 | May 30th at 8:46 PM | Manifold-0.4.0.zip | 1-click install | ||
|
Block transit, per-dimension metadata, per-dimension streaming budget, and two new transit events.
For Vintage Story 1.21+. | |||||||
| 0.3.1 | manifold | 38 | May 23rd at 3:02 PM | Manifold-0.3.1.zip | 1-click install | ||
|
Crash fix for Vintage Story 1.22.x.
For Vintage Story 1.21+. | |||||||
| 0.3.0 | manifold | 26 | May 23rd at 9:53 AM | Manifold-0.3.0.zip | 1-click install | ||
|
Per-dimension player inventory and non-player entity transit.
For Vintage Story 1.21+. | |||||||
| 0.2.0 | manifold | 23 | May 21st at 11:23 PM | Manifold-0.2.0.zip | 1-click install | ||
|
Streaming worldgen and refinements.
For Vintage Story 1.21+. | |||||||
| 0.1.0 | manifold | 32 | May 20th at 8:52 PM | Manifold-0.1.0.zip | 1-click install | ||
|
First public release.
Built against the 1.21.0 API and validated in-game on 1.22.2 — works across 1.21 and 1.22. | |||||||

Is it possible to create a dimension that has biomes like minecraft with this?
Would there ever be the possibility to support per-dimension temporal settings?
For example, a main dimension that has rifts, storms, and stability disabled; then a second dimension that has all of that enabled?
New mod released using Manifold: https://mods.vintagestory.at/show/mod/56037
Hi! Got a few questions about this:
Hey Moby, good questions.
Checking it out tonight after work. Thank you
Are there currently any alternate dimension mods already? not seeing any, but the existence of this mod implies that they exist.
Hey VaruunKaruk - honest answer: not really, not yet. Manifold itself is recent (first public release a few weeks ago, currently at 0.4.0) and still in active development. Manifold Sample (the demo companion) is the only public consumer right now, and Chart (a companion map mod) sits next to it.
The library exists ahead of the third-party dimension mods that would use it - the goal was to make the "custom dimension" piece a clean, shared foundation so mod authors do not have to reinvent it. A few people are already prototyping mods on top (some publicly, some not), so I expect that to change in the coming weeks/months.
If you have a specific dimension idea in mind, feel free to mention it - I am happy to point you at the relevant API bits.
Im trying! ts is hard!
I'm extremely picky on releasing unfinished mods, but keep a look out. I should be releasing the first version of the PPD mod soon™️
There is now
Hey Pix, can I reach out to you on Discord? I always ask before I do, kinda wanted to pick your brain and show you one of two projects I'm building using your framework. I think you might be impressed but well, better to show you than to leak my details on the project here. Unlike my other two projects, I'm trying to keep this one hush hush.
Hey LilianaXolkiyr - sure, easiest is the official Vintage Story Discord.
You can find me there as Pixnop, just DM me. Looking forward to seeing what you're building on top of Manifold.
Sent you a DM. Sorry it took so long to respond.
My guess is we live in very different timezones. Just lemme know when a good time is and what timezone. I also messaged in the Manifold mod thread in the official VS discord.
This is an absolutely incredible mod. I'm SUPER excited to see where this goes, and how it gets used. MIT Licensed too is huge. Massive props. 🥳
Is it possible to have separate weather/times of day per dimension?
Thanks, really appreciate it! 🙏
And yes on MIT: I think a library mod has to be permissively licensed or it isn't really a library. The whole point is for others to build on it and ship their own mods, so anything that blocks depending on it or redistributing it defeats the purpose.
Per-dimension weather and time of day is a good one. It's closer to the core philosophy than UI-side requests since it's about dimension behavior, though it does touch client rendering so it needs care. Could you open a GitHub issue with what you'd want (eternal night, fixed weather, a time offset)? If not I'll open it myself, but writing the use case down helps me judge how useful it is and whether it fits the lib's scope. No timeline yet, but I'd like Manifold to support it eventually.
I was going to ask about per-dimension player inventory yesterday, but now its implemented. Nice.
Are you planning on implementing native land claiming compatibility (preventing coordinate overlap or claim bleed between dimensions via
/land) and per-dimension chat or permission nodes?Hi! Good timing on the inventory, glad it landed when you needed it.
You're right that the vanilla /land system isn't dimension-aware out of the box, so claims would technically overlap across dimensions. Making it dimension-aware (claim isolation, no bleed between dim 0 and Manifold dimensions) makes sense to me, same for per-dimension chat and permission nodes. I want to scope it properly before committing though. Could you open a GitHub issue with the behavior you'd expect and the edge cases you care about? If you'd rather not, I'll open it myself, just say the word. Same goes for chat and permissions if you want to flag a use case there.
No timeline on either yet. Right now my focus is on a companion mod that gives custom dimensions a proper dimension-aware minimap, since that's been the most requested thing so far.
Hello! I've created issues report on github!
Same as El_Neuman with all logs files
Hi both, thanks for the reports and the log files. The in-flight implementation work is now done so I can focus on the fix, and I'm aiming to have it out by end of day today. I'll use Tisma's GitHub issue to track the fix and post the update here once it's deployed. Sorry for the trouble!
Follow-up: 0.3.1 is up. Fixes the MissingFieldException (VS 1.22 changed Entity.Pos from a field to a property; 0.3.1 ships a reflection-cached accessor that works on both 1.21.x and 1.22.x). Validated in-game on 1.22.x. Please grab it from the Mod DB and let me know if anything else looks off. Thanks again for the logs.
Why am I still seeing the error that prevents me from loading the world?
To rule out any interference, I created a separate clean VintageStoryData, but that didn’t help either.
As I understand it, everything works fine for you?
at Manifold.Internal.StreamingWorldgenDriver.GatherStreamingPlayers(Dictionary`2& byUid)
at Manifold.Internal.StreamingWorldgenDriver.GatherStreamingPlayers(Dictionary`2& byUid)
at Manifold.Internal.StreamingWorldgenDriver.OnTick(Single dt)
at Vintagestory.Common.GameTickListener.OnTriggered(Int64 ellapsedMilliseconds) in VintagestoryLib\Common\Model\GameTickListener.cs:line 36
at Vintagestory.Common.EventManager.TriggerGameTick(Int64 ellapsedMilliseconds, IWorldAccessor world) in VintagestoryLib\Common\EventManager.cs:line 134
at Vintagestory.Server.CoreServerEventManager.TriggerGameTick(Int64 ellapsedMilliseconds, IWorldAccessor world) in VintagestoryLib\Server\ServerEventManager.cs:line 145
at Vintagestory.Server.ServerMain.Process() in VintagestoryLib\Server\ServerMain.cs:line 882
I have been looking for something like this for a very long time. Thankyou!
why there is no NuGet package?
Hi! It's planned, I'll try to add it tonight if I have time. Versions will be tagged as -alpha for now since the API is still moving, but it should make depending on Manifold a lot easier. I'll update here once it's up on nuget.
It is up now