Welcome to the Developer Update for May 21, 2026.
Today’s featured world is Cozy Calm by ~Sam.
Announcements
SPACE
Last we we released the Cosmic Journey Shop Update!
Do you want to jump into VRChat from a black hole? You now can! You can do some other cool things, too.
Watch the video! Grab the bundle!
Pride Month is Coming Up! See You There?
While we’re no longer accepting submissions for Pride, we wanted to make a lil note that, you know, you should look forward to Pride next month. We have a few surprises in store…
Keep an eye out on our socials on June 1 around 1pm PT for our kickoff!
2026.2.2 is in Beta!
This one features:
- Group Instance Announcements!
- VRC+ Leaderboard!
- Runtime Texture Compression!
- Sign into VRChat with your Google account!
- Improved World Preloading!
…and so much more!
Improved Randomness!
We are adding a new toggle to the Inventory Inspector that will allow you to control which items appear inside of your Random Cosmetics pool.
Before this, the random pool consisted of all of your non-archived items. After this update you will have more control over this and will be able to exclude the default items, too!
We Released a Case Study on FISH!
You can read it here. It was posted last week! TL;DR: FISH! was really successful and we think there are some lessons folks could learn!
Upcoming SDK Features
We’re hoping to begin beta testing of SDK 3.10.4 soon!
Here’s a quick preview of two new features planned to go out with that release.
Feel free to give them a try once the SDK beta starts, and if you have any feedback, remember to tell us about it on Canny!
Global Avatar PhysBone Colliders
Soon, you’ll be able to define global PhysBone colliders on avatars. For those not aware, a PhysBone collider will normally only be able to collide with PhysBones that reference that collider directly. If the collider is global, it can collide against any PhysBone regardless of that (assuming the PhysBone allows collision against whatever kind of content the PhysBone collider is on).
In the inspector, you’ll find a new Global Collision option where you can choose if this collider can globally collide with PhysBones on avatars, in worlds, or both. To begin with, avatars will be limited to a maximum of four global PhysBone colliders each.
This is the same system that VRChat already uses internally to add global colliders to your hands and fingers. Until now, a common workaround for getting custom global colliders on avatars has been to steal those automatic colliders from the avatar’s fingers.
We hope this feature provides a more convenient alternative to our creators!
Box-Shaped Contacts
Right now, contacts can be sphere-shaped or capsule-shaped. The upcoming SDK release will add support for them to be box-shaped as well!
Box-shaped contacts generally work the same way as usual, except… they’re box shaped. There are a few differences though:
- With a box contact, you can specify the width, height and depth of the box individually.
- Box-shaped contact receivers can calculate proximity as either the distance from the middle like normal, or as the distance from the sender to the positive Z face of the box. Measuring distance from the face might be useful for things like pushable buttons.
Here’s a very programmer-art illustration of how each of those modes behaves:
Box-shaped contacts will be available for both avatars and worlds.
Voice Audio Rework
Let’s talk about something incredibly core to VRChat! It’s in the name, actually: The “chat” part. Voice audio is one of the fundamentals of social interaction in VRChat, yet something that should generally fade into the background. Which it can only do if it is good.
So we’re working on improving it!
The Audio Stack
To talk about Voice Audio, we need to first understand the parts we are working with. The rough pipeline of how your voice reaches other people’s ears currently goes like this:
- Unity captures your microphone input
- We encode that into an Opus frame
- It goes over the network, via our servers
- A remote user receives the frame and decodes it using the same Opus codec
- They apply some very basic gain compensation (I hesitate to call this true AGC currently)
- The audio data is queued for playback towards the single main thread of the game
- Unity plays it through an AudioSource on your mouth
- SteamAudio applies spatialization and some custom near-field magic sauce (hey, we already did improve this part! yay!)
This works! But there is plenty of room for improvement.
Take our gain compensation for example: It relies on a very basic RMS-tracking algorithm, and runs on the receiver end for every other user in the instance with you. This is quite inefficient, and incidentally also means that any local gain adjustment you make (for example via the “Microphone Volume” slider) is mostly removed before your voice is played back.
Additionally, relying on Unity and its ways for handling these things also ties us to the main thread more often than we’d like. This is what causes the classic “I hear everyone’s last few seconds of voice repeating on loop” issue if VRChat hangs or has a big lag spike, and also costs more performance than it needs to.
In an upcoming rework, we hope to address most of these pain points. It is, however, important to point out right away that our main goal here will be not regress anyone’s experience - voice works fine for most of our userbase, and we absolutely want to keep it that way. Instead, we’ll focus on improving the rough edges you probably haven’t even noticed.
Ground Rules
Before talking about some technical details (it’s a dev update, after all), let’s make something clear: This will be a custom implementation. While we are planning to integrate some off-the-shelf components used by other VoIP software, like parts of the WebRTC stack that Google Meet uses, we have modified and tweaked every part of the new pipeline for VRChat’s use case.
Some of the customization is to better target the hardware VRChat runs on. Processing audio from a VR headset’s microphone has different constraints than someone using AirPods in a coffeeshop participating in a Zoom call (and annoying everyone around them (you just wanted to drink your Matcha Latte in peace (they’re on their third “circling back” already))).
The other part is that y’all are weird (endearingly). To give an example, we were evaluating different noise-gates, or VADs (Voice Activity Detectors).
That’s the part that makes your mic icon go from gray to white as you speak, and makes your client stop sending data whenever you stop speaking.
One of the candidate tech used a local machine learning model, and it was genuinely impressive! Until we threw some actual samples from VRChat players at it: ASMR, whispering, meowing and animal noises*, little vocal ticks, sometimes things as simple as unusual laughs.
You know, the stuff that makes people sound human. It failed all of them and never detected any “voice," so out it went. We are making sure every step of the way that the result actually matches what you people do on VRChat.
*(author’s note: sometimes I can’t believe I’m getting paid to meow into my PC)
Technical Stuff
In technical terms, there are several key pieces we hope to improve:
- Use a modified version of the battled-tested WebRTC APM (not the network protocol part, mind you) for AGC, voice-specific high-pass filtering, improved noise suppression, and the VAD.
- RNNoise, our current noise suppression tech, will remain available with some minor improvements.
- Custom validation steps and soft-clipping to harden against instability and malicious abuse. We even ran a fuzzer!
- Updated and improved opus encoding, including better PLC (Packet Loss Concealment).
- Off-main audio processing for both the input and output parts.
- Use MiniAudio instead of Unity directly for much more capable and stable microphone capture.
- A custom jitter buffer for increased stability across all kinds of network conditions. More on that below.
- Tied together with a big behind-the-scenes code refactor.
Finally, while we want the main experience to remain plug-and-play, we are also considering some more advanced settings. Audio is very setup and hardware specific after all.
Without any guarantees of this happening, we have floated ideas such as a “music mode” that disables any voice-specific processing, or a “raw volume” mode, for people who know exactly how loud their mixing is and to enable them to properly pick up whispers and detail noises.
Yeah, we’ve been busy!
As always, none of this is final. This is a work-in-progress feature, and we don’t have a timeline for when any of this may ship. However, we can give you a little sneak peek at one thing in particular!
Jitter Buffer Demo
Testing Audio in Unity can be annoying, so for rapid prototyping we developed an in-house voice stack emulator. This little tool allows us to plug all of these new technologies together for testing and validation, and presents enough realtime data to make a victorian child faint on sight.
The video below shows a demonstration of the center piece of the new network implementation: The jitter buffer.
This is a complex piece of code engineered to handle all kinds of network conditions thrown at it, while synchronizing data between threads to avoid ever having to stall any of the CPU cores the rest of the VRChat client uses. The summary comment alone spans almost 100 lines of code!
Our expectation is that this will increase the voice fidelity for users on bad internet connections, while also reducing latency for people with proper stable connections. It’s designed to be a win-win situation, basically.
Enjoy the magic of numbers without explanation!
We hope to have more on this effort in general over the coming months, so stay tuned :)
Conclusion
That’s it for this week! We’ll be back… in June? June 4? Oh my god. It’s going to be June already? Tempus Fugit, I guess.




