ScarNet
Multiplayer automation and debugger.
Make any actor multiplayer-ready in one click, replicate variables and fire network events without touching an RPC, and find out why your netcode is broken with the in-game ScarNet Debugger. Blueprint-first, C++ compatible, and it works with Dedicated, Listen, LAN, Steam and EOS.
- Engine support
- Unreal Engine 5.2
- Version
- 1.0
- Backends
- Dedicated, Listen, LAN, Steam, EOS
What you get
- Make any actor multiplayer-ready with one component
- Replication profiles for Character, Weapon, Projectile, Pickup and more
- Replicate variables and fire network events without writing RPCs
- In-game debugger with an Issues tab that names the problem and the fix
- Blueprint-first, C++ compatible
What ScarNet does
Multiplayer in Unreal is 10% gameplay and 90% "why isn't this replicating." ScarNet does two things about that.
- Automates the boring, error-prone setup. Add one component, pick a profile, and your actor is replicated with sane update rates, priority, dormancy, relevancy and ownership. Replicate variables and fire network events straight from Blueprint.
- Tells you what is broken and how to fix it. Press F9 in game for a live debugger that inspects every networked actor and, most importantly, an Issues tab that names the problem in plain English with a suggested fix.
It does not replace Unreal networking. It sits on top of the engine replication layer, so it works with any Online Subsystem and any server type with no backend-specific code.
The golden rule of this plugin: when something does not sync, do not guess. Press F9, read the top red line on the Issues tab, and do what it says. That loop is the whole point of ScarNet.
Install and enable
- 01Copy the ScarNet folder into your project Plugins/ directory.
- 02Open the project. If prompted to rebuild modules, click Yes.
- 03Confirm it is on under Edit > Plugins > Networking > ScarNet. It is enabled by default.
- 04Tune anything you like under Project Settings > Plugins > ScarNet.
C++ is not required. Everything in this guide is done with Blueprint nodes and the Details panel. The plugin is fully C++ compatible too, but you never have to open a .cpp file.
Quick start in 4 steps
| # | Do this | Result |
|---|---|---|
| 1 | Open your actor Blueprint. Add Component ScarNet Ready. | The actor can now be made multiplayer-ready. |
| 2 | In the component Details, pick a Replication Profile (Character, Weapon, Projectile, Pickup and so on). | On Begin Play the actor is replicated with tuned settings for that kind of actor. |
| 3 | Use the ScarNet nodes: Register / Set Replicated Variable, Broadcast / Send To Server / Send To Owner, MP Spawn / Interact. | Variables sync and events fire on the right machines automatically. |
| 4 | Play with 2 or more players and press F9. | The ScarNet Debugger opens and shows any problems, with fixes. |
Call setup on the server, at runtime. Add the component, apply profiles and register variables from Begin Play (or later) on the server, not in a Construction Script and not on a client. Components added on a client do not replicate. ScarNet warns you in the log if you get this wrong.
Replication profiles
A profile is a curated bundle of networking settings for a kind of actor. Pick the closest one and ScarNet applies proven defaults. Choose Custom to set them by hand. All values are editable per project in Project Settings > ScarNet.
| Profile | Use it for | What it tunes |
|---|---|---|
| Character | Player pawns | High update rate, replicated movement, always awake |
| Projectile | Bullets, rockets, grenades | High rate plus replicated movement while alive |
| Weapon | Equipped weapons | Medium rate, relevant through the owner |
| Interactable | Doors, buttons, levers, switches | Dormant until used, then flushed |
| Pickup | World pickups | Low rate, dormant until grabbed |
| Inventory | Private per-player state | Only relevant to the owning player |
| AI | AI pawns | Medium rate, replicated movement |
| Custom | Anything else | You set every value on the component |
Movement replication is on by default. The ScarNet Ready component forces Replicate Movement on, and fixes a Static root that would silently block it. Moving actors just work. Turn it off per component only for truly static objects.
The Blueprint nodes
All nodes handle authority checks and server routing for you. They work on any machine and any net mode. Call them where it reads naturally and ScarNet does the right thing.
Setup
| Node | What it does |
|---|---|
| Make Multiplayer Ready | Adds a ScarNet Ready component (if missing) and applies a profile. Great for actors you spawn at runtime. |
Replicated variables
| Node | What it does |
|---|---|
| Register Replicated Variable | Creates a synced variable with a default value. Replicates to everyone, including late joiners. |
| Set Replicated Variable | Writes it. Automatically routed to the server when called on a client. Fires the change event. |
| Get Replicated Variable | Reads the local copy anywhere. |
| Unregister Replicated Variable | Removes it everywhere (server only). |
To react to a change, select the ScarNet Ready component and bind On Replicated Variable Changed. It fires on the server and every client. Use the As Bool / As Int / As Float / As Vector nodes to unpack the value.
Network events
| Node | Runs on |
|---|---|
| Send To Server | The server only (a client asks the server to do something). |
| Broadcast Event | The server and every client (explosions, round start, global FX). |
| Send To Owner | The client that owns the target actor (ammo, private messages). |
| Network Event | Any of the above. You choose the scope on a dropdown, including Run Locally. |
Receive events by binding On Network Event on the target ScarNet Ready component, then branch on the event name.
Smart actors and interaction
| Node | What it does |
|---|---|
| MP Spawn Actor | Spawns on the server from anywhere and replicates. On the server it returns the actor; on a client it returns None and the actor arrives via replication a moment later. |
| MP Destroy Actor | Destroys on the server from anywhere (client requests obey the security settings). |
| MP Interact | Interacts with an actor that has a ScarNet Interactable component. Works from any machine and is validated (distance-checked) on the server. |
MP Spawn returns None on clients, and that is correct. The actor is created on the server and replicated down, so it does not exist on the calling client yet. Do not try to use the return value on a client. React to the actor in its own Begin Play instead.
Auto variables and the "my RepNotify never fires" trap
ScarNet only sends a variable when its value actually changes, which saves bandwidth. That also means if you set a variable to the value it already has, nothing replicates and the change event does not fire. This is the single most common multiplayer head-scratcher, so ScarNet makes it visible.
- The Variables tab shows a No-Change Sets counter climbing.
- The Issues tab warns: "Variable X was set N times to the value it already had, so it never replicated and its change event never fired."
- If you genuinely need the callback to fire anyway, tick Force Notify on Set Replicated Variable.
If a client callback "never runs", 99% of the time the value simply is not changing on the server. Check the No-Change Sets column first before suspecting replication itself.
The ScarNet Debugger (F9)
Press F9 in any play session, or run the ScarNet.Debugger console command. It opens straight to a status banner and the Issues tab: the answer, not a wall of data. The panel is draggable (grab the header) and resizable (orange corner).
Read the banner first
| Banner colour | Means | Do |
|---|---|---|
| Amber | You are in Standalone, so no networking is running. | Set Number of Players to 2 or more (or Net Mode: Play As Client) in the Play dropdown. |
| Red | Problems were found. | Open the Issues tab (it is already in front) and read the top line. |
| Green | No replication problems detected. | Carry on. Move and interact; issues appear the moment they happen. |
The five tabs
| Tab | Shows |
|---|---|
| Issues | Auto-detected problems, most severe first, each with a suggested fix. Start here. |
| Actors | Per actor: Replicates, Movement, Activity (really moving?), Last Sent, owner, authority, dormancy, update rate, relevancy. |
| Variables | Every registered variable: value, updates, and No-Change Sets. |
| Events | Server / Client / Multicast RPC history with Sent, Received, Failed and Dropped. |
| Health | Ping, packet loss, bandwidth, connections, active vs dormant actors, saturation. |
Debug from any client. Most problems are only visible on the server. When you open the debugger on a client, ScarNet streams the server findings down to you, so the Issues, Events and Variables tabs match the server. Text is clipped to fit, so hover any cell to read the full line.
Bottom bar: Ownership Overlay draws colour-coded boxes in the world (green = server, blue = client, yellow = shared, red = problem). Save Report writes a full diagnostics text file to Saved/ScarNet/ and the on-screen message shows the exact path. Clear Events wipes the RPC history.
Troubleshooting: symptom to fix
The Issues tab detects all of these automatically. This table is the same knowledge for offline reference.
| Symptom | Likely cause | Fix |
|---|---|---|
| Actor says Replicates: Yes but is frozen on clients | Movement replication is off (Movement: No). | Enable Replicate Movement. ScarNet forces it on by default. |
| Nothing replicates at all; only 1 window | You are in Standalone / 1 player. | Play with 2 or more players, or Net Mode: Play As Client. |
| Client RepNotify / change event never fires | The value was set to what it already was. | Change the value, or tick Force Notify. Check No-Change Sets. |
| Spawned actor only appears in one window | It was spawned on a client (client authority). | Use MP Spawn Actor so it spawns on the server. |
| Send To Owner does nothing or logs a failure | The actor has no owning connection. | Set the actor Owner to a player controller or pawn. |
| Actor exists but its state never updates | Runtime-spawned with dormancy Initial, or moving while Dormant All. | Use an Awake profile, or Flush Net Dormancy on change. |
| Interactable state does not sync to others | Only Relevant To Owner is on. | Turn it off. The Interactable profile already sets relevancy. |
| Values set on a client take no effect | Called Set on a client with client writes disabled. | Server-authoritative by design. Enable client writes in Settings if intended. |
Testing multiplayer on one PC
- Quick (PIE): in the Play dropdown set Number of Players to 2 and Net Mode to Play As Client. You get two windows with a hidden dedicated server underneath.
- Realistic: open Tools > ScarNet > ScarNet Debugger and use Dedicated Server Testing. One click launches a dedicated server (or listen host) plus N client processes of your current map, each with its own log in Saved/Logs.
Put movement behind Switch Has Authority. When you test replication, only the server should drive the change (move the actor, set the variable). If both machines do it locally, both windows look right and you have proven nothing.
Settings worth knowing
Project Settings > Plugins > ScarNet:
- Debugger: hotkey (F9 by default), refresh interval, overlay interval, max rows.
- Security: allow or deny client spawn, destroy and variable-write requests. All validated server-side.
- Profiles: every value each built-in profile applies, editable per project.
- Server Testing: default client count, dedicated vs listen, extra launch parameters.
Quick FAQ
| Question | Answer |
|---|---|
| Does it work with Steam / EOS? | Yes, any Online Subsystem. ScarNet has no backend-specific code. |
| Does it run in packaged / shipping builds? | Yes. The debugger uses runtime Slate, so F9 works in packaged games. Not on dedicated servers, where you use ScarNet.Report instead. |
| Is it heavy? | No. Nothing ticks while idle; the debugger costs nothing when closed and streams to clients only while open. |
| Can I still write my own replication? | Absolutely. ScarNet sits on top of the Unreal system, so mix and match freely. |
Stuck on something?
We answer every serious message ourselves. Discord is the fastest way to get an answer from the person who built the plugin.