Lightyear
A library for writing server-authoritative multiplayer games with Bevy. Compatible with wasm via WebTransport.
Getting started
For Bevy 0.19, add Lightyear to your project with:
[]
= "0.29"
You can first check out the examples.
To quickly get started, you can follow this tutorial, which re-creates the simple_box example.
You can also find more information in this WIP book.
Repository layout
Workspace crate sources live under crates/, grouped by role. Directory names drop the lightyear_ prefix, but Cargo package names keep it.
crates/io: low-level IO links and backends such asaeronet,link,udp,crossbeam,websocket, andwebtransportcrates/connection: connection abstractions and adapters such asconnection,raw_connection,netcode, andsteamcrates/core: the top-levellightyearcrate plus shared core, sync, utils, and frame interpolation cratescrates/inputs: input crates such asinputs,inputs_native,input_bei, andinputs_leafwingcrates/replication: replication, prediction, and interpolation cratescrates/transport: serialization, transport, and message cratescrates/integration: Bevy ecosystem integrations such as Aviancrates/platform,crates/deterministic,crates/tools, andcrates/tests: platform support, deterministic replication, tooling, and test support
Related projects
- lightyear-template: opiniated template for a bevy + lightyear starter project
Games
- Lumina
- cycles.io for bevy jam 5: https://cbournhonesque.itch.io/cyclesio
Features
- Transport-agnostic: Lightyear is compatible with a number of IO backends, including:
- UDP sockets
- Uses
aeronetfor WebSocket, Steam and WebTransport support
- Serialization
- Lightyear uses
postcardas a default serializer, but you can provide your own serialization function
- Lightyear uses
- Message passing
- Lightyear supports sending packets with different guarantees of ordering and reliability through the use of channels.
- Packet fragmentation (for messages larger than ~1200 bytes) is supported
- Input handling
- Lightyear has special handling for player inputs (mouse presses, keyboards).
They are buffered every tick on the
Client, and lightyear makes sure that the client input for tickNwill be processed on tickNon the server. Inputs are protected against packet-loss: each packet will contain the client inputs for the last few frames. - With the
leafwingfeature, there is a special integration with theleafwing-input-managercrate, where yourleafwinginputs are networked for you! - Also supports the
bevy-enhanced-inputcrate!
- Lightyear has special handling for player inputs (mouse presses, keyboards).
They are buffered every tick on the
- Deterministic replication
- Lightyear supports deterministic replication when only inputs are replicated. The simulation needs to be deterministic. The deterministic replication is compatible with both lockstep and prediction/rollback.
- World Replication
lightyearusesbevy_repliconto enable world replication features (replication, interest management, pre-spawning, etc.)
- Advanced replication
- Client-side prediction: with just a one-line change, you can enable client-prediction with rollback on the client, so that your inputs can feel responsive
- Snapshot interpolation: with just a one-line change, you can enable Snapshot interpolation so that entities are smoothly interpolated even if replicated infrequently.
- Input Delay: you can add a custom amount of input-delay as a trade-off between having a more responsive game or more miss-predictions
- Bandwidth Management: you can set a cap to the bandwidth for the connection. Then messages will be sent in decreasing order of priority (that you can set yourself), with a priority-accumulation scheme
- Lag Compensation is available so that predicted entities can interact with interpolated entities (used most often for fps games)
- Various topologies supported
- You can run your app in client-server mode or in P2P mode. You can also have a client act as the server (host-client mode).
- Examples
- Lightyear has plenty of examples demonstrating all these features, as well as the integration with other bevy
crates such as
avian
- Lightyear has plenty of examples demonstrating all these features, as well as the integration with other bevy
crates such as
Supported bevy version
| Lightyear | Bevy |
|---|---|
| 0.28-0.29 | 0.19 |
| 0.26-0.27 | 0.18 |
| 0.25 | 0.17 |
| 0.20-0.24 | 0.16 |
| 0.18-0.19 | 0.15 |
| 0.16-0.17 | 0.14 |
| 0.10-0.15 | 0.13 |
| 0.1-0.9 | 0.12 |