The Vircadia Domain server (codename Athena) is developed in this repository and uses the following stack:
- To support web, desktop, and mobile users in the same space, the Domain server connects with users over WebRTC and UDP simultaneously
- The world's state is continuously persisted to disk
- The persisted state can be saved to a snapshot at any time
- The persisted state is also backed up regularly through a rolling schedule
- Scalability & Robustness
- To enable scaling for hundreds or thousands of users in one instance, all major functions (avatars, entities, assets, messaging, etc.) are broken out into sub processes called Assignment clients
- Due to the rapid start and stop of Assignment clients, the scaling of worlds and recovery of mixers in real-time is nearly instant
- Extend core with C++ plugins
- Realtime spatial audio for all clients
- Server-wide text messaging
Compiling from Source
You can find general build information here.
Specific build information for each platform:
All packaging specific information and steps for the Vircadia Domain server can be found here.
For configuration instructions, see the Hosting section of the user docs.
The Domain server deploys a type of server called an Assignment client to provide different functionalities to a virtual world. There are currently six types and the Domain server will spin up one instance of each. They all connect directly to the client for maximum performance and reliability:
- Asset Server - Allows the upload and download of files from the server.
- Audio Mixer - Receives all audio streams and mixes them into single streams to send out to each node (user).
- Avatar Mixer - Receives all avatar and joint data and mixes them into single streams to send out to each node (user).
- Entity Mixer - Handles the state of all entities and their respective properties in a virtual world.
- Entity Script Server - Provides server side scripting functionality.
- Messsages Mixer - Handles all messaging activity between nodes on the domain (users).