Beginner-Friendly Tutorials Jul 23, 2026

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

How to use Photon multiplayer in GameMaker in one evening—GMEXT-Photon App IDs, realtime connect, service every step, lobbies, chat/voice hold, and Fusion Core 3/GMRT honesty.

By GamineAI Team

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

luigi mansion pixel art thumbnail

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

  1. 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
  2. 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
  3. 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

  1. Sign up / sign in at the Photon dashboard.
  2. Create a Realtime application (LoadBalancing family).
  3. Copy the App ID GUID.
  4. 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_service unconditionally 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

  1. Client A creates or joins a named test room (include a random suffix so strangers do not collide).
  2. Client B joins the same room.
  3. Send a trivial reliable payload (e.g. a color index or “ping” string).
  4. Confirm both clients show the same compare-and-swap / state update the launch post describes at a high level.Photon extension release
  5. 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:

  1. Expected peak concurrent players for the next demo weekend.
  2. Photon plan ceiling on your dashboard (and overage behavior).
  3. 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:

  1. gm_photon_realtime_receipt_v1.json with P1–P6.
  2. Screenshot of Photon dashboard app (CCU plan visible; App ID partially redacted).
  3. Two-client VOD of room join + shared state.
  4. Statement that Chat/Voice are off until Realtime is green.
  5. 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

  1. Hard-coding App IDs in scripts that get pushed to GitHub.
  2. Enabling Voice on night one before rooms work.
  3. Testing with one client and calling it multiplayer.
  4. Skipping service because connect returned success once.
  5. Mixing Namazu and Photon event code in the same controller.
  6. Promising 100 CCU on Steam based on a free-tier anecdote.
  7. 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_service every 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.json before 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

Official and useful sources