Free multiplayer systems let you connect players without building server infrastructure yourself
You can add multiplayer to your game using free services that handle player connections, matchmaking, and data storage — so you do not have to rent servers or write backend code. The most practical options are Netcode for GameObjects (made by Unity for Unity games), Playfab (Microsoft's free tier for any engine), Steamworks (if you release on Steam), and Photon PUN 2 (free for up to 20 concurrent players). Which one you choose depends on your engine, how many players you expect at once, and whether you want to handle matchmaking yourself or have the service do it.
Most free tiers have real limits: player counts, bandwidth, or monthly requests. You will hit those limits only if your game gets significant traffic, which is a good problem to have. Until then, you can ship a working multiplayer game at zero cost.
Key Takeaways
- Netcode for GameObjects is free for Unity and handles player synchronization automatically, but you still need to choose where players connect (peer-to-peer or a relay server).
- Playfab is free up to 100,000 monthly active users and works with any engine, making it the most flexible choice for cross-platform games.
- Photon PUN 2 is free for up to 20 players in a room at once and includes matchmaking, but you pay per concurrent player once you exceed that.
- Steamworks is free if you release on Steam and includes lobbies, matchmaking, and P2P networking without per-player charges.
- You still need to write the code that sends player position, actions, and game state across the network — the free service just handles the connection itself.
Netcode for GameObjects: Built into Unity, but you choose the connection method
Netcode for GameObjects is Unity's official free networking library. It synchronizes player positions, animations, and game state across devices automatically — you write code that says "this object should sync to all players," and the library handles sending the data. You do not pay anything, and there are no player limits.
The catch is that you must choose how players connect to each other. You can use peer-to-peer (players connect directly to each other, which is free but only works for small groups and can expose player IP addresses) or Netcode Relay (Unity's free relay service that routes traffic through their servers, hiding IP addresses and working better for larger groups). Relay is free for development and testing, but you pay per gigabyte of traffic once your game is live — usually a few dollars per thousand players.
Netcode for GameObjects does not include matchmaking, so you have to build that yourself or use a separate service like Playfab. It is the right choice if you are already in Unity and want full control over networking behavior.
Playfab: Works with any engine and includes player accounts, matchmaking, and storage
Playfab is Microsoft's backend service and it is free up to 100,000 monthly active users. It handles player accounts, matchmaking, leaderboards, and data storage — so you can track player progress, find opponents, and save game state without writing server code. It works with Unity, Unreal, Godot, or any engine that can make web requests.
You still need a networking library to send player positions and actions in real time (Netcode for GameObjects, Photon, or Mirror). Playfab sits behind that and handles everything else: logging players in, storing their stats, finding matches, and running cloud functions (small scripts that run on Microsoft's servers). The free tier covers most indie games. You only pay if you exceed 100,000 monthly active users or run expensive cloud functions.
Playfab is the most flexible choice because it works with any engine and any networking library. The downside is that you have to integrate two separate systems — a networking library for real-time data and Playfab for accounts and matchmaking.
Photon PUN 2: Free for small rooms, includes matchmaking and relay built in
Photon PUN 2 is a networking library for Unity that includes matchmaking and relay servers. It is free for up to 20 players in a single room (game session) at the same time. You do not pay per month — you only pay if you have more than 20 concurrent players in a room, at which point you pay per player per month.
Photon handles both the real-time synchronization (player positions, actions) and the matchmaking (finding other players to join). You write code that says "sync this variable to all players" and Photon sends it automatically. It is simpler to set up than Netcode for GameObjects because everything is in one package.
The free tier is genuinely free with no hidden charges — you can ship a game with Photon and pay nothing until you have more than 20 players in a room simultaneously. That covers most small multiplayer games. The limitation is that it only works with Unity.
Steamworks: Free if you release on Steam, includes P2P and lobbies
If you plan to release your game on Steam, Steamworks includes free peer-to-peer networking, lobbies, and matchmaking. You do not pay per player or per month — it is included with your Steam store page. Steamworks handles finding other players, creating game sessions, and routing traffic between them.
The networking is peer-to-peer, which means players connect directly to each other. This is free and fast for small groups but can expose IP addresses and does not work well if players are behind restrictive firewalls. Steamworks includes a relay option (Steamworks Networking) that routes traffic through Valve's servers if direct connection fails, and that is also free.
Steamworks works with any engine — Unity, Unreal, Godot, or custom code. The catch is that you have to release on Steam. If your game is on itch.io, Epic Games Store, or console, Steamworks is not an option.
Comparing the four options: what each one costs and what you have to build
| Service | Free Tier Limit | What It Handles | What You Build | Works With |
|---|---|---|---|---|
| Netcode for GameObjects | Unlimited players (relay costs per GB after launch) | Real-time synchronization | Matchmaking, player accounts, lobbies | Unity only |
| Playfab | 100,000 monthly active users | Player accounts, matchmaking, leaderboards, data storage | Real-time networking library (separate) | Any engine |
| Photon PUN 2 | 20 concurrent players per room | Real-time sync, matchmaking, lobbies | Player accounts, leaderboards, cloud functions | Unity only |
| Steamworks | Unlimited (Steam release required) | P2P networking, lobbies, matchmaking | Player accounts, leaderboards, cloud functions | Any engine (Steam only) |
How to choose: matching the service to your game and release plan
If you are making a Unity game and releasing on Steam, use Steamworks. It is free, complete, and you do not have to integrate multiple services.
If you are making a Unity game and not releasing on Steam, use Photon PUN 2 if you expect fewer than 20 concurrent players per room. It is the simplest setup and genuinely free. If you expect more players or want more control over networking, use Netcode for GameObjects with Playfab for matchmaking and accounts.
If you are using Unreal, Godot, or a custom engine, use Playfab for accounts and matchmaking, then add a networking library like Mirror (free, open source, for any engine) or Photon (paid for non-Unity engines) for real-time synchronization.
The wrong choice is trying to build matchmaking and relay servers yourself. That is expensive, time-consuming, and error-prone. Use a free service and spend your time on gameplay instead.
What you still have to write: the networking code that sends game state
None of these services write your game logic for you. You still have to write code that sends player position, health, animations, and actions across the network. The service just handles the connection and delivery.
For example, in Netcode for GameObjects, you write a script that says "when the player moves, call this function on all clients." In Photon, you write code that says "sync this variable to all players." The library sends the data automatically, but you decide what data to send and how often.
This is where most of the work is. You have to think about bandwidth (sending too much data slows the game down), latency (what happens when one player's action arrives late), and cheating (preventing players from hacking their position or health). The free services handle the hard part (routing data reliably), but you handle the game-specific part (what data matters and how to respond to it).
Frequently Asked Questions
Can I switch from one service to another later?
Yes, but it requires rewriting your networking code. If you use Photon, switching to Netcode for GameObjects means replacing all the sync calls. Plan ahead by keeping your networking code separate from your game logic, so you can swap the networking layer without touching gameplay. This is called abstraction and it saves you weeks of work later.
What happens when my game gets popular and I hit the free tier limit?
You start paying. Photon charges per concurrent player. Playfab charges per monthly active user. Netcode Relay charges per gigabyte. Steamworks does not charge. The costs are usually small — a few hundred dollars per month for a moderately popular game — but plan for it. Most indie games never hit the limit, so this is not a blocker.
Do I need a dedicated server or can players host the game?
Most free services use peer-to-peer (players host for each other) or relay (traffic goes through the service's servers, but no dedicated server runs your game). You do not need a dedicated server. If you want one later, you can rent it separately and use these services for matchmaking and accounts.
Can I use multiple services at once?
Yes. Many games use Playfab for accounts and leaderboards, Photon or Netcode for real-time networking, and Steamworks for lobbies. The services are designed to work together. The downside is complexity — more services means more code to maintain and more places for bugs to hide.
Which service is easiest to learn?
Photon PUN 2 is the easiest because it includes everything and has the most tutorials. Netcode for GameObjects is second — it is simpler than Photon but requires you to choose a relay method. Playfab is the hardest because it is a backend service, not a networking library, so you have to learn it alongside a separate networking tool.