Developer Update - 2 May 2024

Welcome to the Developer Update for 2 May 2024!

Today’s Dev Update thumbnail features ケセドの花見舟-CHESED’s JAPAN SAKURA SHIP- by ケセドCHESED! Enjoy watching cherry blossoms from this cross-platform houseboat! It is Golden Week after all…

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

Important Info / Announcements

Golden Week Feature on VRChat

Golden Week in Japan is here! Enjoy our Japanese-themed world row for Golden Week until May 13th!

Ongoing Development

The Input Update

We have an exciting new update coming soon that will revolutionize how you interact in VR, both with and without controllers.

Cross-Platform Hand Tracking

We’ve reworked our hand tracking system that was originally built for Meta Quest to be able to work on any platform capable of providing skeletal hand tracking data. This allows for both for using the tracking data to animate your avatar’s hands and the ability to use hand tracking as input for navigating interfaces, moving around the world, jumping, and more.

The gesture-based input system has been given a lot of polish, with a new visual feedback state system. This should make inputs more reliable, and harder to accidentally activate. This will also make it more likely to activate when you want it to.

We’ve also improved the expressiveness of the menu lasers, making the menus easier to navigate.

The first platform to utilize this new cross-platform hand tracking system is SteamVR. The skeletal data is applied any time skeletal data is available, regardless of whether the fidelity level is estimated, partial or full.

The SteamVR controller drivers animate their skeletons when in estimated and partial mode to include extra ‘life’ to the hands, such as slightly closing the hand when you put your hands down by your side. The application of skeletal tracking data even with controllers also means that on Index controllers, your thumbs up will look correct!

This leads us into the next part of the Input Update:

SteamVR Input 2.0 Controllers

We will be taking full advantage of SteamVR Input 2.0 to bring a large variety of new features and customization and improve compatibility with existing and future VR controllers.

  • Full controller remapping - remap any action to any button you want on any controller, the customization possibilities are nearly endless!
  • SteamVR Skeletal System - brings improved finger tracking to Valve Index controllers. Also allows for finger poses to still happen while gestures are disabled on Meta Touch, Pico, Vive XR Elite, and other similar controllers
  • New gesture methods - including the new mappable “Gesture Direct” buttons that let you explicitly map gestures to any button
  • Bonus Mappable Actions - A whole array of new mappable shortcuts will made available for use on any button (or as a hold/double-press/chord)
    • Gesture Toggle
    • Nameplates
    • HUD
    • Chatbox
    • Earmuffs
    • Personal Mirror
    • Camera
  • Auto-Hold - tired of holding the grip button for equipable items like pens and grappling hooks? The option to auto-hold them is now available via the mappable “Drop” action. Now you can press once to pick those equips up and press again to drop them. This feature will also be making its way to all VR platforms.

Localization coming to Open Beta

Full UI localization is getting ready for open beta! This is a huge project we’ve been working for a long time and we’re super excited to see more people being able to see VRChat in their native language! The localization community has been doing a lot of great work to make this a reality and we can’t wait for you to enjoy it as well!

Currently the only UI elements localized are tooltips and the login screen. With this new update, we’ll bring localization to all UI elements in our client. This update will roll out to all of our current supported languages with more languages planned next: Chinese Simplified, Chinese Traditional, French, German, Hebrew, Indonesian, Italian, Japanese, Korean, Polish, Portuguese Brazilian, Russian, Spanish and toki pona.

As a reminder, localization in VRC is driven by its community, so if you see something missing a translation, you think something could be improved for your language, or if you want to vote for your language to be added next… help us making it happen! Come join our localization community here.

For mobile platforms, you can expect the game itself to be ready for localization, but we’re still working on localizing the native UI, which is the UI present on mobile before launching the game.

Have a sneak peek at the localization of the VRChat UI in Japanese:

Help articles will be localized as well!

SDK May 2024 Roadmap

We created an overview of our plans for the VRChat SDK!

It’s less detailed but quicker to read than our dev updates. Would you like to see more roadmaps like this in the future? Let us know!

Content-Refresh Websocket Event Fixed

We just fixed the content-refresh websocket event in client for avatars and worlds! It will be in the next release.

This means your authored worlds/avatars lists update in client when you upload/delete a world/avatar.

iOS Conversion for Avatars

You may notice that we’ve been testing automatically converting avatars built for android into avatars for iOS!

It’s experimental at the moment, but allows for a greater amount of content available on iOS without needing existing avatars to be reuploaded by the original authors.

Stay tuned for more news about iOS very soon…

VRChat Constraints

Constraints will finally be available on all platforms! We’re working on a new component for the VRChat Avatars SDK.

VRChat Constraints work like Unity’s constraint components but are more optimized for VRChat avatars. If you use Unity’s constraints, they’re automatically converted to VRChat constraints in-game.

Development screenshot! Not final!

But that’s not all! We snuck in advanced features such as the “Solve in local space” toggle. If you want to add some fake arms to your avatar, try this feature.

The VRChat Constraint component is still under development. We hope you look forward to trying it out later this year!

Web Team Updates!

The web team have been hard at work once again, we’ve made the following assortment of changes and improvements to VRChat - Home since our last update:

  • Added tools for uploading custom animated emoji sprite sheets
    • Onto your 1024px square canvas you can have:
      • 2-4 512px frames in a 2x2 grid
      • 5-16 256px frames in a 4x4 grid
      • 17-64 128px frames in an 8x8 grid
    • Frame rates can be between 1 and 64 frames per second.
    • You can set your emoji like CoolEmoji_14frames_10fps.png to pre-set the editor to your desired frame count and frame rate.
    • 1-bit or 8-bit alpha transparency is supported.
    • Note that while there is colour bleed between frames visible on the web, it will not be visible in the VRChat client itself.
    • Animated gifs are not yet supported.
    • We suggest using imagemagick’s montage tool or ffmpeg’s tile filter to convert existing animations into a spritesheet.
      • e.g. montage CoolGif.gif -coalesce -geometry 256x256 -tile 4x4 -background none CoolEmoji_14frames_10fps.png
    • Have fun reaching your Emoji Limit again!
  • Significantly reduced the amount of code you need to download to view any given page on the website!
    • We’re seeing up to a 50% reduction in data and a 30-50% reduction in load times in our testing in various scenarios, and there’s headroom for more
    • If you’re on a slow or high-latency internet connection this should make joining an instance you were linked to, or just exploring the website, quicker and more reliable!
  • The “launch” page for an instance should more consistently provide the correct locked/unlocked link types for Group instances
  • Fixed an issue breaking the password reset form when an error is encountered from the API
  • Fixed an issue causing “Explore Worlds” pages to only show worlds uploaded with an old SDK version
  • Fixed an issue causing the VRChat Credits symbol to appear as a □ square for some people
  • Fixed an issue which briefly prevented the Marketplace page from loading.
  • Various things we can’t tell you about yet :eyes:

Changes to Instance APIs and Auto Creation

Hey folks who poke our APIs! This is largely a very technical topic that will not affect most people and will largely go under the radar, but for third parties who may be touching our APIs we want to give a bit of warning around some changes which are coming soon.

VRChat instanceIDs have always worked so that if you craft a valid instanceID (think: 42705~hidden(usr_***)~region(use)), and then attempt to access an instance with that ID, we would create the instance if it didn’t already exist. We call this functionality Instance Auto Create, and it served us well when instances were much simpler and most of the data about an instance was actually embedded in the ID itself.

As we’ve slowly been rewriting how instances work, both to make them more secure, and add extra functionality, we’ve been moving away from adding anything more to the instanceID. In fact, in time we want to entirely replace the custom instanceID format we use with a generic UUID like we do everywhere else in our systems. This would unlock a lot of cool stuff, and maybe even open instances to be able to be dynamic in a lot of very cool and interesting ways!

To get us closer to that potential future and all the amazing possibilities it might offer us, we first have to kill Instance Auto Create.

For standard users this won’t mean anything, nothing changes for you. Instances will still be created, short links to instances will still work, etc. This only affects people who create instances by crafting valid instanceIDs outside of VRChat systems.

Thankfully, for those people there is a very simple fix: stop crafting instanceIDs, and call the instance create API directly, and we’ll give you back a valid ID. You can do this right now and this method of instance creation has been around since Groups launched.

Instance Create API

So, in a very rare (but hopefully less rare) case of us documenting something about our APIs, here is how the create instance API looks and functions.

The API endpoint for instance creation is: /api/1/instances, with POST as the HTTP method.

The expected data is JSON as follows:

    "type": "<one of: public|group|hidden|friends|private>",
    "worldId": "<worldId>",
    "region": "<one of: us|use|eu|jp>",
    "ownerId": "<userID or groupId>",
    "groupAccessType": "<one of: members|plus|public>",
    "roleIds": []<groupRoleIDs>,
    "canRequestInvite": <boolean>,
    "queueEnabled": <boolean>,
    "closedAt": "<dateTimeString>",
    "hardClose": <boolean>,

So what do some of these fields mean!?

type: always required and is fairly self explanatory, the type of the instance. Although note that hidden is actually what we call friends+, and invite+ doesn’t actually exist unless you set canRequestInvite (this is weird we know).
worldId: is always required, just an ID of the world you want the instance to be of.
region: always required, what region you want your instance in.
ownerID: required for all types except public. GroupId if group instance, or userId if user instance (hidden|friends|private).
groupAccessType: defaults to members, controls what the access type for the group instance is.
roleIds: only applies to group instances with access type members, an array of roleIds to limit the instance to.
canRequestInvite: only applies to invite type instances to make them invite+ (yes, it’s odd, we know).
queueEnabled: enables queues for group instances.
closedAt: A date time in the future to close the instance at. This is already supported, and works, but we haven’t yet finalized our UI for exposing this. Doesn’t work for public instances. Scheduled instance closing UI? Maybe coming soon! (no promises though)
hardClose: Currently unused, but will eventually be a flag to set if the closing of the instance should kick people.

Instances created using this API will exist and be accessible. Other than our own official UIs for creating instances, this API endpoint will soon be the only way of creating instances. So if you’re creating instances directly via our APIs, this is how you will have to do it going forward, if you don’t already!

New Home World Update

We’re ready for you to check it out!

Here’s the World Link, hop in and enjoy the vibes!

This is a separate ID; we’re running a brief Open Beta test before moving it to the Default Home ID.

At this stage, we’re polishing up some final details, so we’d love your feedback on any bugs or usability issues, but we’re not ready to field new feature requests just yet. We’re focused on stabilizing the new world as a solid foundation as we move forward.

Here’s the Canny link if you find glitches or gremlins! We’ll be tackling high-priority bugs before releasing the world.

There’s already an internal list of improvements and fun stuff we’re looking forward to adding… and we’ll be doing Home makeovers for seasonal stuff like Spookality, limited-time Events, and collaborations with third-party Partners!

Finally, we added a music player!

The new default track is Youth by Toby Schay; we felt the mood matched the chill feeling of the Home world perfectly.

You can find more tunes from him here: (the whole Overgrowth album is great)
Instagram: @tobyschay

There’s also some hits from the VRChat archive… remember the Obstacle Course Jam?!

Here’s the other tracks in the player, check 'em out!

Seeking Solace by Arcane

Partially Offline by Andrea Baroni

Speed Trials by Rocktopus


That’s it for this Dev Update! Lots to unpack, and we hope you enjoy poking around the new upcoming Home World!

Our next text update is scheduled for May 16. See you then!


wait so PCVR Quest users will be able to finally use finger tracking? LETS GOOO! Great work VRC team


automatic ios conversion! im sure many, including myself, will appreciate not needing to build for all 3 platforms. i do wonder how it’ll work, though; considering the large difference in gpu architecture.


Yes! As long as you use a streaming app that supports it! (as of right now, only Virtual Desktop & ALVR, but that might very much change in the future)


Please make sure activate safe mode is a mappable action. I think right now if you unmap one of the menu buttons, you are will be unable to activate safe mode using controller buttons. I don’t have 2 menu binds because it’s wasting precious buttons when on top of VRChat actions you want to have space drag, space turn, toggle overlay etc. in VR.

  1. Oh, thank God! I really want about local constraints.

Would it be possible for VRChat constraints to support world constrained objects syncing to late joiners?


My friendgroup uses steam launch parameters to launch us all into the same instance when we start up VRChat, we have a dedicated homeworld with custom scripted spawn locations for all of us.

Will the changes to the instance API and creations affect us? We would very much like to continue to spawn in the same world without having to manually join each other.


Finally something that would allow me to stop using vive wands in favor of a better controller. Massive W (Hopefully I could do combos that can let me adjust what activates the gesture)

1 Like

you’ve been using vive wands?! the difference is gonna be like night and day!


If you already have an instance, you can continue to do this just fine. For new instances, you’ll just have to generate one via the website and then can continue to use that one as well. TL;DR, I believe this use-case should be mostly unaffected :+1:


Reason why I use Vive Wands is because the trackpad is the best thing for doing gesture based animations, which all of my avatars I upload rely on heavily. I’ve been waiting for a day where I could possibly emulate Vive Advance Controls with newer controllers or when I’m able to make my own custom pair. Now memers like myself can justify not using them as much anymore but there needs to be a lot more controllers on the market to do justify the jump

1 Like

First person to get on during a specific day would need to create it using the website then, right? Instance closes when no-one is there.

Could of course leave an extra account idle in the instance at all times, reduces it to once a week. xD

So no Quest Link ?

Quest Link doesn’t passes the required hand / finger data into SteamVR, so no :slight_smile:

1 Like

Quest Link doesn’t have a custom SteamVR driver, it only passes the data to OpenXR. In theory you could use Quest Link as long as you have an OpenXR application running that takes the OpenXR data and sends it to a custom SteamVR driver.

1 Like

Is there like a video how to do that ?

I don’t know if this would just magically work (I’ll have to try), but I use Quest Link and I have overridden the OpenXR runtime with SteamVR. But I am assuming that doesn’t just magically pass the hand tracking data through, since it doesn’t even register in SteamVR / Oculus Dash.

If there is, it’d be about face tracking. I know the ALXR Windows client can grab the data anyway, just need something to receive it on the SteamVR end.

VRChat uses OpenVR, so your OpenXR runtime selection wouldn’t change anything. (although when using stuff like ALXR you’ll want Quest as the OpenXR default)

1 Like