Welcome to 2026! We’re excited to give you an update on new and upcoming features for VRChat world and avatar creators.
Please remember that it’s not a complete list - it doesn’t include every change, our plans might change, and new features might make it in before they’re announced here.
Completed Roadmap Items
We improved VRChat’s audio system with Steam Audio, replacing ONSP. Your worlds and avatars might sound slightly different now - please check last December’s Developer Update for more details.
| Status | Name |
|---|---|
| Complete | Replace ONSP with Steam Audio[1] |
We also implemented a few minor features that weren’t mentioned on our previous roadmap:
| Status | Name | Description |
|---|---|---|
| Complete[1:1] | Add “Unique Random” playback order to the Animator Play Audio state behaviour | Play random sounds without repeating the same random sound twice in a row. |
| Complete[1:2] | Add/Expose EventTiming.PostLateUpdate, EventTiming.FixedUpdate, and Behaviour.isActiveAndEnabled to Udon | These changes make your Udon scripts more versatile and powerful. |
| Complete[1:3] | Improve VRCPlayerAPI.GetPlayers | Get a list of players without needing to provide an array as a parameter. |
Read our SDK release notes for more details.
New Roadmap
The new roadmap includes the following features:
This roadmap was created in March 2026. All items are subject to change!
| Status | Name |
|---|---|
| In progress[2] | Add a ‘Box’ ShapeType (New!) |
| In progress[2:1] | Add raycast component to avatars SDK (New!) |
| In progress[2:2] | Implement custom “global” physbone colliders (New!) |
| In progress[2:3] | VRCTween (New!) |
| In progress[2:4] | Expose VRC+ status to Udon (New!) |
| In progress[2:5] | Soba |
| In progress[2:6] | Avatar optimizer |
| Planned [3] | World analytics (New!) |
Click on the blue URLs above to see more information in the associated feedback posts.
Let’s go into a bit more detail about some of the roadmap items:
Soba
We’re still working on Soba! We’re currently hard at work getting it ready for closed beta testing, so we don’t have a detailed preview to share with you this time.
However, we thought you might enjoy seeing some of our work-in-progress technical documentation! Here’s a table showing which C# language features Soba and UdonSharp currently support:
Soba - C# Language Features (Click to expand)
The following chart lists features of C# 9.0, along with their support in both UdonSharp and Soba:
| Category | Feature | UdonSharp | Soba |
|---|---|---|---|
| Classes | defining behaviors | ✅ | ✅ |
| defining behaviors | ✅ | ✅ | |
| defining non-behavior classes | ❌ | ✅ | |
| defining abstract classes | ✅ | ✅ | |
| defining sealed classes | ✅ | ✅ | |
| defining partial classes | ✅ | ✅ | |
| defining nested types | ❌ | ✅ | |
| defining outside a file with the same name | ❌ | ✅ | |
| Structures | defining | ❌ | ✅ |
| Interfaces | defining | ❌ | ✅ |
| implementing | ❌ | ✅ | |
| Type system | polymorphism | ✅ | ✅ |
| value types & reference types | ✅ | ✅ | |
| nullable types | ❌ | ❌ | |
| Generics | calling generic methods | ✅ | ✅ |
| using generic types | ❌ | ❌ | |
| defining generic types | ❌ | ❌ | |
| Methods | defining instance methods | ✅ | ✅ |
| recursion | Partial | ✅ | |
| defining static methods | ✅ | ✅ | |
| defining constructors | ❌ | ✅ | |
| defining static constructors | ❌ | ✅ | |
| defining destructors | ❌ | ❌ | |
| defining properties | ✅ | ✅ | |
| defining indexers | ✅ | ✅ | |
| `event` (not Unity/VRChat events) | ❌ | ❌ | |
| delegates | ❌ | ❌ | |
| lambdas | ❌ | ❌ | |
| nested functions | ❌ | ✅ | |
| extension methods | ✅ | ✅ | |
| operator overloading | ❌ | ✅ | |
| named parameters | ✅ | ✅ | |
| optional parameters | ✅ | ✅ | |
| `ref` & `out` parameters | ✅ | ✅ | |
| Iterators | defining | ❌ | ❌ |
| `yield` | ❌ | ❌ | |
| Control flow | `if`/`else` | ✅ | ✅ |
| `switch` statements | ✅ | ✅ | |
| `switch` expressions | ❌ | ✅ | |
| pattern matching | ❌ | ✅ | |
| `for`, `while`, `do`...`while` | ✅ | ✅ | |
| `foreach` | ✅ | ✅ | |
| `break`, `continue`, `return` | ✅ | ✅ | |
| `goto` | ❌ | ✅ | |
| Operators | arithmetic (unary `+`/`-`, `*`, `/`, `%`, `+`, `-`) | ✅ | ✅ |
| logical (`&&`, `\|\|`) | ✅ | ✅ | |
| bitwise (unary `~`, `&`, `\|`, `^`, `<>`) | ✅ | ✅ | |
| logical shift right (`>>>`) | ❌ | ✅ | |
| relational (`==`, `!=`, `<`, `>`, `<=`, `>=`) | ✅ | ✅ | |
| ternary (`cond ? ifTrue : ifFalse`) | ✅ | ✅ | |
| type-testing (`is`) | ✅ | ✅ | |
| casts (C-style) | ✅ | ✅ | |
| casts (`as`) | ❌ | ✅ | |
| null-coalescing (`??`) | ✅ | ✅ | |
| null-coalescing assignment (`??=`) | ❌ | ✅ | |
| range (`x..y`) | ❌ | ✅ | |
| increment (`++x`, `x++`, `--x`, `x--`) | ✅ | ✅ | |
| assignment (`=`, `+=`, `-=`, `*=`, `/=`, `%=`, `&=`, `\|=`, `^=`, `<>=`, `>>>=`) | ✅ | ✅ | |
| logical shift right and assign (`>>>=`) | ❌ | ✅ | |
| Exception handling | `try`/`catch`/`finally` | ❌ | ❌ |
| `using` & `IDisposable` | ❌ | ❌ | |
| Data types | integer types (`byte`, `sbyte`, `short`, `ushort`, `int`, `uint`, `long`, `ulong`) | ✅ | ✅ |
| floating-point types (`float`, `double`) | ✅ | ✅ | |
| arrays | ✅ | ✅ | |
| non-generic collections | ✅ | ✅ | |
| generic collections | ❌ | ❌ | |
| LINQ | ❌ | ❌ | |
| Tuples | ❌ | ❌ | |
| anonymous types | ❌ | ✅ | |
| dynamic types | ❌ | ❌ | |
| Reflection | defining attributes | ✅ | ✅ |
| `System.Reflection` library | ❌ | ❌ | |
| `GetType()` method | ✅ | ❌ | |
| expression trees | ❌ | ❌ | |
| Preprocessor | preprocessor directives | ✅ | ✅ |
| defining symbols | ✅ | ✅ | |
| conditional compilation | ✅ | ✅ | |
| nullable contexts | ❌ | ❌ | |
| Name resolution | defining namespaces | ✅ | ✅ |
| `using` directives | ✅ | ✅ | |
| Native code | unsafe code | ❌ | ❌ |
| P/Invoke | ❌ | ❌ | |
| COM interop | ❌ | ❌ | |
| `stackalloc` | ❌ | ❌ |
Please keep in mind that this list might change before (or after) Soba releases! Once it’s out, you’ll find an up-to-date list in our documentation.
New avatars features
We’re implementing a few small avatar feature requests:
- Currently, contacts can only be sphere-shaped or capsule-shaped. This isn’t ideal for all types of interactions - for example, if a world or an avatar has square buttons that players can press with their fingers. Box-shaped contacts should be a neat addition that makes contacts more versatile and useful.
- Raycasts allow avatars to - for example - point at something with their hand, and make something appear at that location. FinalIK can already do this - but it’s a paid asset, and not optimized for non-PC avatars. We’re making raycasts an official feature of our avatars SDK, and they’re available on Android & iOS, too!
- We’re also working on global avatar colliders. Currently, only your avatar’s built-in hand and finger colliders are “global”, allowing you to interact with PhysBones that aren’t on your avatar. We’re working on the ability to add more global colliders and choose whether these colliders can interact with other avatars, worlds, and/or items. So many options!
You’ll gain access to box-shaped contacts and global avatar colliders very soon! We’re preparing to release them with our upcoming SDK.
VRCTween
Tweening is a term from animation, short for ‘in-betweening’. In a classic animation studio, a lead animator would draw the ‘key frames’ of an animation like the walk cycle above, and junior animators would draw all the frames in-between these key frames to create a fluid animation without tying up the lead with this work.
VRChat worlds have to solve similar problems all the time - you may want to move an object smoothly, enlarge a text element, or make a button flash red. You can already use Unity animations or Udon for tweening, but it’s usually slow and requires a lot of manual work.
The new VRCTween class provides new nodes and events that make tweening much more convenient.
For example, here’s an Udon graph script that uses TweenPosition to smoothly move a GameObject to another position, and triggers a custom event once it’s done. (Without any update loops or Unity animations!)
Here’s the same example in UdonSharp:
Click to expand
using UdonSharp;
using UnityEngine;
using VRC.SDK3.Components;
using VRC.Udon.Common.Interfaces;
public class TweenCompareTest : UdonSharpBehaviour
{
public GameObject cube;
void Start()
{
// Calculate position
Vector3 targetPosition = cube.transform.position + new Vector3(0, 1, 0);
// Start Tween
int tweenId = VRCTween.TweenPosition(cube, targetPosition, 3f, VRCTween.Ease.IN_OUT_SINE);
// Track completion
VRCTween.OnComplete(tweenId, (IUdonEventReceiver)this, "OnAnimationComplete");
}
public void OnAnimationComplete()
{
Debug.Log("Animation complete!");
}
}
And that’s not all - you can also tween floats, vectors, quaternions, and more. VRCTween is based on DOTween and brings much of the same functionality. We hope you’ll enjoy using it!
World analytics
This feature was requested almost eight years ago - and by none other than the founder of VRChat. (Check out the original feature request on our Canny feedback board.)
Currently, world creators only have access to their world’s current visitors and total number of visits/favorites. That’s… not much. And it may leave you with many questions, such as:
- Are visits increasing over time? Are users coming back?
- How long do users usually stay? Is your world engaging?
- How large are instances usually? Does your world need to fit more users?
- How many of your users don’t speak English? Should you translate your world?
- Does your world have performance issues? If yes, on what platform?
We want to give world creators access to analytics to help them find the answers. This makes it easier to improve your world, and to measure those improvements.
Don’t get too excited yet, because there are several important caveats:
- We want to start simple. Don’t expect a fully-fledged analytics suite.
- We have to test this feature with a small group of creators first, for various reasons. It may take a while before we can give most world creators access to world analytics.
- World analytics will be somewhat limited for privacy reasons. It won’t include advanced features or custom events.
- We’re still in the planning stages for world analytics. Our plans may change!
That said, we know you’re probably excited about world analytics, and we hope you enjoy hearing that we’ll be working on it. We’ll share more information about it in the future.
Other features
This is not a complete list! It doesn’t include:
- Minor SDK changes and improvements
- Changes to the Creator Companion
- Changes to the creator documentation
Got questions?
- Visit feedback.vrchat.com to be notified about status changes for any feature you upvoted or commented on.
- Our bi-weekly dev updates are where we usually go in-depth about how these features work.
- And, of course, once a feature is released, read the SDK release notes and documentation to learn more.
“Complete” means that this feature is done and released to everyone on the main version of VRChat. ↩︎ ↩︎ ↩︎ ↩︎
“In Progress” means that the feature is getting active development work! We are building the feature and performing internal testing and feedback cycles. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
“Planned” means that we haven’t started major development on the feature, but we plan on working on it. The feature may require some design and scoping work. ↩︎

