Screencast.From.2025-05-03.10-24-32.mp4
This package is meant to be used as a platform for creating fast, multithreaded open metaverse clients.
This project aims to be fully documented and developer friendly. High level protocol docs can be found at benthic-mmo.github.io, and lower level packet parsing and implementation docs can be found on docs.rs. If you find that docs are missing or confusing feel free to open an issue here, or on the docs repo.
Each part of this project is meant to be useful on its own to other projects. Wherever possible, separate layers of the project are broken out into publicly facing interafaces, using accessible, language agnostic protocols like JSON or UDP.
People write code for other people. The community surrounding this project aims to be deliberate, welcoming and curious. Getting started should be simple, and implementing changes should be hassle-free.
Wherever possible, this project prioritizes well-documented and standardized tools over handwritten ones. Ideally this can serve as an interface between the more confusing secondlife/opensim protocols, and newer, cleaner ones.
This project should prioritize writing machine-testable code to ensure stability long-term.
This crate is the core of the project. This is what handles packet IO, and server/ui communication using actix. UDP packets are used to communicate between the core and the UI. This allows frontends to be completely decoupled from the core, and can be written in any language using any framework. The server accepts messages in the form of packets as defined by the spec, and returns UI events serialized into bytes.
This is the protocol spec. This contains all of the information about messages that can be sent to and from the server, both in UDP and HTTP. The goal is to keep this general enough to be able to implement this for both client and server projects. More information on the spec can be found here.
Provides a straightforward way of handling incoming terrain information being sent from an open metaverse server.
Provides handling for the on-disk inventory database. Stored as SQL, this allows for lookup of all received objects, and handles storage and retrieval of the user's inventory.
Contains information on how to build skinned agents. This includes information like the agent struct, and functions for building agent skeletons.
Both a debug UI and a bevy plugin. This allows for quick testing, and other bevy projects to implement the full viewer protocol using only a few lines of code.
The benthic project stretches across several repos, containing several different crates. There are four primary crates that contain the project's core code.
- Metaverse Client (this repo)
- Metaverse Mesh, used by the project to generate mesh data for displaying in the UI
- Serde LLSD, parser functions for open metaverse serialization formats.
- Benthic Viewer (optional), a godot frontend for the project. Optional for most development.
In order to test the project from the master branch, these dependencies must all be downloaded on your disk, and organized like this. On the master branch, these crates use relative paths for versioning, allowing changes in one crate to be built from the core.
benthic_project
├── metaverse_client/
├── metaverse_gltf/
├── benthic_viewer/
└── serde-llsd/
OpenSimulator
└── bin/
In order to test locally, an instance of OpenSimulator must also be running either on-disk or remotely.
Prerequisite Packages:
rustcargoopenssl-develalsa-lib-develrust-libudev-develrust-libdbus-devel
cargo run
Will run the debug UI.
cargo test
Will run the tests.