Developer Update - 21 May 2026

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!

It’s true.

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:

  1. Unity captures your microphone input
  2. We encode that into an Opus frame
  3. It goes over the network, via our servers
  4. A remote user receives the frame and decodes it using the same Opus codec
  5. They apply some very basic gain compensation (I hesitate to call this true AGC currently)
  6. The audio data is queued for playback towards the single main thread of the game
  7. Unity plays it through an AudioSource on your mouth
  8. 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.

23 Likes

Just wanna say i laughted so hard with this update, the audio stuff seems amazing, looking forward for it!

6 Likes

A Zekk spotted in the wild.

Going to speedrun the Modular Avatar Global Collider PR to make it use the four colliders before resorting to finger theft!

Also, obligatory:
BOX SHAPED CONTACTS YEAAAAAAH

Good stuff! Creators eating well.

I will actually miss this feature. Some silly memories here n there from it.

4 Likes

YES!!! BOX COLIDERS!!! WOO!! ^o^

Global Avatar PhysBone Colliders and Box Contacts**

:tada::glowing_star:I AM SO HYPED :glowing_star::tada:

I understood almost nothing. ut love that this core part of VRC is being finetuned and improved.

The only feedback I’d give with regards to the Global Physbone Colliders would be to add another enum called Namedakin to how we do Contact Tags, but I feel that would be another feature that could be added later on if we want to have more than 4 colliders.

As for the Box Shaped Contact, would the proximity calculations also translate over to the capsule shaped receivers so we could fix that years old issue with using Proximity with Capsule receivers? There’s other stuff that I’d want added to box contacts but what’s coming soon is good enough.

Only other thing with regards to the audio stuff is if we could finally get our laugh visemes pls it’s been years since we’ve asked for the Oculus SDK to be updated :sob:

As a rural town IT guy who visits homes and small businesses…

Please people, have a backup login in place, in the event the third party, in this case Google, account is no longer accessible.

It hurts when the “master key” is no longer available, and you find yourself kicked out of a handful of services/sites, leaving you “fighting” to receive support from the third party (Good luck with Google/Facebook/Twitter support), to regain your “master key” account.

That’s not to forget keeping your recovery options current. At least once a year is good to glance over your login and recovery settings. I’ve had clients lose access to their Windows 10/11 user profile, because their MS Account linked to said profile was no longer accessible. (Unless you know how to, or a friend who can, force unlink the account, from outside the profile.)

1 Like

I haven’t heard about that issue personally, but sphere and capsule proximity calculation won’t change in this SDK release.

I’d be curious personally why a similarly shaped box contact wouldn’t solve that issue, so it might be worth trying it out in the 3.10.4 once it’s available and letting us know through Canny if it would still be useful to have a similar proximity system for capsules.

I love to read about all those shenanigans about the internals of vrchat. Seeing how much you need to tweak … because people are funny and crazy in so many good ways. It’s so fun and so fun to read about !

1 Like

back when I was using proximity with Capsules the contact wouldn’t work and would cause contacts to bug out, so I had to use Spheres instead

While this is an incredible idea I can only imagine this empowering those who nonconsentually blast their spotify playlists over their mic in public instances

That being said, you can just mute them…

I am glad that attention is being put towards features in favour of people who know what they’re doing. There are plenty on here who have crazy audio effect stacks that get demolished by VRChat’s voice processing.

2 Likes

The space outfit in the video thumbnail is Milky Way by ILE, in case any one was curious.

:rocket: 【16アバター対応】 Milky Way​:rocket: - ILE - BOOTH

Don’t forget that this is super useful for those that play musical instruments live in VRChat

5 Likes

Now that we have box contacts, do you think we’ll be able to have box colliders for physbones? It would be really nice for things like armor, clothes, belts, scarfs, even some skirts where you want it to be wide and flat :eyes:

one thing i dislike about resonite is that voice normalization is way too aggressive, and it’s done by the sender so you can’t do anything about it if someone else is way over-compressed.

Obligatory: Soba?

For real though, incredible update. Y’all have been doing a great job recently.

1 Like

So with global colliders does this mean we can finally have tails that respond to the world around them instead of falling through the floor and walls and stuff? If so, heck yes!!!

1 Like

I am happy for boxed shaped contacts, I wish one could also do path based contacts (the original Crash Bandicoot game used “camera paths” to where the game’s camera would always travel down a fixed path), with this one could use the UI to create a path point and then use the Unity Editor to place the first “point” for the contact’s bounds, and from there place point by point until they connect the last point to the first point and finish the shape. Also with this one could also optimize worlds as well to have contacts cover bodies of water then they can upload a free accessory that provides the underwater effects that would significantly optimize not only avatars but worlds as well. I figured I could place this here but can also open up a canny with the idea as well.

Can’t wait for all the LGBTQ people they’re going to ban on Pride month because a moral crusader mass reported somebody’s avatars with an automated script again

1 Like