Mawu · Features

Subsystem Glossary, Surfaces & the Trust Boundary

A focused page within the Mawu Features documentation. The full map and every sibling page live in the Features hub.

6sections12 minread1diagram2tables

On this page
flowchart LR Creator[Creator Studio] --> Package[Signed realm package] Package --> Resolver[Dependency and lock-file resolver] Resolver --> Sandbox[Fuel-limited WASM sandbox] Sandbox --> Realm[Server-authoritative realm plane] Realm --> Client[UE5 client] Realm --> Platform[Platform control plane] Platform --> Identity[Identity and policy] Platform --> Market[Catalog and settlement] Realm -. no direct authority .-> Market

The trust boundary sits between executable realm code and platform authority. Creator packages may influence their sandboxed realm, but identity, policy, catalog, and settlement stay outside that authority and are reached only through explicit capabilities.

This is the orientation page for the V7 feature set — the page to read before any of the deep feature pages, so that when a later page says "the realm composes a FMawuRealmLockFile," "a character's cash_minor never goes negative," or "the realm server runs moremi-realm-server on port 47201," the name already lands on something real you can open. V7 — codename Mawu — is Oshun's open-world creator republic: a UE5.5 LTS client plus a fleet of Rust services that let community creators author, host, and run their own persistent, server-authoritative realms, with executable user-generated content rather than just data. Its scope is split across a small number of durable surfaces: one Unreal project with three build targets, a Rust workspace of realm-plane services, a Rust workspace of shared crates, a TypeScript contracts plane, two TypeScript market/governance services, and a web Studio tile. Every feature this set documents ultimately resolves to code in one of those surfaces. The job of this page is to give you the map: the subsystem names and where they live in code, the product surfaces and their target paths, and the platform-vs-realm trust boundary that is the single most consequential decision in the design.

It is the product-side companion to the architecture thesis. Where the architecture page ../architecture/thesis-trust-boundary-and-topology.md reconciles the module graph, the determinism contract, and the topology diagram against the compiler, this page reads the same disk from the player-and-creator angle: which named subsystem delivers which advertised capability, and — kept honest throughout — where the glossary's name and the disk's reality diverge. The single source of truth for completion state remains the backlog; this page is the index, not the checklist. It is the foundations companion to the feature catalogue at ../V7_features.md.

What ships, honestly#

Real and on-disk. The realm plane is a Cargo workspace (apps/v7/Cargo.toml, unsafe_code = "forbid") of six Rust services, each with a ServiceDescriptor (name, owner, port, capabilities) and its own main.rs. The anchor is moremi-realm-server (port 47201, 14,883 lines, 69 #[test] blocks): it embeds a genuine Wasmtime 45 runtime (config.consume_fuel(true), nan_canonicalization: true, StoreLimitsBuilder) and a genuine PubGrub resolver (pubgrub = "0.3.0" + semver), so the WASM sandbox and dependency resolver the docs call "Ixchel" are not slideware — they run inside the realm server. Alongside it: danu-mesh-cluster (47202, 22 tests), nephthys-replica-service (47203, 15 tests), mawu-gateway (47204, 16 tests), sekhmet-scanner (47205, 15 tests), and hera-social-service (47206, 7 tests). Three shared crates under libs/v7/ (nana, realm-protocol, substrate-bridge) carry the cross-service vocabulary — realm-protocol alone runs 30 tests over envelopes, prediction, snapshot interpolation, delta compression, and lag compensation. The contracts plane libs/v7/contracts registers 10 Zod contracts (V7_CONTRACT_REGISTRY) and a content-addressed realm-lock composer (realm-lock.ts). The Mawu UE5.5 client (V7/ue/) is six C++ modules across three build targets that compose a realm lock file into live procedural geometry.

Genuinely reused (compiled, not mocked). substrate-bridge's default_substrate_bindings() labels exactly two of thirteen boundaries Reused: the V6 Ori event store + Aye Bridge (apps/v6/egbe-ori-service + libs/v6/aye-bridge) and the Maya engine-core (libs/maya/engine-core/crates/maya-world). These link and execute real upstream code, which is why the trust-boundary and identity-firewall evals run end to end without a live platform deployment.

Where the product glossary and the disk diverge (found by reading both):

  • The glossary labels nana "TS + Rust"; the crate is Rust-only. libs/v7/nana/ contains exactly Cargo.toml, project.json, and src/lib.rs — no TypeScript. The "TS" half of Nàná is the Character Zod contract inside libs/v7/contracts, not the crate.
  • Abundantia and Eunomia are labelled "TS/NestJS"; on disk they are framework-free TypeScript. apps/v7/abundantia-market-service (4,552-line service.ts) and apps/v7/eunomia-governance-service (1,574-line service.ts) declare no @nestjs/express/fastify dependency at all — their only deps are @types/node, tsx, typescript, vitest. They are real, substantial domain services started with tsx src/main.ts, just not Nest apps.
  • Three advertised surfaces do not exist yet. apps/v7/mawu-web (Pixel Streaming player), apps/v7/mawu-web-fallback (three.js/WebGPU spectator), and the apps/oshun/admin/src/app/mawu Operator Console are absent — planned surfaces, not shipped paths.
  • libs/maya/forge-* are scaffolds; the production runtime is inside Moremi. All four (forge-resolver, forge-conflict, forge-sandbox, forge-compositor) exist as early API crates, but the resolver and sandbox that actually gate live realms are the PubGrub + Wasmtime code inside moremi-realm-server.

Everything below is grounded in those files; where a claim is the glossary's intent rather than shipped code, it is labelled.

The subsystem glossary, mapped to code#

The product glossary in ../V7_features.md names eleven platform substrates. Here each is resolved to the directory that implements it, with the load-bearing symbols named and the honest caveats kept.

Glossary subsystem On disk Anchor symbols / files Notes
Mawu V7/ue/ (6 modules, 3 targets) Mawu.Target.cs, AMawuComposedRealmActor::ApplyLockFile The product brand + canonical UE5.5 client; renders any realm
Moremi apps/v7/moremi-realm-server/ (47201) DESCRIPTOR, Wasmtime config, pubgrub Authoritative sim; the real WASM sandbox + resolver live here
Danu apps/v7/danu-mesh-cluster/ (47202) DESCRIPTOR; authority handoff, split/merge Server meshing for 1000+ inhabitants
Nephthys apps/v7/nephthys-replica-service/ (47203) DESCRIPTOR; event-sourced store Decoupled, crash-resilient source of truth
Pheme apps/v7/mawu-gateway/ (47204) + MawuVoice DESCRIPTOR; positional voice SFU Not a standalone service — voice rides the gateway; client is MawuVoice
Nàná libs/v7/nana/ (Rust) + Character contract NanaCharacterRecord, cash_minor/bank_minor/society_minor, validate() Glossary says "TS+Rust"; crate is Rust-only
Hera apps/v7/hera-social-service/ (47206) DESCRIPTOR; crews, treasuries, cross-realm bans 5 s ban-propagation SLA
Ixchel libs/maya/forge-* + inside Moremi forge-resolver/-conflict/-sandbox/-compositor forge-* are scaffolds; production runtime is in Moremi
Abundantia apps/v7/abundantia-market-service/ service.ts (4,552 lines) Glossary says NestJS; on disk plain TS
Eunomia apps/v7/eunomia-governance-service/ service.ts (1,574 lines) Plain TS; proposals + plural voting
Sekhmet apps/v7/sekhmet-scanner/ (47205) DESCRIPTOR; static/dynamic scan Malware, CSAM/grooming, supply-chain integrity

The realm plane — six Rust services#

The five rows the rest of the feature set leans on hardest — Moremi, Danu, Nephthys, the gateway (Pheme's transport), and Hera — are the authoritative backbone, and they are trust-segregated from the platform. Each carries a pub const DESCRIPTOR: ServiceDescriptor fixing its name, owner, and port, and the workspace forbids unsafe. Moremi is the anchor: a dual-tick loop (MOREMI_COMBAT_TICK_HZ = 60 for combat zones, MOREMI_OPEN_WORLD_MIN_TICK_HZ = 10 up to a 30 Hz ceiling, a fixed-timestep baseline of 30) over a deterministic core, with the Wasmtime + PubGrub runtime that makes "run untrusted code safely" literal. Danu hands authority between mesh nodes and splits/merges them under load; Nephthys is the event-sourced store that survives a sim node crashing; the gateway is the single client ingress and therefore the one place interest management and rate limiting are enforced — and the carrier for Pheme positional voice. Hera owns the persistent social graph and the cross-realm ban that the trust boundary requires. The deep treatment is ../architecture/moremi-realm-server-and-netcode.md and its mesh/persistence companion.

The market, governance, and safety plane#

abundantia-market-service and eunomia-governance-service are the market/governance plane — outside the Rust realm fleet by design, because catalog, payouts, proposals, and voting are platform concerns, not realm gameplay. Both are substantial TypeScript domain modules (Abundantia's service.ts models console-authorization status, artifact kinds, and browser sorts across pc/xbox/playstation/switch/cloud), the glossary's "TS/NestJS" label notwithstanding. Sekhmet (sekhmet-scanner, 47205) sits on the platform side of the boundary: nothing reaches a client unscanned. The deep pages are the Abundantia economy-firewall and Eunomia governance architecture companions.

Ixchel — the modding runtime that lives in two places#

Ixchel is the one subsystem whose name maps to two locations, and the split is the most important caveat on this page. The four libs/maya/forge-* crates are the advertised home, and they exist — but they are early API scaffolds (the resolver's own docs say the full V7 resolver "will use PubGrub"). The runtime that actually resolves dependencies and sandboxes creator code for a live realm is the PubGrub + Wasmtime code inside moremi-realm-server. Read the modding runtime as a product feature in ./ixchel-sandbox-and-modding.md; read its engineering in ../architecture/ixchel-modding-runtime-and-wasm-sandbox.md.

The shared vocabulary crates#

Three crates under libs/v7/ and one TS plane carry the cross-service contract, and the rest of the feature set names them constantly:

  • nana — the roleplay record. NanaCharacterRecord holds realm-scoped balances (cash_minor, bank_minor, society_minor as i64 minor units) whose validate() refuses to let any go negative. This is the play-currency that is structurally non-fungible with the real-money economy.
  • realm-protocol — the wire contract (30 tests). It advertises 20 baseline capabilities (baseline_realm_capabilities()) and fixes the numbers every transport must honor: a 32-snapshot ring (REALM_DELTA_SNAPSHOT_RING_SIZE = 32), a 1,400-byte pre-fragment cap (REALM_DELTA_PREFRAGMENT_BYTES), and the rule that a RealmEnvelope whose RealmMessageKind is anything but a scope-bearing ClientIntent is rejected with UnexpectedMessageKind.
  • substrate-bridge — the boundary to the rest of Oshun. Its V7Substrate enum names thirteen upstream boundaries; default_substrate_bindings() marks the V6 Ori/Aye Bridge and Maya engine-core Reused and the other eleven (the V1 platform plus the V6 Egbe gateway) Mock — clean local stand-ins, not fake "fully wired." This crate also holds the V7IdentityFirewall and the trust-boundary evals (below).
  • contractsV7_CONTRACT_REGISTRY (10 Zod contracts: Realm, RealmLock, Character, ModCollection, Listing, Payout, Governance, ScanReport, and two more) with a content-addressed composeV7RealmLockFile whose hashV7ContentAddressedPayload is a sha256: digest over canonical JSON.

Cross-domain substrates (carried from V1/V3/V5/V6)#

The cross-domain names the docs use — Ori (portable identity), Maya (the engine), Aje (commerce/payouts), Lilith (safety/persona), Kuanyin (moderation), Themis (adjudication), Isis (governed generation), Sophia (grounding), Iris (memory boundaries), Psyche (live agent runtime), and Yemaya (non-real-time media) — are exactly the boundaries the V7Substrate enum pins to a concrete package_ref. The honesty already noted is that all but Ori/Aye Bridge and Maya engine-core are Mock today.

Product surfaces#

The user-facing entry points map to target paths as follows; paths are real today except where marked planned:

Surface Target path State
Mawu UE5 client (canonical) V7/ue/ Real — 6 C++ modules, 3 targets
Web entry via Pixel Streaming apps/v7/mawu-web/ Planned — not created
Tier-2 web fallback (three.js/WebGPU) apps/v7/mawu-web-fallback/ Planned — not created
Moremi realm server framework apps/v7/moremi-realm-server/ Real — Rust, 47201
Danu meshing fleet apps/v7/danu-mesh-cluster/ Real — Rust, 47202
Nephthys persistence layer apps/v7/nephthys-replica-service/ Real — Rust, 47203
Gateway + Pheme voice SFU apps/v7/mawu-gateway/ Real — Rust, 47204
Sekhmet trust-and-safety scanner apps/v7/sekhmet-scanner/ Real — Rust, 47205
Hera social-graph service apps/v7/hera-social-service/ Real — Rust, 47206
Abundantia distribution + economy apps/v7/abundantia-market-service/ Real — plain TS
Eunomia governance service apps/v7/eunomia-governance-service/ Real — plain TS
Mawu Studio (creator tools) apps/oshun/web/src/app/mawu-studio/ + UE Editor Real — accessibility/, localization/ subroutes wired to @v7/contracts
Mawu Operator Console apps/oshun/admin/src/app/mawu/ Planned — not created

The canonical client (V7/ue/). Three build targets — Mawu.Target.cs (game), MawuDedicatedRealmServer.Target.cs (Type = TargetType.Server, which strips CommonUI/EnhancedInput/WebBrowser so the headless authority ships no player UI), and MawuEditor.Target.cs — over six modules: MawuCore, MawuRealm, MawuBuilder, MawuVoice, MawuUI, and the MawuTests DeveloperTool. The load-bearing claim is that the client builds worlds from data: AMawuComposedRealmActor::ApplyLockFile(const FMawuRealmLockFile&) takes the very lock file realm-lock.ts composes and reconstructs it into procedural geometry, so a realm is a content-addressed manifest, not a shipped binary level.

Mawu Studio is the one creator surface that is real and reachable today: apps/oshun/web/src/app/mawu-studio/ renders MawuStudioAccessibilityWorkspace from a runV7MawuAccessibilityEval fixture imported from @v7/contracts, so the web Studio is genuinely wired to the contracts plane, not mocked HTML.

The trust boundary — platform vs. realm#

The most consequential design decision in V7 is who runs the authoritative server, and the answer is a deliberate hybrid that splits along trust, not hosting. FiveM is community-hosted and so can never be trusted with identity, economy, or safety; Roblox is platform-hosted and so owns all compute. V7 keeps platform-hosted, inviolable services for identity, the real-money economy, client integrity, and child-safety; community-hosted realm logic only, and only as capability-sandboxed WASM behind a hardened, attested client an operator cannot patch. A realm operator is assumed potentially hostile.

These concerns are never delegated to a realm — they live on the platform plane behind the gateway: platform identity/auth (a realm sees only an opaque per-realm handle), the real-money economy and payouts (settle through Aje, never touch a realm process), client integrity and anti-tamper, child-safety/CSAM/age assurance, cross-realm bans and reputation, and asset malware scanning. What a realm does own: its world, rules, scripts, content, jobs, in-realm play-currency, and moderation above the platform safety floor — all inside the Ixchel sandbox.

What makes this product-side and not aspirational is that the boundary is executable in substrate-bridge. The V7IdentityFirewall::project() projects an authenticated principal into a V7RealmScopedIdentity whose opaque_handle is a real HMAC-SHA256 of (pepper, schema_version, tenant_id, user_id, realm_id) — the realm never sees a platform account id, which defeats both spoofing and realm-hop ban evasion. The run_trust_boundary_eval harness renders the exact JSON a realm process can reach and probes it with a hostile corpus hunting for the session token, payout credential, and the field names that would carry them; the report passes only when no term leaks. The same realm side keeps gameplay in a structurally separated currency: the cash_minor / bank_minor / society_minor balances on NanaCharacterRecord are realm-scoped i64s that a hostile operator can mint or seize inside their own world without ever touching real money or another realm's ledger. The technical enforcement — the webview escape eval, the event-tamper state_hash proof, the determinism contract — is detailed in the architecture companion ../architecture/thesis-trust-boundary-and-topology.md.

Cross-reference conventions#

The whole feature set uses a single citation grammar so a reference is never ambiguous about which document it points into:

  • Bare §N / §N.MV7_TODOS.md — the backlog is the only V7 document with section ids used as hyperlinks.
  • deps§NV7_DEPENDENCIES.md; arch§"<anchor>"V7_ARCHITECTURE.md by named anchor; features§"<anchor>" → this document set by named anchor.
  • maya§"<anchor>"DOMAINS/maya/features.md; v5§N/v6§N → the respective prior backlogs.

V7_features.md and the architecture pages use named anchors, not numbers, precisely so they never drift from the backlog's numbering scheme.

Where to go next#