UNAVI Devlog #1

Hello welcome to the first UNAVI devlog 👍

I will try to start doing these every month or so to give updates on what's going on.

WTF is UNAVI??

UNAVI is an open-source VR social platform I've been working on. Some of the key features include self-hostable servers, moddable clients, a powerful WASM scripting environment, VRM avatars, and a self-sovereign identity layer using DIDs.

These features are combined into a standardized protocol called The Wired. This is to ensure compatibility and interoperability between different clients and servers, and leaves the door open for people to experiment with new features and build out services that integrate with the wider ecosystem.

To keep a long story short, the project has gone through a complete re-design and re-write over the past 2-3 months. This has been a very productive time for both me as a developer and the project, and I am very optimistic about its future.

Current Status

Almost all parts of UNAVI are written in Rust. The main app is built using Bevy, an awesome open-source data-driven Rust game engine. The target platform is VR, but a web build and native desktop app will also be supported.

There is not currently a deployed app for you to check out 😓 but the foundations are starting to come together.

gltf_kun

gltf_kun is a library I created for working with glTF files, and will be very important going into the future as the glTF format is used for all 3D models within UNAVI. More specifically UNAVI uses the .vrm format for avatars, and the .glxf format for scene composition, both of which are built on top of glTF.

This library aims to make working with glTF easier by creating a graph-based representation of the format. This graph can be created from or exported to any given format, including IO with Bevy. Arbitrary extensions are also supported, which can be used to store additional information in the glTF file. Some extensions are provided by the library, such as OMI_physics.

Screenshot of gltf_kun importing physics bodies into Bevy
Screenshot of gltf_kun importing physics bodies into Bevy

Future work includes a framework for creating and running "transform" functions over a given model, allowing us to compress textures or optimize meshes on the fly. Additionally there are many more extensions that would be great to support.

bevy_vrm

bevy_vrm is a library I created to bring VRM support to Bevy. There is still a lot of work to be done as currently the library only covers the basics of loading a model.

Future work includes finishing the implementation of the VRM and MToon specifications, as well as exploration into using gltf_kun for model loading.

dwn

dwn is a Rust implementation of a Decentralized Web Node (DWN) that I created. The DWN specification is still fairly new, but will be a core part of the UNAVI social layer.

With this system, your identity is stored on a self-hostable mesh network of DWN servers. These servers store your data and act as an endpoint for others to interact with you. DWNs are build upon Decentralized Identifiers (DIDs), which provide a flexible identity layer and gives you a lot of freedom as an end user.

You can control and manage your own identity independent of any external party, or you can use a fully centralized service and log in to UNAVI as you would with any typical app, or you can use some combination of the two.

Alice and Bob communicating via their Decentralized Web Nodes
Alice and Bob communicating via their Decentralized Web Nodes

Currently the basics of dwn are set up, with a variety of features like DID authorization working. The next steps are to finish support for data storage and retrieval, then start using it within the UNAVI app.

bevy_oxr

bevy_oxr is a project bringing OpenXR (and eventually WebXR) support to Bevy. I have not been involved in work on it so far (I don't own a working VR headset currently 😥), but I felt it was worth mentioning as a VR app using Bevy would not be possible without it. Great progress is being made here, so go check it out and help out if you can!

WASM Component Model

The Web Assembly (WASM) component model is the core of the UNAVI scripting system. WASM provides a sand-boxed execution environment for user scripts, and the component model provides a way for these scripts to interact with one another. Support for the component model has been making great progress in the past few months, and a workable implementation should now be possible for both the native and web builds of the UNAVI client.

A basic workflow for creating and running UNAVI scripts has been developed, and a WIT specification defining the platform APIs scripts can interact with has been prototyped.

Future work includes building out the APIs to allow for more useful user scripts, and finishing the runtime environment within the UNAVI client so that it works for both native and web builds. There are many more planned features I could list here as WASM scripts are one of the most unique and important parts of UNAVI, but for now the focus is on the basics.

The Future

With all that out of the way, what does the future of UNAVI look like?

My goal is to have a “solid” desktop app up within the next month or two. This is intentionally a bit vague, but I have a general idea of the features and level of polish I'm aiming for. Much of the work up until this point has been on the above mentioned libraries, learning Rust, and exploring the tech to figure out what this all will look like - but now its time to put everything together into a working app.

My VR headset was broken in a tragic accident that can only be explained as an act of God, but I should hopefully be getting a Bigscreen Beyond within the next ~2 months. One this happens I can begin adding VR support to the app.

The goal of UNAVI is not to create an open-source version of other platforms like VRChat or Resonite. There is a lot to learn from current platforms, but I often feel they don’t venture out far enough to really explore the landscape of virtual spaces and push the limits of whats possible. Ultimately this comes down to what I believe is the most exciting part of UNAVI - the ability to experiment and build upon it in a way not possible anywhere else due to the closed-source, proprietary nature of traditional apps. With UNAVI the code is open-source, the network is an open architecture, and the protocol is extendable.

If any of this interests you, come join the UNAVI Discord! Lot's of awesome people like myself hang out there.

🫡

See you next time.

-- kayh

UNAVI
UNAVI
Subscribe to kayh
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.