Developer Update - 28 April 2023

Welcome to the Developer Update for 28 April 2023! This is the 13th text Developer Update of 2023.

Batten the hatches! Mast… the uh… mainsails! Secure the… er, rum barrels? Sorry, my sailing education comes almost exclusively from Sea of Thieves. Today’s Dev Update thumbnail features Shiro K’s world Sailing!

If you’d like to catch up, read our previous Developer Update from April 20.

2023.2.2 Open Beta

An Open Beta is going on! You can see the patchnotes here. We’ll talk about some of the new features in Ongoing Development.

SDK EMail Authentication Changes

In a previous Dev Update, we discussed SDK Email Authentication! In short, this is a thing that happens when you log in, and we see that the login is odd or different in some way. If you don’t have two-factor authentication enabled, then we shoot you an email with a code you need to enter.

The launch was… a bit of a mess. :flushed: We got a lot of people very confused! Sorry about that!

We turned it off, tweaked and fixed it up a bit, and have recently turned it back on with a bunch of bugs fixed.

Notably, even old SDKs can authenticate now – as long as they support Token-based 2FA. This means that as long as you’ve updated your SDK in the last… checks watchfour years, then you’ll be able to enter the email code in even if it’s asking you for a Token 2FA.

Creator Companion - Community Packages

Last week, we added Community Packages to the Creator Companion! Community Packages allow you to enhance your VRChat World and Avatar projects with packages made by the community without having to wait for us to curate the package you want.

This also means you’ll receive updates to those packages as often as the creators push them!

We created a short video to help you understand how Community Packages work:

Read our docs to learn more.

Ongoing Development

Squishy Bones

This feature is now in Open Beta with VRChat 2023.2.2.

We’ve added a new PhysBones feature to VRChat – SquishyBones!

This video is for the Live release but you get a 'lil preview here.

Like the bunny avatar at 5 seconds in? It’s made by Moop! You can get it here.

This update adds features to allow bones to stretch and squish in additional ways they couldn’t before.

The existing value “Max Stretch” allows you to specify how much a bone’s length could grow/lengthen. This previously only mattered when someone would grab bones and pull it out, but now means much more.

The value “Stretch Motion” has been added which specifies how much a bone should allow motion to affect the length of a bone. A value of 0 (default) makes bones work as they do now, where bones retain their length. A value of 1 means that the bone will grow/shrink depending on how it’s moved. The Pull value is the force that attempts to return these bones back to their original length as well as orientation.

Here’s what it looks like when Stretch Motion is zero, which is the default.

… and here’s how it looks with Stretch Motion set to 1!

We also added “Max Squish”, which specifies a percentage that the bone’s length can squish/shorten. This is similar to Max Stretch, just in the other direction. You can think of these terms as the min and max percentage of the bone’s length. Like Max Stretch, this value is affected when bones are grabbed and by Stretch Motion. In addition, colliders have a unique interaction with bones that can squish.

Here’s a video example of Grab Stretch and Squish.

Colliders can now affect the length of a bone by squishing them. Bones with a positive Max Squish value will be pushed away or down depending on the collider’s orientation. This can be used in a variety of ways from making bones that feel squishy to touch. If used with constraints, you can make unique buttons on an avatar.

A new parameter _Squish was added, which is very similar to the existing _Stretch parameter. It provides a float value ranging from 0 to 1. This value represents how much the entire length of the bone chain is squished to it’s minimum length. Like _Stretch, if a bone chain has multiple branches, it will choose the maximum value between all of them.

PhysBone Versioning

Providing these new features required some changes to how certain values were applied. These changes would have affected the appearance of existing VRCPhysBone components. To preserve existing avatar behavior, we have decided to add versioning directly to the VRCPhysBone component.

All existing VRCPhysBone components will use the old version 1.0 and work exactly the same. New components will default to the latest version, version 1.1.

If upgrading, you can change the dropdown to choose the latest version. You can freely change between versions.

Understand that some values don’t work exactly the same between versions! For this update, two specific values changed: Gravity and Stiffness.


Previously, Gravity acted as a force that competed with Pull. To get a specific look, you needed to balance the ratio of these two values.

Now, Gravity acts directly as the ratio of how much gravity deforms the rest position of your bones. A value of 1 means your bones will always fall straight down, and a value of 0.5 means it will hover halfway between the rest position and the world down vector.

In practice, we have found this to be much easier to tweak the look you are going for.

Since gravity is no longer a force, Pull is the only force that dictates how fast the bones will fall into their new resting position. Previously many things that pointed straight down would look like (Pull: 0 Gravity: 0.3). This now needs a configuration like (Pull: 0.3 Gravity: 1.0).


Previously, Stiffness acted as a force whose vector was the last frame’s bone vector. This acted as a competing force with Pull and Gravity and was useful for dampening specific motions. Like Gravity, you needed to manage the ratio between this force and the other forces to get a specific look.

Stiffness now acts as a ratio between the current velocity and the velocity needed to keep the bone in its previous orientation. This is more of a technical difference than a difference of purpose, as you still effectively use this value the same as you would before.

This is called out because the exact values required to achieve a similar look will differ.

Guided Mode

This feature is now in Open Beta with VRChat 2023.2.2.

VRChat can be an overwhelming experience for new users. Choosing your first avatar, finding cool worlds to explore, and navigating the menu can be… well, a lot! We’re working on new features to make this experience feel more streamlined.

One of these new features is Guided Mode.

Guided Mode is a new UI “mode” that makes it easy to access the core features of VRChat. For example, cloning someone’s avatar, changing worlds, or blocking a user.

Guided Mode will give new users control over their experience without overwhelming them with options and choices.

Guided Mode will be enabled for everyone in Open Beta. However, once it’s pushed to the live client, we will roll the feature out slowly using “A/B testing.”

This form of testing turns the feature on for some users but not all. We will collect data to see how people use this feature, and if it is helping them have a better experience in VRChat. This way, we can ensure the changes we’re making to VRChat actually improve the experience!

Once testing is complete and Guided Mode is fully rolled out, we may provide a way for anyone to turn it on, in case you prefer a simpler experience.

We’ll keep tweaking and adjusting Guided Mode as more features are added to VRChat, focusing on helping new users. For example, someone could use Guided Mode to find Groups that match their interests. That’s the kind of experiment we want to do, so keep an eye out for that in the future.

We’ll provide the community with more information as we can. Notably, we won’t be announcing every A/B test we’re doing.

New SDK Features!

These new SDK features are now in Open Beta with VRChat 2023.2.2.

DataContainers and VRCJSON

We’ve added DataContainers! With them comes Lists, Dictionaries, and JSON for Udon! We’ve talked about this feature before in previous Dev Updates.

DataLists and DataDictionaries give Udon functionality similar to Lists and Dictionaries.

We’ve also added VRCJSON, a helper class that can convert JSON strings (such as those received from Remote String Loading) to and from DataLists and DataDictionaries. Read the Data Containers / VRCJSON docs page to learn more.


We’ve added support for AsyncGPUReadback! This allows you to read back data from GPU and shaders without a heavy performance cost! We’ve talked about this feature in previous Dev Updates.

We’ve added the VRCAsyncGPUReadback.Request function and the corresponding OnAsyncGpuReadbackComplete event. Using these, you can read data from the GPU into CPU memory without too much of a performance impact at the expense of delaying the data for one or more frames.

Check the ASyncGPUReadback docs for more info.

Udon UI Updates

We’ve got a quick update for the upcoming Udon UI feature! We’ve been working on some tests, and thought you might appreciate this peek into where we’re at.

This UdonUI test demonstrates some of the debugging capabilities available through the system. A world-space canvas created with Udon UI shows a few values updating in realtime on an “AnimalFriend” UdonBehaviour, like logs in the console but easily attached to the world… It also shows a button added to the QuickMenu which calls a method to control the same UdonBehaviour. All of the Udon UI functionality here was created without making any changes to the AnimalFriend Udon Program.

Group Filter Members by Role

As mentioned in the last Dev Update, the ability to filter members by role is coming VERY SOON! (it might even be out already, I haven’t checked!) This change will help you organize/view your Group members on the website.

Search for your own Group members is being worked on, but doesn’t have an ETA yet!


Whew, that was a lot! Sorry about the delay.

Thanks for reading, and we’ll check back with you next week!

(FYI, we’ll be skipping the Dev Update for May 11th. Just a heads-up!)


I think it should be noted that Squish is part of 1.0, and that 1.1 is for the changes to how Gravity/etc work

1 Like

Woohoo! Exciting! Very good addition.

This is actually awesome. I’m also glad we got a performance analysis of physbone components the other day. It makes me happier to know that a few dozen physbone components isn’t the end of the world, especially since they can be enabled and disabled through expressions. Makes cool prefabs like buttons and other stuff actually usable and performant.

I feel like Udon UI is going to be a game changer in worlds. Both for consistency in user experience and accessibility. This was partially solved with tablet/mobile UIs in some worlds like B Club 2.0/3.0, but a unified system will be amazing.

Now here’s to hoping we can just have persistent world settings to round out this feature, which would work great since we have the JSON/Dictionary objects now. :eyes:


Any updates on fixing shader fallbacks? Standard, standard Specular, and Autodesk interactive based shaders don’t fall back properly, even with the VRCFallback tag added properly. It does work with Toon, but not any other built in shader. See the updated Canny for more info.

that’s pretty cool AnimalFriend cute.

1 Like

No updates, we’re aware of the issue but have not had resources to assign to the issue yet.


I’d love to see some options to control what axis/angles the squish bones can go. I’d also like to see this be implemented as well, since you don’t need local to world based transforms to calculate physics Canny

Only thing I’m curious about is Unity’s new User Generated Content tool and how that may be implemented. But that’s a topic for another day

Please make the MB limiter on quest able to go higher than 10 mb, alot of people are mad about it including myself. I cancelled my vrc+ because of it. I’m not paying a company who is only making quest worse than it already is with all of their limits. If you guys bring back the original mb limiter I will consider paying for vrc+ again.


Still no news on steam audio?

As a PCVR user I find this fascinating, for every post from someone wanting the Quest limits to be raised, there is a least two posts from Quest 2 users wondering why VRChat has so much trouble running.

Not enough memory to open VRChat, VRChat crashes every ten minutes, this world is a slide show. “I hide all but the nearest 5 avatars and VRChat still runs poorly”

I think there needs to be more granularity for the performance system. 70k poly with 8 mat vs 310k with 37 mats. Both not ideal for Quest performance I’ll agree, but there should be a way to show the first one without risk of seeing the second. Heck, 23k poly with 3 mat is just as very poor on Quest


As far as I’m aware you can’t upload quest avatars that are higher than 10 mb download size anyway. So I don’t see the point of this.

1 Like

It is all nice new feature but please talk a little bit more about an update for the world constraints?

1 Like

From what I’ve been able to figure out, it sounds like some people were modifying the SDK to bypass that limit.

The most amusing comment I saw was someone saying that bypass of the limit was helping them grow as an artist.

I’m a little confused-- Quest has always had a 10MB limit on avatars. Nothing has changed.

Can you explain the change you’re seeing?

The highlighted text has been present here ever since we released on Quest 1.

1 Like

wait there’s something wrong with world constraints?

I am enjoying the conversations about Squishy Bones going on around me. My user name makes it much more entertaining.

Nice! Random question, do y’all have any plans to add the ability to change group ownership?

1 Like

What kind of updates are you looking for? Constraints work in worlds for all platforms.

It is a planned feature but has no ETA.

I see. If this is the case, we fixed a bug and do not plan on un-fixing it. Asset filesize limits are important for keeping Quest crashes down.

Our most commonly reported* issue and bug is Quest out-of-memory crashes, so we won’t do anything that increases memory usage.

*By like… several orders of magnitude. It’s the most common issue with VRChat.


I believe this might lean more on the avatar development side and not really the world development end

They quite explicitly said “world constraints”. :thinking: Dunno, maybe a language difference.

I’ll wait for their reply.

1 Like