Comment by Rohansi
> you can just pretend all your players are in one shared world, like a singleplayer game, and the engine does all the multiplayer for you
But how does this really work? The website also says it's just baked into the language but there are many different approaches to networking games that have their own pros and cons.
It uses rollback netcode. The inputs are relayed to the other players and executed on all clients, and they end up in the same state because all Easel programs are guaranteed deterministic. To hide latency, the clients simulate forward even before they have received all inputs, and once inputs have been received it rolls back to the point of divergence to correct the prediction error. This works because the prediction is correct most of the time.
To be able to roll back, Easel incrementally snapshots the game state every tick. It only snapshots (and restores) what has changed, which makes it a lot more efficient than most rollback netcode implementations.
It also uses a peer-to-peer relay and adapts the latency asymmetrically, so the player who introduces latency feels their own latency.
I know there are other models and pros and cons, this is the right choice for Easel because I wanted to make the multiplayer fully automatic. One shared world, coded like a singleplayer game. There are certainly games which suit a client/server model better but I think the developer would then need to understand where their code is running and when to do remote procedure calls, and my goal was to make multiplayer so easy that even a teenager on their first day of coding could do it.