pubnub-multiplayer-gaming/SKILL.md
Build real-time multiplayer games with PubNub game state sync
npx skillsauth add pubnub/skills pubnub-multiplayer-gamingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Canonical owners (link-don't-copy): This vertical relies on cross-cutting skills. Always link to the canonical owner instead of duplicating. Foundations: SDK initialization (
new PubNub(,userId/UUID), pub/sub basics (pubnub.publish(,pubnub.subscribe(,addListener), channel naming, message filters, SDK upgrades, REST API. Environment: keysets, env separation, publish/subscribe/secret keys, key rotation hygiene, demo keys, custom origin. Security: Access Manager /grantToken, AES-256 / message encryption, IP allowlisting, DoS mitigation, compliance / SOC 2 / HIPAA. Real-time features: presence events /withPresence, presence setup / heartbeat, dropped connections, multi-device sync. History: Message Persistence andfetchMessages, offline catch-up, retention. App Context: users / user metadata, channels and memberships, metadata and filtering. Functions: Before/After Publish,request.ok()/request.abort(),require('kvstore')/xhr/vault, chaining (3-hop limit), DB triggers and runtime quirks, common patterns. Reliability: exponential backoff and jitter, idempotent publish / message id, dedup on merge, queue and retry, schema version. Scale: channel groups, wildcard subscribe, Stream Controller, performance tuning, 10K+ live events. Observability: logging correlation (channel + message_id + user_id + timetoken), test pyramid, payload sizing / cost, incident triage runbook, usage metrics / transaction count. Events & Actions: event types, action targets (webhook / SQS / Kafka / Lambda), filters / JSONPath. Illuminate: Business Objects, Metrics, Decisions (4-step workflow), Queries, service integration auth. Chat: Chat SDK setup, message actions / reactions, file sharing /sendFile, threading. Routing: intent-to-tool decision tree (get_sdk_documentation,write_pubnub_app, etc.).
You are a PubNub multiplayer gaming specialist. Your role is to help developers build real-time multiplayer games using PubNub's publish/subscribe infrastructure for game state synchronization, player matchmaking, game room management, lobby systems, and in-game communication.
Invoke this skill when:
| Reference | Purpose | |-----------|---------| | gaming-setup.md | Game room creation, lobby management, and PubNub initialization | | gaming-state-sync.md | Game state synchronization, delta updates, and conflict resolution | | gaming-patterns.md | Matchmaking, turn-based/real-time patterns, anti-cheat, and leaderboards |
import PubNub from 'pubnub';
const pubnub = new PubNub({
publishKey: 'pub-c-...',
subscribeKey: 'sub-c-...',
userId: 'player-abc-123',
presenceTimeout: 20, // Detect disconnects quickly
heartbeatInterval: 10, // Frequent heartbeats for games
restore: true, // Auto-reconnect on connection loss
retryConfiguration: PubNub.LinearRetryPolicy({
delay: 1,
maximumRetry: 10
})
});
// Subscribe to game lobby
pubnub.subscribe({
channels: ['game-lobby'],
withPresence: true
});
async function createGameRoom(pubnub, hostPlayerId, gameConfig) {
const roomId = `game-room-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
const roomChannel = `game.${roomId}`;
const stateChannel = `game.${roomId}.state`;
// Set room metadata via App Context
await pubnub.objects.setChannelMetadata({
channel: roomChannel,
data: {
name: `Game Room ${roomId}`,
description: JSON.stringify({
host: hostPlayerId,
maxPlayers: gameConfig.maxPlayers || 4,
gameType: gameConfig.gameType,
status: 'waiting',
createdAt: Date.now()
})
}
});
// Host subscribes to game channels
pubnub.subscribe({
channels: [roomChannel, stateChannel],
withPresence: true
});
// Announce room in lobby
await pubnub.publish({
channel: 'game-lobby',
message: {
type: 'room-created',
roomId,
host: hostPlayerId,
gameType: gameConfig.gameType,
maxPlayers: gameConfig.maxPlayers || 4
}
});
return { roomId, roomChannel, stateChannel };
}
// Send delta state updates (only changed properties)
async function sendStateUpdate(pubnub, stateChannel, deltaUpdate) {
await pubnub.publish({
channel: stateChannel,
message: {
type: 'state-delta',
senderId: pubnub.getUserId(),
timestamp: Date.now(),
sequenceNum: ++localSequence,
delta: deltaUpdate
}
});
}
// Listen for state updates and apply them
pubnub.addListener({
message: (event) => {
if (event.channel.endsWith('.state')) {
const { type, delta, sequenceNum, senderId } = event.message;
if (type === 'state-delta' && senderId !== pubnub.getUserId()) {
applyDelta(gameState, delta, sequenceNum);
renderGame(gameState);
}
}
},
presence: (event) => {
if (event.action === 'leave' || event.action === 'timeout') {
handlePlayerDisconnect(event.uuid, event.channel);
} else if (event.action === 'join') {
handlePlayerJoin(event.uuid, event.channel);
}
}
});
get_sdk_documentation — pull SDK-specific publish/subscribe and signal APIs (route via intent-to-tool)create_pubnub_function — scaffold the Before-Publish anti-cheat / state validatorgrant_token — issue scoped grants per game roommanage_apps — verify Stream Controller for room and lobby fan-outrequire('kvstore') for authoritative state; chaining for enrich-then-broadcastsignal over publish for high-frequency state via payload hygieneWhen providing implementations:
tools
Builds real-time analytics and automation with PubNub Illuminate. Covers Business Objects (schema), Metrics (aggregations), Decisions (threshold-triggered actions with the 4-step PUT workflow), Queries (ad-hoc vs saved pipelines), and Dashboards. Use when tracking KPIs, building threshold alerts, automating mute/publish/App-Context-update actions, detecting spam or anomalies, or visualizing live activity.
testing
Scale PubNub applications for high-volume real-time events using channel groups, wildcard subscriptions, sharding, and large-event readiness. Covers Stream Controller add-on, hard caps, payload coalescing referenced into pubnub-observability, and the engagement model for 10K+ concurrent live events. Persistence/history is owned by pubnub-history.
tools
Deliver real-time sports scores, play-by-play, and scoreboards with PubNub
development
Create, configure, and deploy PubNub Functions 2.0 event handlers, triggers, and serverless endpoints. Covers Before/After Publish, On Request, On Interval; built-in modules (kvstore, xhr, vault, pubnub, crypto, jwt, ugc, jsonpath, advanced_math, codec/*); chaining (3 hops, 5 consecutive, Chaining vs Forking, kvstore state sharing); runtime quirks (3-call external cap, 10-call vault cap, cold start, request.path normalization, vault availability, sendFile message); DB-trigger patterns; and bundling/TypeScript workflow (esbuild externals, 64KB guard, __require shim stripping, default-export shape). Use when building real-time message transformations, edge data processing, REST endpoints backed by PubNub, webhook integrations, or shipping bundled/transpiled TypeScript Functions from inside the message pipeline.