godot-piggyback
Serverless WebRTC matchmaking for Godot - perfect as a "set-and-forget" solution for game jams.
This package signals peers by piggybacking off existing distributed networks, requiring no dedicated matchmaking server. It defaults to Nostr relays, with WebTorrent tracker support as well.
Attribution
Forked from freehuntx/godot-matcha, which was itself inspired by the JavaScript library Trystero. Huge thanks to both projects and their developers.
This fork adds support for Nostr relays, which tend to be more reliable and plentiful than WebTorrent trackers.
Installation
- Copy everything under
addons/into your Godot project. - Non-browser builds only: install the webrtc-native plugin.
- That's it - you're ready to go!
Usage
Example scenes are available under project/examples.
Mesh Example
All peers connect to each other in a fully-connected mesh topology.
extends Node
var mp1 := PiggybackRoom.create_mesh_room({ "identifier": "my-unique-game-identifier" })
var mp2 := PiggybackRoom.create_mesh_room({ "identifier": "my-unique-game-identifier" })
func _init():
mp1.peer_joined.connect(func(_id, peer):
print("(1) Peer connected: ", peer.peer_id)
)
mp1.peer_left.connect(func(_id, peer):
print("(1) Peer disconnected: ", peer.peer_id)
)
mp2.peer_joined.connect(func(_id, peer):
print("(2) Peer connected: ", peer.peer_id)
)
mp2.peer_left.connect(func(_id, peer):
print("(2) Peer disconnected: ", peer.peer_id)
)
Server / Client Example
One peer acts as the host; others join by room ID.
extends Node
var server := PiggybackRoom.create_server_room()
var client := PiggybackRoom.create_client_room(server.room_id) # Client must know the room ID
func _init():
server.peer_joined.connect(func(_id, peer):
print("(server) Peer connected: ", peer.peer_id)
)
server.peer_left.connect(func(_id, peer):
print("(server) Peer disconnected: ", peer.peer_id)
)
client.peer_joined.connect(func(_id, peer):
print("(client) Peer connected: ", peer.peer_id)
)
client.peer_left.connect(func(_id, peer):
print("(client) Peer disconnected: ", peer.peer_id)
)
Changelog for version v1.0.0
No changelog provided for this version.