MafiaNet is an actively maintained networking library built for game developers who need reliable, high-performance multiplayer networking. Built on the foundation of RakNet and SLikeNet, MafiaNet delivers battle-tested networking capabilities with modern C++ standards and security practices.
Supported Platforms: Windows, Linux, macOS (primary) | iOS, Android (limited)
- CMake 3.21+
- C++17 compatible compiler
- OpenSSL 1.0.0+
- Internet connection (first build fetches dependencies automatically)
Linux / macOS:
git clone https://github.com/MafiaHub/MafiaNet.git
cd MafiaNet
mkdir build && cd build
cmake ..
cmake --build . -j$(nproc) # Linux
cmake --build . -j$(sysctl -n hw.ncpu) # macOSWindows (Visual Studio):
git clone https://github.com/MafiaHub/MafiaNet.git
cd MafiaNet
# Generate Visual Studio 2022 solution
cmake -G "Visual Studio 17 2022" -A x64 -B build
# Build from command line, or open build/MafiaNet.sln in Visual Studio
cmake --build build --config Release| Option | Default | Description |
|---|---|---|
MAFIANET_BUILD_SHARED |
ON | Build shared library (.dll/.so/.dylib) |
MAFIANET_BUILD_STATIC |
ON | Build static library (.lib/.a) |
MAFIANET_BUILD_SAMPLES |
OFF | Build 80 sample applications and extensions |
MAFIANET_BUILD_TESTS |
OFF | Build test suite |
To build with samples:
cmake -DMAFIANET_BUILD_SAMPLES=ON ..#include "mafianet/peerinterface.h"
#include "mafianet/MessageIdentifiers.h"
// Create a peer
MafiaNet::RakPeerInterface* peer = MafiaNet::RakPeerInterface::GetInstance();
// Start as server
MafiaNet::SocketDescriptor sd(60000, 0);
peer->Startup(32, &sd, 1);
peer->SetMaximumIncomingConnections(32);
// Or connect as client
peer->Connect("127.0.0.1", 60000, nullptr, 0);
// Process incoming packets
MafiaNet::Packet* packet;
while ((packet = peer->Receive()) != nullptr) {
switch (packet->data[0]) {
case ID_NEW_INCOMING_CONNECTION:
printf("Client connected\n");
break;
case ID_CONNECTION_REQUEST_ACCEPTED:
printf("Connected to server\n");
break;
}
peer->DeallocatePacket(packet);
}
// Cleanup
MafiaNet::RakPeerInterface::DestroyInstance(peer);
|
|
|
|
MafiaNet provides a modular plugin system for extending functionality:
| Plugin | Description |
|---|---|
| ReplicaManager3 | Automatic object replication and state synchronization |
| RPC4 | Remote procedure calls with parameter serialization |
| FullyConnectedMesh2 | P2P mesh networking with host migration |
| NatPunchthrough | NAT traversal for peer-to-peer connections |
| FileListTransfer | Reliable file transfer with progress callbacks |
| DirectoryDeltaTransfer | Incremental directory synchronization |
| Autopatcher | Delta patching system for game updates |
| RakVoice | Voice chat with Opus codec and noise suppression |
| ReadyEvent | Player ready state synchronization |
| TeamManager | Team assignment and balancing |
| Router2 | Message routing through intermediate peers |
| MessageFilter | Security filtering for incoming messages |
| PacketLogger | Network traffic logging and debugging |
| TwoWayAuthentication | Mutual authentication between peers |
| CloudComputing | Distributed data storage and retrieval |
| Lobby2 | Matchmaking and lobby system |
See the Plugin Documentation for detailed usage.
Full documentation is available at mafianet.mafiahub.dev
Documentation includes:
# Install dependencies
brew install doxygen # macOS
sudo apt install doxygen # Ubuntu/Debian
pip install -r docs/requirements.txt
# Build and serve
cd docs
./build.sh serve # http://localhost:8000MafiaNet/
├── Source/
│ ├── include/mafianet/ # Public API headers (include as "mafianet/...")
│ └── src/ # Implementation files
├── Samples/ # 80 example applications
│ ├── ChatExample/ # Simple chat application
│ ├── Ping/ # Basic UDP communication
│ ├── ReplicaManager3/ # Object replication demo
│ ├── NATCompleteClient/ # NAT traversal client
│ ├── NATCompleteServer/ # NAT traversal server
│ ├── RakVoice/ # Voice chat examples
│ ├── FileListTransfer/ # File transfer demo
│ └── Tests/ # Comprehensive test suite
├── DependentExtensions/ # Optional integrations
│ ├── Autopatcher/ # Delta patching system
│ ├── Lobby2/ # Matchmaking and lobbies
│ ├── RakVoice.cpp/h # Voice communication
│ ├── MySQLInterface/ # MySQL connectivity
│ ├── PostgreSQLInterface/# PostgreSQL connectivity
│ ├── SQLite3Plugin/ # SQLite integration
│ └── RPC3/ # Legacy RPC system
├── docs/ # Sphinx documentation source
└── cmake/ # CMake modules and helpers
MafiaNet automatically fetches required dependencies via CMake FetchContent:
| Dependency | Version | Used For |
|---|---|---|
| OpenSSL | 1.0.0+ | Encryption (required, system-installed) |
| bzip2 | - | Compression (Autopatcher) |
| miniupnpc | - | UPnP port forwarding |
| Opus | 1.5.2 | Voice codec (RakVoice) |
| RNNoise | - | Noise suppression (RakVoice) |
Build with samples enabled, then run the test suite:
cmake -DMAFIANET_BUILD_SAMPLES=ON ..
cmake --build .
./Samples/Tests/Tests
# Run a specific test
./Samples/Tests/Tests EightPeerTestAvailable tests include: EightPeerTest, MaximumConnectTest, PeerConnectDisconnectTest, ManyClientsOneServerBlockingTest, ReliableOrderedConvertedTest, SecurityFunctionsTest, SystemAddressAndGuidTest, and more.
- Virtual worlds (dimensions): new per-entity / per-observer
VirtualWorldIdscoping on top of ReplicaManager3 — the SA-MPSetPlayerVirtualWorld/ routing-bucket model for instanced interiors (e.g. apartments). Players only see entities sharing their virtual world (orVIRTUAL_WORLD_GLOBAL), switchable at runtime with no reconnect. Derive entities fromVirtualWorldReplica3;Connection_RM3getsGet/SetVirtualWorld;ReplicaManager3getsGetConnectionsInVirtualWorld/GetGuidsInVirtualWorldandSetPlayerVirtualWorld. The filter is authority-only, so a downloaded copy never despawns the entity at its owner. SeeSamples/VirtualWorld
- ReplicaManager3:
GetReplicaAtIndexis nowconst, matching the other read accessors (GetReplicaCount,GetConnectionCount,GetConnectionAtIndex) — const methods iterating replicas no longer need aconst_cast. The returnedReplica3*stays non-const. Source-compatible (no break for existing non-const call sites)
- RPC4 user context:
RegisterFunction,RegisterSlot,RegisterBlockingFunctionand theRPC4GlobalRegistrationhandler constructors now take an opaquevoid *contextpassed back to the handler on every call — no more file-static global pointers to route an RPC to an object instance (each registration carries its own context) - Bug fix:
RakPeer::CloseConnectionno longer dereferences a nullrakNetSocketduring teardown (a pre-existing crash in release builds); falls back to the primary socket - Testing: added
RPC4ContextTest(slot/nonblocking/blocking context); quarantined the flakyManyClientsOneServerDeallocateBlockingTestin CI pending a teardown-race fix - Breaking: RPC4 handler signatures gained a trailing
void *contextand the registration calls take a context argument; there are no compatibility overloads (passnullptrwhen unused)
- Plugins: Added
DirectoryDeltaTransfer::AddFile(filePath, fileName)to queue a single file for upload (complements the recursiveAddUploadsFromSubdirectory)
- Namespace cleanup: Standardized on the
MafiaNetnamespace; removed the legacySLNetmacro in favor of anMNetshorthand alias, and dropped staleRakNetalias references - Single header set: Collapsed the legacy redirect-stub header layers into the canonical
mafianet/...includes - BitStream safety: Catch-all serialization now
static_asserts on trivially-copyable types (preventingstd::stringdouble-frees), with added length-prefixedstd::stringspecializations - Breaking: legacy include spellings and the
SLNetnamespace macro are removed; serializing non-trivially-copyable types via the genericBitStream::Write/Readis now a compile error
- Cross-platform: Full macOS and Linux support, merged
Socket2definitions, removed deprecated platform back-ends - Fixed IPv6 connectivity and initialization issues
- Upgraded dependencies: OpenSSL 3.6.0, miniupnpc 2.3.3, Opus 1.6.1; dependencies now fetched on demand via CMake
- Fixed undefined behaviour in congestion control and a null-socket crash in connection teardown
- CI now runs the full test suite on Linux, macOS and Windows, with numerous test-stability fixes
- RakVoice: Migrated from Speex to Opus codec with RNNoise noise suppression
- Added support for 8000, 16000, 24000, 48000 Hz sample rates
- Voice activity detection using Opus DTX
- Rebranded from SLikeNet to MafiaNet
- Updated to C++17 standard
- Modernized CMake build system
- Added Sphinx documentation with Breathe integration
- Removed pre-generated Visual Studio solution files
See CHANGELOG for full history.
MafiaNet continues the legacy of two foundational networking libraries:
- RakNet (2001-2014) - Industry-standard game networking library by Jenkins Software, used in countless multiplayer games. Acquired and open-sourced by Oculus VR.
- SLikeNet (2016-2019) - Community continuation by SLikeSoft that modernized RakNet with bug fixes, security patches, and C++11 support.
With SLikeNet no longer maintained, MafiaNet carries the torch forward—providing an actively developed, modern networking solution for the game development community.
- Discord: Join our server for support and discussion
- Documentation: mafianet.mafiahub.dev
- Issues: Report bugs or request features
- Contributions: Pull requests are welcome!
MafiaNet is released under the MIT License.