How to Use Photon Multiplayer in GameMaker - First Realtime Room Evening 2026

If you are searching gamemaker photon, you do not need another Unity PUN essay. You need a Monday path: create Photon App IDs, paste them into extension options (not scripts), connect Realtime, call service every step, join or create a room with a second client, and decide keep or hold before you invent rollback netcode for a jam that only needs lobbies.
On July 14, 2026, GameMaker published the Photon GameMaker Extension Release—official Photon Multiplayer inside GameMaker, calling out rooms, lobbies, matchmaking, synchronized game state, text chat, voice, and networking insights, with games like Phasmophobia, Peak, and Rogue Trader as cultural proof points. Setup details live in the GMEXT-Photon wiki and the YoYoGames/GMEXT-Photon repo. Photon’s own docs still own how you obtain an App ID.
Who this is for: GameMaker creators shipping co-op or competitive prototypes; beginners who have never touched Photon Cloud; leads who need secrets hygiene and CCU honesty before marketing promises “live ops multiplayer.”
Time: 90–150 minutes for a two-client Realtime smoke on Windows/macOS.
Honest limit: tonight is Realtime connect + service + room. Chat and Voice each need their own App IDs. Fusion Core 3 on GMRT is announced as upcoming—not your evening’s dependency.Photon extension release
Non-repetition: This is not the GameMaker rhythm music-sync evening (local audio clock). It is not Steam demo export sanity or setlive dry-run. It is not Phaser Game Agent MCP or Unity MCP. Same “first evening keep/hold” discipline—different stack.
Why this matters now
- Official extension, not a forum DLL. YoYo Games is distributing Photon through the Extensions path with a public GitHub repo and wiki—lower trust friction than random marketplace networking assets.Photon extension release GMEXT-Photon
- Feature surface is broad on day one. Real-time rooms/lobbies/matchmaking, compare-and-swap state, chat, voice, and ping/RTT/traffic insights are named in the launch post—enough to plan a product, too much to enable all at once tonight.Photon extension release
- SERP is Unity-heavy. Classic Photon tutorials assume PUN/Unity. GameMaker needs App ID → extension options → service every step language that Unity essays skip.
Parent demand under GameMaker stays large (SiteStatsDB-class snapshots put gamemaker.io around ~193K monthly organic visitors). Photon’s own site still draws six-figure monthly visits (Semrush-class Jun 2026 snapshots near ~138K for photonengine.com)—independent proof that multiplayer backend search does not start and end with one engine.
What GMEXT-Photon is (and is not)
| Surface | What it does | Use tonight? |
|---|---|---|
| GMEXT-Photon / GMPhoton | Native bridge to Photon C++ SDK for GameMaker | Yes |
| Photon Realtime | Rooms, lobbies, matchmaking, realtime messaging | Yes — start here |
| Photon Chat | Friends, channels, presence | Optional second App ID |
| Photon Voice | Live voice channels | Hold until Realtime is green |
| Fusion Core 3 on GMRT | Announced future core feature for new runtime | Hold — do not block tonight |
| Namazu Elements | Earlier GameMaker multiplayer collaboration path | Compare, do not mix in one receipt |
| Custom sockets / DIY relay | Full ownership, full ops burden | Only if Photon CCU/model fails you |
Platforms called out for the extension: Windows, macOS, Linux, Android, and iOS.Setup wiki
Prerequisites
Confirm every line before you paste App IDs into a project that also holds Steam secrets.
- [ ] GameMaker IDE on a machine you control (LTS 2026.0 line preferred for extension work).
- [ ] Ability to create a free Photon account and at least one Realtime application.
- [ ] Two runnable clients (two machines, or editor + exported build, or two exported builds)—one client never proves multiplayer.
- [ ] Named session owner who files the receipt.
- [ ] Written rule: App IDs never commit to git.
If you only need local couch co-op with no online, you can skip Photon. If you need online rooms without hosting dedicated servers this month, continue.
Beginner path - first evening without voice
Step 1 - Create Photon App IDs
Follow Photon’s official flow:Obtain your App ID
- Sign up / sign in at the Photon dashboard.
- Create a Realtime application (LoadBalancing family).
- Copy the App ID GUID.
- If you will touch Chat later, create a separate Chat app and copy that ID too. Same for Voice.
Photon’s free tier historically starts with a small CCU allowance for new apps—read the live dashboard limits for your account; do not invent concurrent-player promises for Steam page copy.
Step 2 - Install / open the Photon extension
Use the official GMEXT-Photon distribution path your studio prefers (marketplace/extension import vs repo checkout). Open the GMPhoton extension in the Asset Browser.
Do not paste third-party “Photon for GMS2” forks tonight unless your security review already approved them. Prefer YoYo’s repo and wiki.
Step 3 - Put App IDs in extension options (not scripts)
The wiki is explicit: App IDs are credentials and must not be committed to source control. Fill Realtime App ID (and Chat App ID if needed) under the extension’s Application IDs / options so values live in local project settings.Setup wiki
At runtime, demos read options like:
var _app_id = extension_get_option_value("GMPhoton", "appIdRealtime");
photon_realtime_connect(_app_id, "1.0", new PhotonRealtimeConnectOptions());
Adapt names to the exact option keys in your installed extension build. The pattern matters more than the sample spelling: options → connect, never hard-coded GUIDs in shared .gml files.
Step 4 - Connect, then service every step
Photon dispatches on the game thread. After connect, call the matching service function every Step for each subsystem you use (photon_realtime_service, and later chat/voice services). Without service, the client neither sends nor receives.Setup wiki
Beginner checklist:
- [ ] Connect with Realtime App ID + protocol version string your wiki/demo uses.
- [ ] On Step: call
photon_realtime_serviceunconditionally while connected. - [ ] Log connection state changes to an on-screen debug label (region, ping when available).
- [ ] Handle disconnect without freezing the room UI.
Step 5 - Two-client room smoke
- Client A creates or joins a named test room (include a random suffix so strangers do not collide).
- Client B joins the same room.
- Send a trivial reliable payload (e.g. a color index or “ping” string).
- Confirm both clients show the same compare-and-swap / state update the launch post describes at a high level.Photon extension release
- Disconnect cleanly; reconnect once.
Exit criteria: two humans see shared state without restarting the IDE. If only one client “works,” you do not have multiplayer yet.
Step 6 - File a receipt before Discord hype
{
"schema": "gm_photon_realtime_receipt_v1",
"date": "2026-07-23",
"owner": "your-name",
"extension": "GMEXT-Photon",
"realtime_app_id_set": true,
"app_id_in_git": false,
"platforms_tested": ["windows"],
"two_client_room_ok": true,
"service_every_step": true,
"chat_enabled": false,
"voice_enabled": false,
"ccu_plan_noted": true,
"fusion_gmrt_dependency": "hold",
"gates": {
"P1_account": "pass",
"P2_options": "pass",
"P3_connect": "pass",
"P4_service": "pass",
"P5_two_client": "pass",
"P6_secrets": "pass"
},
"keep_hold": "keep_for_online_prototypes"
}
Developer path - gates, ops, and honesty
P1–P6 verification table
| Gate | Pass means | Fail means |
|---|---|---|
| P1 Account | Photon dashboard app exists; App ID copied from dashboard | Shared teammate App ID without ownership |
| P2 Options | IDs only in extension options / local settings | GUID committed to git |
| P3 Connect | Realtime connect succeeds on target platform | Silent fail; wrong SDK version |
| P4 Service | Service called every step while connected | Connect once, never service |
| P5 Two-client | Create/join + shared payload on two clients | Single-player “fake online” |
| P6 Secrets | .gitignore covers options; CI uses secrets store |
App ID in Discord screenshot of code |
Why the service loop is non-negotiable
Unity Photon tutorials often bury “call Service.” GameMaker’s wiki puts it in Setup for a reason: without photon_realtime_service (and siblings), you will debug “random” silence that is actually a missing pump.Setup wiki
Treat missing service as a compile-time culture problem: code review greps for connect without service.
SDK version pinning
The repo notes a specific Photon C++ SDK version requirement for compiling the native bridge (wiki/readme call out supported SDK versions such as v5.0.14.3 in the project docs). Do not casually upgrade the SDK mid-sprint without rebuilding and re-running P3–P5.GMEXT-Photon
Chat and Voice are separate products
Launch marketing lists text chat and voice alongside Realtime.Photon extension release Operationally:
| Product | Needs | Night-one advice |
|---|---|---|
| Realtime | Realtime App ID + service | Do this first |
| Chat | Chat App ID + photon_chat_service |
Second evening |
| Voice | Voice App ID + photon_voice_service + mute UX |
After Realtime stability |
Shipping voice before a reliable room join is how jam Discord fills with “can’t hear / can’t connect” noise.
Insights before cosmetics
The extension surfaces ping, RTT, traffic, region selection, and packet loss style insights.Photon extension release Put a tiny HUD on the prototype:
- Region selected
- RTT / ping
- Packet loss if exposed
- Last error code/string
Marketing skins come after the HUD stays boring for thirty minutes.
Namazu vs Photon
GameMaker previously collaborated on Namazu Elements multiplayer. Do not run both stacks in the same object event without a written architecture. Pick one receipt for the prototype. Photon is the Jul 2026 official spotlight; Namazu remains a historical/alternate path—evaluate with your CCU and feature needs, not Twitter loyalty.
Fusion Core 3 / GMRT hold
The launch post is explicit about excitement for Fusion Core 3 arriving as a core feature on the new GameMaker Runtime (GMRT).Photon extension release That is a roadmap promise, not a green light to delay your first Realtime smoke until GMRT lands. File fusion_gmrt_dependency: hold and keep shipping Realtime prototypes on the current IDE line.
Mobile and console notes
Wiki platforms include Android and iOS with native library staging details (iOS SDK path options, Android sources).Setup wiki Night one can stay desktop. When you move to mobile:
- Re-run P3–P5 on device, not only IDE.
- Watch backgrounding: apps that pause Steps may stop servicing Photon.
- Confirm store privacy copy mentions multiplayer/voice if you enable those products.
Region selection and jam-proof room names
For night-one smoke, force both clients onto the same region (or let Photon pick once and log it). Split-brain “connected but empty room” reports are often region or room-name typos. Prefix room names with your studio slug and a random four-digit suffix (studio-proto-4821) so public default rooms do not collide with strangers testing the same tutorial.
When you later open matchmaking, separate dev App IDs from shipping App IDs. Never point a public Next Fest demo at the same Photon app your internal QA hammers at 2 a.m.—you will burn CCU and pollute analytics.
CCU planning without fantasy numbers
Write three numbers before Steam copy:
- Expected peak concurrent players for the next demo weekend.
- Photon plan ceiling on your dashboard (and overage behavior).
- Kill switch — how you disable online if the bill or outage spikes.
If you cannot answer (3), you are not ready for a public multiplayer demo branch. Offline single-player fallback is a feature, not a shame.
Sample evening timeline (strict)
| Minute | Task | Exit criteria |
|---|---|---|
| 0–15 | Photon account + Realtime App ID | GUID copied |
| 15–35 | Install extension + options | IDs not in git |
| 35–55 | Connect + service loop | Debug label shows connected |
| 55–90 | Two-client room + payload | P5 pass |
| 90–110 | Disconnect/reconnect + HUD insights | Stable for 10 minutes |
| 110–150 | Receipt + keep/hold | JSON filed; voice still off |
If you spend the evening designing a ranked ladder UI, you failed. Rooms first. Ranked seasons are a different receipt after P1–P6 stay green for a full week of internal playtests.
Failure modes and quick fixes
| Symptom | Likely cause | Fix |
|---|---|---|
| Connect never completes | Wrong App ID / product type | Confirm Realtime app, not Chat-only |
| Connected but silence | Missing service every step | Add photon_realtime_service to Step |
| Works in IDE, fails in export | Extension not included / platform lib missing | Rebuild with target platform selected |
| Second client cannot join | Room name typo / full room / region mismatch | Log room name; force same region for smoke |
| App ID leaked | Pasted into shared script | Rotate App ID; move to options; scrub git history if needed |
| “Multiplayer” with one build | No second client | Export a second build or use two machines |
Keep / hold decision
Keep Photon Realtime for GameMaker when:
- You need online rooms without standing up dedicated servers this quarter.
- You can afford Photon CCU plans matching your peak concurrent players.
- Your team will enforce the service loop and secrets hygiene.
Hold (or limit scope) when:
- Your design needs authoritative dedicated servers Photon Cloud free tier cannot express.
- You require Fusion Core 3 features that are not on your current runtime yet.
- Compliance forbids third-party cloud game traffic without a DPA your counsel has reviewed.
Never put Photon App IDs in public GitHub gists “just for the jam.” Rotate any ID that appeared in a screenshot, stream overlay, or support ticket.
How this compares to sibling GameMaker evenings
| Evening | Job | Link |
|---|---|---|
| Photon Realtime | Online rooms + service loop | This page |
| Rhythm music sync | Local audio clock before charts | Rhythm evening |
| Steam export sanity | Folder gates before partner upload | Export evening |
| setlive dry-run | Branch pointer before fest | setlive evening |
Finish local prototype honesty before you combine rhythm + Photon in one object. The rhythm FAQ already points here for online ambitions.
Company / diligence notes
For a publisher or investor packet, attach:
gm_photon_realtime_receipt_v1.jsonwith P1–P6.- Screenshot of Photon dashboard app (CCU plan visible; App ID partially redacted).
- Two-client VOD of room join + shared state.
- Statement that Chat/Voice are off until Realtime is green.
- Explicit note on Fusion Core 3 / GMRT as forward, not current ship dependency.
That packet prevents “we have Photon” from meaning “we have live ops.”
Beginner mistakes to avoid
- Hard-coding App IDs in scripts that get pushed to GitHub.
- Enabling Voice on night one before rooms work.
- Testing with one client and calling it multiplayer.
- Skipping service because connect returned success once.
- Mixing Namazu and Photon event code in the same controller.
- Promising 100 CCU on Steam based on a free-tier anecdote.
- Waiting for GMRT Fusion before validating Realtime on current LTS.
Key takeaways
- gamemaker photon now has an official YoYo extension path (Jul 14 launch post).
- Put App IDs in extension options, not git-tracked scripts.
- Call
photon_realtime_serviceevery Step while connected. - Prove two clients before you design ranked modes.
- Treat Chat/Voice as separate App IDs and evenings.
- Hold Fusion Core 3 / GMRT as roadmap—do not block Realtime smoke.
- File
gm_photon_realtime_receipt_v1.jsonbefore Discord demos. - Prefer YoYo’s GMEXT-Photon path over random marketplace networking forks on night one.
FAQ
What is the Photon extension for GameMaker?
It is YoYo Games’ official extension wrapping Photon’s realtime networking stack for GameMaker, covering rooms/lobbies/matchmaking, state sync helpers, chat, voice, and connection insights.Photon extension release
Where do I put my Photon App ID?
In the GMPhoton extension options (Realtime / Chat as needed), not in committed GML source. Read values at runtime with extension_get_option_value.Setup wiki
Why does nothing send after a successful connect?
You likely forgot to call photon_realtime_service (and other product services) every Step. Photon expects a game-thread service pump.Setup wiki
Do I need Chat and Voice App IDs on night one?
No. Create a Realtime app first. Add Chat/Voice App IDs only when those features are in scope.
Is this the same as Photon Unity Networking (PUN)?
Related Photon Cloud family, different engine integration. Do not copy Unity C# samples verbatim into GML—follow GMEXT-Photon wiki function names.
How does this relate to Namazu Elements?
Namazu is an earlier multiplayer collaboration path for GameMaker. Photon is the Jul 2026 official extension spotlight. Compare requirements; do not mash both into one Step event without an architecture decision.Namazu post
Should I wait for Fusion Core 3 on GMRT?
No for a first Realtime smoke. The launch post frames Fusion Core 3 on GMRT as upcoming excitement—validate Realtime on your current IDE now.Photon extension release
Can I use Photon for a Steam demo?
Yes if your CCU plan and privacy copy match the demo. Still run export sanity and partner receipts separately—networking green does not equal Steam folder green.
What about rhythm games online?
Finish local sync first (rhythm evening), then add Photon with deterministic song-time design. Do not bolt Realtime onto an unsynced metronome.
Which platforms work?
The setup wiki lists Windows, macOS, Linux, Android, and iOS with platform-specific native library notes.Setup wiki
Related reading
- How to Make a Rhythm Game in GameMaker - First Music Sync Evening 2026
- Your First GameMaker Steam Demo Export Sanity Check - 2026
- Your First GameMaker Steam setlive Branch Dry Run - 2026
- Roblox Server Authority - Prediction Rollback Playbook for Creators 2026
- How to Use Phaser Game Agent MCP with Cursor - First Browser Game Evening 2026
- Wednesday demo build smoke ritual