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
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
const board = SharedStorage.get<LeaderboardEntry[]>("mymod.leaderboard");
SharedStorage.set(key, value)
Set a shared value by key. Value must be JSON-serializable.
SharedStorage.set("mymod.leaderboard", [
{ name: "Player1", score: 100 },
{ name: "Player2", score: 85 },
]);
SharedStorage.remove(key)
Remove a shared key.
SharedStorage.remove("mymod.leaderboard");
SharedStorage.getAll()
Get all shared key-value pairs.
Returns: Record<string, any>
Use Cases
Cross-mod data sharing
// 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
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"