Your spec is a little all over the place; Different multiplayer games need different setups, or more specifically different parts have different requirements.
Matchmaking, lobbies, and rooms are one thing. (Database)
Running an instance of a game (joining, game state, sync points, state authority, game complete) Is another.
Live movement of players which dont affect game/rule state, (ie, jumping up and down doesnt score a point) but wants low latency is another.
For the middle part, i developed https://github.com/NewChromantics/PopNotPoker as an alternative to boardgame.io for easy room creation, sharing, and most importantly to me, exetremely easy game rules (all async js)
The "netcode" would be stuck on top (player movement, voice chat etc), using a bit of player meta for say webrtc session sync (or udp addresses etc etc)
This is an approach I used for 25 years on pc, console and now vr & web games; have "keyframes" where the server/authority dictates new game state to everyone, and everything else is client side predicted and throwaway
For the middle part, i developed https://github.com/NewChromantics/PopNotPoker as an alternative to boardgame.io for easy room creation, sharing, and most importantly to me, exetremely easy game rules (all async js)
The "netcode" would be stuck on top (player movement, voice chat etc), using a bit of player meta for say webrtc session sync (or udp addresses etc etc)
This is an approach I used for 25 years on pc, console and now vr & web games; have "keyframes" where the server/authority dictates new game state to everyone, and everything else is client side predicted and throwaway