Metaverse & Game Development
The WEB5 STAR SDK gives you access to OASIS' spatial layer — the map, virtual worlds (Celestial Bodies), quests, missions, inventory items and the OGEngine game framework that powers Our World.
What you'll learn
- The OASIS spatial data model: Celestial Bodies, Spaces, Zones
- Create a virtual world and populate it with map points
- Design quests and missions with objectives and rewards
- Place GeoNFTs on the real-world map and in virtual spaces
- Add inventory items and set up collection mechanics
- Integrate with the OGEngine (Our World game engine)
The WEB5 STAR SDK
Game and metaverse features live in the WEB5 STAR API — a layer above WEB4 that adds spatial awareness, game mechanics and celestial body management. Install alongside the WEB4 SDK:
npm install @oasisomniverse/web4-api @oasisomniverse/web5-api
import { OASISClient } from '@oasisomniverse/web4-api'; import { STARClient } from '@oasisomniverse/web5-api'; export const oasis = new OASISClient({ persistSession: true }); export const star = new STARClient({ baseUrl: 'https://api.web5.oasisomniverse.one', oasisClient: oasis // shares the same auth token });
Celestial Bodies — Virtual Worlds
A Celestial Body is a virtual world — a planet, moon, space station, dungeon or any other navigable environment. Players travel to Celestial Bodies via the Our World map and can interact with their contents.
import { star } from './oasis-star.js'; const { avatarId } = oasis.auth.getSession(); // Create a new virtual world const { result: world } = await star.celestialBodies.createPlanet({ name: 'Aetheria', description: 'A floating archipelago world of ancient ruins and sky-whales.', createdByAvatarId: avatarId, // World properties size: 'Large', // 'Tiny' | 'Small' | 'Medium' | 'Large' | 'Massive' biome: 'SkyIslands', atmosphere: 'Breathable', gravity: 'Low', // Map placement — where on the Our World map does this world's portal appear? mapLat: 51.5, mapLng: -0.12, imageUrl: 'https://myapp.com/worlds/aetheria-thumb.jpg', glbModelUrl: 'https://myapp.com/worlds/aetheria.glb' // 3D model }); console.log('World ID:', world.id); console.log('Map portal placed at:', world.mapLat, world.mapLng);
World hierarchy
| Type | Description | API method |
|---|---|---|
Planet | Main world — players' primary destination | star.celestialBodies.createPlanet() |
Moon | Satellite world, orbiting a Planet | star.celestialBodies.createMoon() |
SpaceStation | Orbital hub — hub world or trading post | star.celestialBodies.createSpaceStation() |
Asteroid | Small navigable body, often for mini-games | star.celestialBodies.createAsteroid() |
GrandQuincunx | Root of the celestial hierarchy — the multiverse | Pre-created by OASIS |
Map Points — Anchoring to the Real World
Map points let you pin content — buildings, portals, NPCs, loot crates, events — to real-world GPS coordinates that appear on the Our World AR/map layer. This is what powers location-based gameplay.
import { oasis, star } from './oasis-star.js'; // Add a map point (e.g. a portal to Aetheria near the Eiffel Tower) const { result: point } = await oasis.map.createMapPoint({ title: 'Portal to Aetheria', description: 'Step through to reach the sky-island world.', lat: 48.8584, // Eiffel Tower lng: 2.2945, type: 'Portal', // 'Portal' | 'NPC' | 'LootCrate' | 'Event' | 'Building' linkedWorldId: world.id, iconUrl: 'https://myapp.com/icons/portal.png', arModelUrl: 'https://myapp.com/ar/portal-gate.glb', activationRadius: 30 // metres — how close to activate }); // Load all map points in a bounding box const { result: nearby } = await oasis.map.getMapPointsInBounds({ minLat: 48.84, maxLat: 48.87, minLng: 2.27, maxLng: 2.32 }); // Load map points for a specific world const { result: worldPoints } = await oasis.map.getMapPointsForWorld({ worldId: world.id });
Quests & Missions
Quests are structured goals players complete to earn rewards. Missions are groups of quests that form a narrative arc. Both are first-class OASIS objects stored as typed Holons.
import { star } from './oasis-star.js'; // Create a quest const { result: quest } = await star.quests.createQuest({ name: 'The Lost Sky Compass', description: 'Find the three fragments of the ancient Sky Compass to unlock the Storm Keep.', worldId: world.id, difficulty: 'Medium', estimatedMinutes: 30, objectives: [ { title: 'Find the Eastern Fragment', type: 'CollectItem', itemId: 'compass-east' }, { title: 'Find the Western Fragment', type: 'CollectItem', itemId: 'compass-west' }, { title: 'Find the Northern Fragment', type: 'CollectItem', itemId: 'compass-north' }, { title: 'Return to Sky Cartographer', type: 'TalkToNPC', npcId: 'sky-cart-001' } ], rewards: { karma: 'CompletingQuest', xp: 500, items: [{ itemId: 'storm-keep-key', quantity: 1 }], nftMint: true // automatically mint commemorative NFT on completion }, createdByAvatarId: avatarId }); // Group quests into a mission (narrative arc) const { result: mission } = await star.missions.createMission({ name: 'Secrets of Aetheria', worldId: world.id, questIds: [quest.id], // add more quests as you create them createdByAvatarId: avatarId });
Tracking quest progress
// Start a quest for an avatar await star.quests.startQuestForAvatar({ questId: quest.id, avatarId }); // Mark an objective complete await star.quests.completeObjective({ questId: quest.id, objectiveId: quest.objectives[0].id, avatarId }); // Complete the quest (triggers reward payout) await star.quests.completeQuestForAvatar({ questId: quest.id, avatarId }); // Load all active quests for a player const { result: active } = await star.quests.getActiveQuestsForAvatar({ avatarId });
Inventory Items
In-world objects players can pick up — keys, crafting materials, weapons, consumables. Unlike NFTs, inventory items don't require on-chain minting and can be stacked.
// Define an item type (do this once, at game setup) const { result: itemType } = await star.inventoryItems.createItemType({ id: 'compass-east', name: 'Eastern Compass Fragment', description: 'One piece of the ancient Sky Compass.', iconUrl: 'https://myapp.com/items/compass-east.png', glbModelUrl: 'https://myapp.com/items/compass-east.glb', stackable: false, tradeable: false, rarity: 'Uncommon' }); // Give an item to a player (after they find it in-world) await oasis.avatar.addItemToAvatarInventory({ itemId: itemType.id, name: itemType.name, quantity: 1 });
Integrating with OGEngine
The OGEngine (Our World Game Engine) is the Unity/Unreal-backed 3D engine that powers the flagship Our World game. If you're building a Unity or Unreal game, use the OGEngine SDK to access all OASIS data natively in-engine.
Available as a Unity package and Unreal plugin. Download from the Dev Portal under "SDKs & DevKits". The package exposes OASISManager MonoBehaviour / Actor component that wraps the full WEB4 + WEB5 API surface with coroutine-friendly async wrappers.
using NextGenSoftware.OASIS.API.Core; using NextGenSoftware.OASIS.STAR; public class QuestManager : MonoBehaviour { private async void Start() { // Login with saved credentials var loginResult = await OASISManager.Instance.Avatar.LoginAsync( email: PlayerPrefs.GetString("email"), password: SecureStorage.Get("password") ); // Load active quests var quests = await OASISManager.Instance.Quests .GetActiveQuestsForAvatarAsync(loginResult.Result.Id); foreach (var quest in quests.Result) Debug.Log($"Active quest: {quest.Name}"); } public async void OnItemCollected(string itemId) { // Mark objective complete in current active quest await OASISManager.Instance.Quests.CompleteObjectiveAsync( currentQuestId, itemId, currentAvatarId ); } }
GeoSpatial Tips for Game Designers
- Density matters — space GeoNFTs at least 100m apart in dense urban areas; 500m+ in rural settings to avoid clustering.
- Safety first — never place collectible points inside private property, on busy roads, or in waterways. The OASIS moderation team reviews flag reports.
- Accessibility — always provide a "virtual collect" option for users who cannot physically travel, activated by a karma payment or time gate.
- Seasonality — use the
activeFrom/activeTofields on map points to run time-limited events without deleting and recreating them.
The Natural History Museum placed GeoNFTs at each exhibit. Visitors scan a QR code at each exhibit to collect the species NFT. Collecting all 24 species unlocks a "Master Naturalist" badge NFT and a free book in the museum shop. Because the NFTs are OASIS-native, they also appear in the visitor's Our World avatar wallet — becoming a permanent, shareable trophy of their visit long after the day is over.
STAR / WEB5 API Quick Reference
- star.celestialBodies.createPlanet({name, description, mapLat, mapLng, ...})Create a virtual world
- star.celestialBodies.getPlanet({id})Load a world by ID
- oasis.map.createMapPoint({lat, lng, type, title, ...})Pin content to the world map
- oasis.map.getMapPointsInBounds({minLat, maxLat, minLng, maxLng})Load map points in a bounding box
- star.quests.createQuest({name, objectives, rewards, worldId, ...})Define a quest
- star.quests.startQuestForAvatar({questId, avatarId})Begin a quest for a player
- star.quests.completeObjective({questId, objectiveId, avatarId})Mark a single objective done
- star.quests.completeQuestForAvatar({questId, avatarId})Complete quest and pay out rewards
- star.missions.createMission({name, questIds, worldId, ...})Group quests into a mission
- star.inventoryItems.createItemType({id, name, rarity, ...})Define a collectible item type