Skip to content

SharedStorage

The SharedStorage namespace provides persistent key-value storage shared between all mods. Data persists across game sessions. All mods read and write to the same key space.

Use descriptive key names prefixed with your mod ID to avoid collisions (e.g. "mymod.leaderboard").

For mod-private persistent storage, use Storage.

No permission required.

Import

typescript
import { SharedStorage } from "@hotbunny/hackhub-content-sdk";

Methods

SharedStorage.get<T>(key)

Get a shared value by key. Returns undefined if not found.

Returns: T | undefined

typescript
const board = SharedStorage.get<LeaderboardEntry[]>("mymod.leaderboard");

SharedStorage.set(key, value)

Set a shared value by key. Value must be JSON-serializable.

typescript
SharedStorage.set("mymod.leaderboard", [
    { name: "Player1", score: 100 },
    { name: "Player2", score: 85 },
]);

SharedStorage.remove(key)

Remove a shared key.

typescript
SharedStorage.remove("mymod.leaderboard");

SharedStorage.getAll()

Get all shared key-value pairs.

Returns: Record<string, any>

Use Cases

Cross-mod data sharing

typescript
// Mod A: Publish data
SharedStorage.set("economy-mod.exchangeRate", 1.25);

// Mod B: Read it
const rate = SharedStorage.get<number>("economy-mod.exchangeRate");

Shared leaderboards

typescript
const key = "mymod.leaderboard";
const board = SharedStorage.get<{ name: string; score: number }[]>(key) || [];
board.push({ name: "NewPlayer", score: 50 });
board.sort((a, b) => b.score - a.score);
SharedStorage.set(key, board.slice(0, 10));

Key Naming Convention

Since all mods share the same key space, use a prefix to avoid collisions:

{mod-id}.{key-name}

Examples:

  • "my-quest-mod.completedQuests"
  • "economy-mod.exchangeRate"
  • "social-mod.friendsList"

HotBunny Interactive Entertainment Inc.