Developer Update - 6 November 2025

Welcome to the Developer Update for November 6, 2025.

Today’s featured world is Cozy Coast by +Vera+.

Announcements

WIZARDS

STRASZ THE PURPLE has ENCHANTED YOUR EYEBALLS so that you MUST WATCH THIS VIDEO:

But yes, we have a lot of content for November! The Flask of Effervescence! The Emoji Grimoire Pack! The Sigil of Teleportation! The RUNIC GATEWAY! Of course, the Wizard Sticker Pack! And… a Penlight? Yeah, okay.

You’ll have until December 4th at 1PM PST to purchase all the goodies, so go get 'em.

Euoooooaaaaaahm… Oooooooaooooahm

There’s also something else in there for VRC+ subscribers. It’s not magical. Your friends are going to hate you.

:)

Event and Group Sharing

You will soon be able to share Groups and Events via the Sharing System! Groups and Events can both be shared via Pedestals or shared directly to other users.

Sharing Groups and Events will not require VRC+, so go crazy and share all of the cool things that you’re interested in with your pals!

Public Events and Public Groups are pretty straightforward to share if you’re already familiar with our Sharing System. Simply find the Group or Event that you’d like to share and hit the new “Share” Buttons on their respective info pages.

(PS: the event page share button used to open your web browser. This functionality has been moved to a new View on Website button!)

You can then drop them as pedestals…

…or you can share them directly with others!

Private Groups cannot be shared at this time.

It’s also important to note that these shares are not invitations to groups or events, rather, they serve as a quick way to get other people to the info pages for their respective content.

Users can choose to join the group or register interest themselves after they get a chance to view the shared content’s details.

This also means that public groups that are invite-only can still be shared, but that doesn’t mean that users viewing the details via a share are automatically invited.

This might be handy for club owners, for example, to share show-running groups and information about them but not necessarily have every user join as a member!

Group-only events can only be shared via pedestals for now. Only members of the group hosting the event will be able to see these pedestals. If roles are defined on the event, the pedestals should only appear for group members that have the respective roles.

More Steam Audio Behind the Scenes!

Some further work on realistic player voices! We wanted to get it just right, so we snagged a dataset of human voice properties (Leishman et al, you can see it here).

…and crunched the numbers to find the best possible fit!

We learned a couple neat things in the process - human voice, at least in the mid-to-high range, tilts slightly up due to how your neck/skull absorb sound.

Secondly, while Steam Audio uses raw amplitudes (and visualizes them that way), most papers you find are going to visualize in decibels. Tweaking the Steam Audio visualizer to fit this made it a little easier to see what was going on!

Here’s our results: it’s subtle, but internal feedback has been saying it’s a game-changer with big crowds in tight quarters. You might not even reach for earmuffs!

The blue section (Steam Audio highs, which are >8khz) aren’t even visualized in the paper, as the paper cuts off right at 8khz. This is likely because higher frequencies mostly only matter for syllabics (e.g. ssss noises) so tend to be overlooked.

Note that this is a good simulation of sound in a big, open area (concert, club, open field, outside) and less so of close indoor scenes, but either way it’s closer than a flat curve ever was!

Upcoming Creator Fixes

“Thumbnail image required” Avatar Upload Failures

In SDK 3.9.0, it’s possible for an avatar project to get stuck in a state where uploads always fail with the error “Thumbnail image is required for avatar creation”, even if a thumbnail had actually been selected.

This issue is related to how the SDK now generates avatar IDs remotely instead of locally, which is something we’ve mentioned in a previous Dev Update.

If a new avatar upload is interrupted, it can potentially leave a partially uploaded avatar behind, which can then cause strange behavior in the SDK when you try to upload it again.

A future release of the SDK will handle these partial avatars correctly, which should deal with this problem.

The SDK Builder Page Writes Defaults on Avatars

In SDK 3.8.2, a new validation check was introduced for avatars to verify that the avatar’s armature is a direct child of the game object that contains its animator.

This is necessary to allow pose syncing to work properly, or in other words, to make sure the pose you’re seeing yourself doing locally matches what other people see you doing. As part of that validation check, the SDK began calling Rebind() on the avatar’s animator.

Unfortunately, rebinding the animator also causes it to write defaults, which had the effect of reseting everything on the avatar affected by its animator back to its defaults every time validation ran. This one slipped past us – sorry for the issues it’s been causing!

The next SDK release will update it to rebind in a way that does not write defaults.

VRCMirrorReflection Can Modify Built-In Materials

The SDK contains a component called VRCMirrorReflection, which makes various changes to the material used by the attached object to turn it into a mirror.

It’s main purpose is to be used by the VRCMirror prefab included in the SDK, which you can drag and drop into your world to quickly and easily create a new mirror. Based on that assumption, this component worked by searching for a Renderer on the same game object as it and then directly reassigning its shader to the one used by VRChat’s mirrors.

Things would get weird if you directly added this component to one of Unity’s built in primitives like the Cube or Quad! Unity primitives use a material that’s built into the game engine that you should normally never edit.

When adding VRCMirrorReflection to one of them, that material would be updated to use the mirror shader instead of Unity’s Standard shader. That change would then apply to every other primitive shape in your world since they’d be using the same material!

A future SDK release will update this component so it only tries to directly replace the shader if the material is marked as editable (more specifically, if hideFlags doesn’t include NotEditable).

If the material isn’t editable, the component will generate its own copy of the material with the shader assigned and use that instead, leaving the original unchanged.

OSC /avatar/change Endpoint Wasn’t Triggering

The OSC end-point /avatar/change lets you switch avatars automatically by passing an avatar ID to it. The way this was intended to work is that it would let you change to an avatar if it’s:

  • In any of your favorites lists,
  • One you’ve used recently,
  • One you’ve purchased, or
  • One you’ve uploaded yourself.

An issue affecting this method made it so only the first of those cases was working. That’s fixed in an upcoming client release, so you’ll be able to use it for recent, purchased, and uploaded avatars again!

Data Dictionary Struct Key Issues

Data dictionaries can be used in Udon to map keys to values just like an ordinary C# dictionary. There’s been an ongoing issue with them where if you use a struct type as the key, attempts to get values out might fail when they shouldn’t.

For example, when doing something like this:

DataDictionary dict = new DataDictionary();
dict[new DataToken(new Vector3Int(2, 4, 6))] = new DataToken("test");
// Later...
if (dict.TryGetValue(new DataToken(new Vector3Int(2, 4, 6)), out DataToken value)) {
    Debug.Log($"UDON: Success! {value}");
} else {
    Debug.Log($"UDON: Failed!");
}

…the script would log “Failed!”, even though there is actually an entry in the dictionary with that key.

When two DataTokens contain references to structs, they were being compared by doing an equality check between those references using ==, which compared them by reference instead of by value.

The fix coming in the future is to compare those references by using Equals() instead, which means data dictionaries can get values correctly when they key is the same as a key already in the dictionary.

String and Image Loading Have No Content Headers

You can use string loading and image loading to request strings and images from the Internet from Udon and display them in your world in some way.

An upcoming client release will set the Accept header of string and image requests:

  • String requests will have the Accept header set to */*
  • Image requests will have the Accept header set to image/*

The goal of this is to let the server processing the requests tell whether the client is asking for a string or an image. In some worlds, this might help to reduce the number of VRCUrls that are needed by letting requests for each kind of content go to the same URL.

No Stream Tomorrow!

Woah, you made it down here? Well, if you did, we’re just letting you know that there’s no stream tomorrow. See you next week!

Conclusion

…and that’s it! Our next Dev Update will be on November 20.

9 Likes

HOLY BASED

Edit: Please tell the backend engineers i love them, this will make cleaning up my API so much easier <3

3 Likes

“Sharing Groups and Events will not require VRC+”, nice… Sadly now I’m expecting most things to be VRC+ only instead of the opposite. I wish you’d make VRC+ Lite so more people could enjoy more, you shouldn’t lose money on that.

“Players” noooooo. orz

Love seeing more items in the shop and finally starting to see spawn animations. But it’s just too expensive, but whenever something really great shows up I’ll get it. Also wish you didn’t force the uneven credit amount. And they are more expensive in Sweden damn it…

And excited for the coming audio improvement. Like I said before, this is really a big and main thing for something like VRC.

3 Likes

Any updates on soba?

4 Likes

In Open-Beta (and ostensibly Live as well) I’ve been having this issue where pickup desync REALLY easily in a bunch of worlds starting very recently.

From what I gather, it seems Ownership Transfer on VRC Object Sync is not handling the respawn location correctly. The respawn point changes to its location at time of ownership transfer instead of the correct position.

I also discovered what appears to be a race condition in which 2 client grabbing a pickup at the same time fully desyncing the pickup until a 3rd user grabs it, but that may likely be and unrelated issue.

Are these issues known? If not, I intend to try to document more cases of this and write a Canny; but until then I’m posting here.

1 Like

Changed. It slipped through! :stuck_out_tongue:

Not yet, but… soon. Hopefully. :slight_smile:

3 Likes

The race condition desync issue is likely unrelated if the other issue is indeed a new one. That race condition issue has happened on live for at least a year unfortunately.

Lessgoo!

I’m kinda hyped for the share system ngl.

$25 for everything has to be late april fools joke

For the Events Calendar, will there be a filter of what we want to and don’t want to see?

Still hoping this gets expanded to Worlds, Avatars, and maybe even Users someday. Just so much easier to drop a Sharing Pedestal than have to tell people how to search for the thing you are trying to show them.

I am a bit of wiki person, meaning I like being able to link to stuff whenever possible. So dropping a Sharing Pedestal to show what I am talking about would be the ideal equivalent thing in VRChat.

On that note, I am sad you guys didn’t link to the Canny posts for each of the issues you were talking about in this dev update. Would be a good way to introduce people to the Canny board if they haven’t seen it before too.

1 Like

Minor typo, should be:
“when their key”

Is there any estimate for when the new SDK might be released? The avatar defaults bug is incredibly frustrating to work with, and often causes me multiple issues an hour while working on avatars.

1 Like

So, to confirm, is the steam audio work mentioned live in the steam audio beta, or do I continue to cross my fingers in anticipation?

Awesome info dump on Steam Audio! I haven’t tried the Beta since the initial Beta release. I had a lot of trouble hearing people, especially in small spaces, when the first beta started. I am looking forward to trying it again!

On the new audio system, are large spaces the focus or will it also be tuned for small groups too? Currently on non-beta, it’s hard to hear groups, but small groups feel fine. I am not sure where to share my feedback on the beta; canny looked like the wrong place last time.

I also love VRChat adding cosmetics like the portals to the shop. It doesn’t compete with the community and offers a novel way to support the game. It’s weird seeing the monthly VRC+ drop being one item and everything else being an additional pay wall given the previous drops included more.

1 Like

You could also make public avatar sharing, it would be useful for avatar meetups to shere sample avatar without need to make your own world with pedestal

1 Like

About time! Tell whoever finally got to doing it that I love them and bow down to them :folded_hands::folded_hands::folded_hands:

1 Like

Can we get worlds being shareable through these methods?