A standalone Transport layer for FishNet that uses Epic Online Services (EOS) directly via the raw C# SDK.
Existing EOS transports for FishNet depend on the PlayEveryWare EOS Plugin, which adds significant complexity and bloat. This transport uses the raw EOS C# SDK directly, giving you:
- No middleware dependency - Just the official EOS SDK
- Smaller footprint - Only what you need for networking
- Full control - Direct access to EOS APIs
- Cross-platform - Windows, Android, iOS, Linux, macOS
- Zero-Config Setup - Add one component, everything auto-wires
- P2P Transport - Reliable and unreliable channels via EOS relay
- Offline Mode - Singleplayer without EOS, auto-fallback when offline
- Packet Fragmentation - Handles packets >1170 bytes automatically
- Force Relay by Default - Protects user IP addresses
- Custom Lobby Codes - Any string for "join by code" matchmaking
- PhysicsNetworkTransform - Spring-based physics sync
- 3D Spatialized Voice - Lobby-based RTC with positional audio and pitch shifting
- Text Chat - Lobby attributes (survives host migration!)
- Chat History - Persists to cloud, reloads on rejoin
- Voice Survives Migration - Lobby-based, not P2P-based
- Auto-Migration by Default - All NetworkObjects migrate automatically
- Opt-Out with DoNotMigrate - Exclude specific objects from migration
- Automatic Promotion - EOS handles host selection
- State Persistence - SyncVars saved and restored via reflection
- Player Repossession - Objects returned to original owners
- Local Friends - Mark players as friends, cloud sync across devices
- Epic Friends & Presence - Epic Account integration
- Custom Invites - Cross-platform game invitations
- Stats & Leaderboards - Player statistics and rankings
- Achievements - Ready for backend configuration
- Cloud Storage - 400MB saves per player
- Reports & Sanctions - Player moderation
- Block List - Block players with cloud sync
- Party System - Persistent groups with follow-the-leader
- Ranked Matchmaking - Skill-based with ELO/Glicko-2/SimpleMMR
- Quick Match - Find or host lobbies automatically
- Spectator Mode - Watch games without participating
- Replay System - Record/playback with timeline controls, export/import
- Match History - Track games played with outcomes
- Easy Anti-Cheat (EAC) - Client integrity validation
- Setup Wizard - Step-by-step credential configuration
- Debug Settings - 29 categories with group muting
- Debug UI Suite - F1 (Main), F3 (Voice), F4 (Network)
- Toast Notifications - Non-intrusive popup system
- Connection Quality - Ping, jitter, quality indicators
- Platform Detection - Cross-platform icons and filtering
- Unity 2022.3+ or Unity 6
- FishNet 4.x+ (install separately)
- EOS C# SDK v1.18.1+ (install separately)
- Epic Games Developer Account (free)
FishNet (choose one):
- Unity Asset Store: FishNet
- Git URL:
https://github.com/FirstGearGames/FishNet.git
EOS C# SDK:
- Download from Epic Developer Portal
- Extract and copy the
EOSSDKfolder toAssets/Plugins/EOSSDK/
Option A: Unity Package Manager (Recommended)
- Open Package Manager (Window > Package Manager)
- Click + > Add package from git URL
- Enter:
https://github.com/TrentSterling/FishNet-EOS-Native.git?path=Assets/FishNet.Transport.EOSNative
Option B: Manual
- Download or clone this repository
- Copy
Assets/FishNet.Transport.EOSNative/into your Unity project
- Add
EOSNativeTransportto a GameObject - everything else is auto-created! - Press Play - it works immediately with included test credentials!
⚡ Quick Start: The included
SampleEOSConfiguses PlayEveryWare's public test credentials. P2P, lobbies, and voice work instantly. For achievements, stats, leaderboards, or production, get your own FREE credentials at dev.epicgames.com/portal and useTools > FishNet EOS Native > Setup Wizard.
- Create empty GameObject in your scene
- Add Component → EOSNativeTransport
- Done! Auto-created for you:
- NetworkManager (same GameObject)
- EOSManager, EOSLobbyManager, EOSVoiceManager (as children)
- HostMigrationManager, EOSLobbyChatManager
- EOSConfig assigned (if found)
var transport = GetComponent<EOSNativeTransport>();
// Create lobby and start hosting
var (result, lobby) = await transport.HostLobbyAsync();
Debug.Log($"Share code: {lobby.JoinCode}");
// With options (recommended)
var (result, lobby) = await transport.HostLobbyAsync(new LobbyOptions
{
LobbyName = "My Room",
GameMode = "deathmatch",
MaxPlayers = 8
});var transport = GetComponent<EOSNativeTransport>();
// Join by code
var (result, lobby) = await transport.JoinLobbyAsync("1234");
// Quick match (finds any lobby, or hosts if none found)
var (result, lobby, didHost) = await transport.QuickMatchOrHostAsync();
// Quick match with filters (same options used for search AND host)
var (result, lobby, didHost) = await transport.QuickMatchOrHostAsync(
new LobbyOptions { GameMode = "deathmatch", Region = "us-east" }
);- Inspector: Lobby controls in Play Mode
- F1 Key: Full debug panel with all controls
- Setup Wizard:
Tools > FishNet EOS Native > Setup Wizard
Tools > FishNet EOS Native > Debug Settings
- Toggle logging for 29 systems across 9 groups
- Group mute toggles for quick enable/disable
- Per-category checkboxes with descriptions
| Key | Panel | Purpose |
|---|---|---|
| F1 | EOSNativeUI | Main UI - lobby, chat, stats, invites |
| F3 | Voice Debug | RTC status, speaking indicators, levels |
| F4 | Network Debug | P2P connections, bandwidth graph, migration |
📖 Full Documentation - Searchable docs with examples
- CLAUDE.md - Architecture reference and API guide
- CLASSES.md - Class architecture and detailed API
- CHANGELOG.md - Version history
- ROADMAP.md - Feature roadmap
- TODO.md - Current development tasks
- INSPIRATION.md - Credits, lineage, and lessons learned
- ARCHIVE.md - Historical docs and code examples
- Blog Post: FishNet-EOS-Native v1.0 Released!
- Release: v1.0.0 on GitHub
- Author: tront.xyz
See CHANGELOG.md for details.
Recent Highlights:
- Replay System - Record/playback matches with timeline controls
- Anti-Cheat (EAC) - Easy Anti-Cheat integration
- Ranked Matchmaking - ELO/Glicko-2 skill-based matching
- Party System - Persistent groups with follow-the-leader
- Match History - Track games and outcomes
- Spectator Mode - Watch games with free camera
- Toast Notifications - Non-intrusive event popups
- Local Friends - Mark players as friends with cloud sync
This project was built by studying these excellent open-source projects:
- FishyEOS by ETdoFresh
- EOSTransport for Mirror - Raw SDK patterns, packet fragmentation, Android loading
- FakeByte (original creator)
- Katone/WeLoveJesusChrist (continuation)
- CodedImmersions (current maintainer)
- PurrNet EOS Transport by qwolf
- EOS C# SDK by Epic Games
- Skylar (CometDev) (GitHub | Website) - PhysicsNetworkTransform spring-based sync, feature ideas, and relentless encouragement
- Duck - Voice effects (Doppler, pitch shifting), sanctions toggle, and extensive feature suggestions
- DrewMileham - Original spring physics method
- Roceh - 3D spatialized voice patterns from FishNetEosVivoxLobbyTest
- AFoolsDuty - Getting me into agentic coding workflows
- The Discord Rubber Ducks - Wheelz, Andre, Daver 2.0
MIT License - See LICENSE for details.
Contributions welcome! Please read CONTRIBUTING.md before submitting PRs.