SDK2 to SDK3 (Udon)
The transition from VRChat SDK2 to VRChat SDK3 (Udon) is one of the most significant technical and cultural shifts in the platform's history. It represents a fundamental rearchitecting of how world creators build interactive content inside VRChat β moving from a largely static, trigger-based system with significant security risks to a fully programmable, sandboxed scripting environment. For the VRChat creator community, this transition changed what was possible, who could build, and how the platform's world ecosystem would develop through the 2020s.
This article documents both SDKs, the technology behind Udon, the community-created tooling (particularly UdonSharp) that shaped adoption, and the cultural and practical impact of the shift.
π οΈ Technical History Notice: This article covers platform infrastructure β the tools and runtimes underlying every interactive VRChat world. Understanding the SDK2βSDK3 transition is essential context for any VRCHistory article about world creation, creator tools, or the evolution of VRChat's content ecosystem. The transition also directly intersects with VRChat's monetization history, as SDK3's Udon Store was intended as a foundation for creator economy features.
Overview: What Is a VRChat SDK?[edit]
A Software Development Kit (SDK) in VRChat's context is the Unity package that world and avatar creators install to build content compatible with the VRChat platform. It provides:
- Prefabs, components, and scripts that interface with VRChat's runtime
- Tools for configuring avatar parameters, world settings, and interactivity
- Upload pipelines for publishing content to VRChat's content delivery network
- The scripting environment (or lack thereof) available to creators
VRChat has historically maintained separate SDKs for avatars and worlds, though both fall under the SDK2/SDK3 generational divide. This article focuses primarily on the world SDK transition, where the differences between SDK2 and SDK3 are most dramatic.
SDK2: The Legacy System[edit]
What SDK2 Was[edit]
SDK2 was the world creation SDK available from VRChat's early Steam Early Access era (February 2017) through the early 2020s. It was the only SDK available during VRChat's period of fastest community growth, including the viral January 2018 surge and the COVID-19-era expansion of 2020.
SDK2 worlds used a system of Triggers and Actions to create interactivity. This was a visual, component-based system built entirely on top of Unity's existing GameObject and Component model:
| SDK2 Concept | Function |
|---|---|
| VRC_Trigger | A component attached to a Unity GameObject that listens for events (player enter, interact, timer, etc.) |
| VRC_Action | The response to a trigger β playing audio, animating objects, teleporting players, toggling renderers, etc. |
| VRC_ObjectSync | Synced the position and state of physics objects across all players in an instance |
| VRC_PlayerMods | Applied movement modifiers to players (jump height, walk speed, gravity, etc.) |
| VRC_SceneDescriptor | Root component that defined world-level properties: spawn point, respawn height, reference cameras |
For the standards of 2017β2019, this system was functional. It allowed basic interactive worlds: doors that opened, buttons that played sounds, zones that changed avatars, and objects that could be picked up and thrown. Many of VRChat's most historically significant early worlds β including The Great Pug in its original form β were built on SDK2 tooling.
Fundamental Limitations of SDK2[edit]
SDK2 had several structural problems that became increasingly apparent as the creator community grew and ambitions escalated:
No Real Scripting[edit]
SDK2 had no user-accessible scripting layer. Creators were limited to the predefined Trigger/Action vocabulary. Complex logic β conditional branching, arithmetic, persistent state, loops β was either impossible or required elaborate workarounds using nested triggers, toggle states, and animation layers. Many advanced SDK2 world creators developed intricate systems using Unity's Animator as a makeshift logic processor, a workaround that was powerful but deeply unintuitive.
Security Vulnerabilities[edit]
The most serious problem with SDK2 was its attack surface. Because SDK2 worlds ran Unity scripts with relatively broad permissions, malicious worlds could execute harmful actions against players, including:
- Crashing client applications
- Exploiting audio and shader systems
- In some cases, interfering with other players' sessions
This was a persistent and serious concern for platform safety. Any world a user visited could potentially be weaponized against them. The absence of a security sandbox was not a minor inconvenience β it was a structural risk to the platform's safety model.
Networking Complexity[edit]
Syncing state between players in an SDK2 world required careful, often fragile configuration. There was no clean API for ownership, synchronization, or late-joiner state β all things that more sophisticated interactive worlds needed.
Limited Avatar Integration[edit]
SDK2 did not provide meaningful interfaces for worlds to interact with the avatar system in controlled ways. Richer avatar-world interactivity required hacks and workarounds.
SDK2 Legacy[edit]
Despite these limitations, SDK2 produced an enormous body of content. During VRChat's peak growth years (2018β2021), the vast majority of VRChat worlds in active circulation were SDK2 worlds. Many beloved community spaces, event venues, and historically significant locations were built on SDK2 infrastructure. This gave the SDK2-to-SDK3 transition significant stakes: an enormous archive of existing content needed to either be migrated or grandfathered in.
SDK3 and Udon: The New Foundation[edit]
What Is Udon?[edit]
Udon is VRChat's custom scripting runtime, introduced as the centerpiece of SDK3. Rather than exposing Unity's C# scripting environment directly to users (which would create the same security problems as SDK2, only worse), VRChat built a purpose-made virtual machine and scripting language that runs inside a security sandbox.
The name "Udon" is a reference to the Japanese noodle β consistent with VRChat's tradition of food-themed internal project names.
Key properties of the Udon runtime:
| Property | Details |
|---|---|
| Execution model | Runs in a sandboxed VM; cannot access arbitrary Unity or system APIs |
| Whitelist-based | Only explicitly permitted VRChat and Unity APIs are accessible to Udon programs |
| Networked by design | Udon has first-class support for synced variables and RPC (Remote Procedure Call) functions between players |
| Event-driven | Programs respond to VRChat-specific events: player join/leave, interact, respawn, timer ticks, etc. |
| Ownership model | Objects have an explicit owner; ownership can be transferred; late joiners receive synced state |
The sandboxing was the direct answer to SDK2's security problem. A malicious Udon script cannot crash a user's game or access unauthorized systems β it can only do what VRChat has explicitly allowed through the whitelist.
Udon Graph: Visual Programming[edit]
The primary authoring interface for Udon in SDK3 is the Udon Graph β a node-based visual programming environment integrated into the Unity Editor. Creators connect logic nodes representing variables, events, flow control, and API calls to build programs visually, without writing text-based code.
The Udon Graph drew comparisons to other node-based systems such as Unreal Engine's Blueprints or Unity's own Shader Graph. For creators without traditional programming backgrounds, it offered a path to real scripting logic without requiring knowledge of C# syntax.
In practice, however, the Udon Graph had significant usability limitations for complex programs. Large graphs became difficult to read, maintain, and debug. This limitation created the conditions for the community's most important SDK3 contribution.
UdonSharp: The Community Bridge[edit]
UdonSharp is a compiler that allows creators to write programs in a C#-like language that is then compiled down to Udon bytecode β the format the Udon VM actually executes. It was created by community member Merlin_VT (also known as Merlin) before being officially adopted and integrated into VRChat's toolchain.
UdonSharp was transformative for the SDK3 adoption curve:
- Experienced programmers who found the Udon Graph cumbersome could write familiar C#-style code
- Code could be version-controlled, reviewed, and maintained using standard software development practices
- The learning curve for programmers coming from Unity C# was dramatically reduced β UdonSharp code looks nearly identical to standard Unity scripts, with limitations imposed by the Udon sandbox
- Community-created libraries, utilities, and frameworks proliferated rapidly once UdonSharp was available
UdonSharp functionally became the default way experienced creators write Udon programs. The visual graph remained useful for beginners and simple logic, but the serious world-building community converged on UdonSharp.
β General community consensus, documented across VRChat creator spaces
Merlin_VT's work on UdonSharp is one of the most significant community contributions to VRChat's technical infrastructure in the platform's history. VRChat's eventual official adoption of UdonSharp into the SDK represents an acknowledgment that a community member had solved a critical usability problem that the platform's own tooling had not.
SDK3 Avatar Changes[edit]
While the world SDK transition to Udon was the most dramatic technical change, SDK3 also brought substantial changes to the avatar SDK. These are documented here for completeness.
Expressions Menu & Action Menu[edit]
SDK3 avatars introduced a new parameter and control system replacing SDK2's simple toggle/animation layer approach:
- Expression Parameters β Avatars can define up to 256 bits of synced state (bools, ints, floats) that control animation layers
- Expressions Menu β A radial menu system allowing avatar wearers to trigger emotes, toggle features, and adjust parameters in real time
- Action Menu β The in-world interface through which users access their Expressions Menu
This replaced SDK2's cruder gesture-based system and enabled significantly more expressive, feature-rich avatars β a change that directly influenced the avatar creator economy documented in this archive.
PhysBones: Replacing Dynamic Bones[edit]
One of the most impactful SDK3 avatar changes was the introduction of PhysBones as VRChat's native physics simulation system for avatar secondary motion (hair, tails, ears, clothing, etc.).
Prior to PhysBones, the community standard was Dynamic Bones β a third-party Unity Asset Store plugin by Will Hong. Dynamic Bones was widely used but had a critical performance problem: its calculations ran on the CPU, and in a VRChat instance with many avatars, the cumulative cost of simulating Dynamic Bones across dozens of player avatars could cause severe performance degradation.
PhysBones addressed this:
| Feature | Dynamic Bones (SDK2 era) | PhysBones (SDK3) |
|---|---|---|
| Author | Third-party (Will Hong / Asset Store) | VRChat native |
| Performance | CPU-bound; scales poorly with player count | Optimized; designed for multi-avatar VR instances |
| Interactivity | Limited | Players can grab and interact with PhysBones on other avatars |
| Integration | Required separate purchase and installation | Bundled in SDK3; no additional cost |
| Collision | Basic | Improved collider system |
The PhysBones transition required avatar creators to rebuild secondary motion systems on existing avatar products β a significant labor investment that was the subject of considerable community discussion during the transition period.
Constraint System[edit]
SDK3 also introduced a native VRChat Constraint system to replace Unity's built-in constraints, providing better performance and cross-platform compatibility (particularly relevant for the Quest platform, which had stricter performance budgets).
The Transition Timeline[edit]
| Date | Event |
|---|---|
| February 2017 | VRChat released on Steam Early Access; SDK2 is the only world creation SDK available |
| 2017β2020 | SDK2 world ecosystem grows rapidly; Trigger/Action system produces most of VRChat's early world catalog |
| Early 2020 | VRChat begins public development of Udon; early alpha access for select creators |
| 2020 | Udon public beta released alongside initial SDK3 world tools; SDK2 remains supported |
| 2020 | Merlin_VT releases UdonSharp publicly; community adoption begins immediately |
| 2021 | SDK3 world SDK moves to full release; Udon is the official scripting system for new worlds |
| 2021 | PhysBones released in SDK3 avatar SDK, beginning Dynamic Bones phase-out |
| 2022 | VRChat Creator Companion (VCC) released β new unified package manager replacing manual SDK installation; manages both SDK3 world and avatar packages, UdonSharp, and community packages |
| 2022 | UdonSharp officially integrated into VRChat's SDK and Creator Companion |
| August 2023 | SDK2 world creation and uploading officially ends; SDK2 worlds already on the platform remain accessible (legacy/read-only) |
| 2023βpresent | Active world ecosystem runs entirely on SDK3/Udon; legacy SDK2 worlds remain accessible but cannot be updated by creators |
VRChat Creator Companion (VCC)[edit]
The VRChat Creator Companion (VCC) deserves specific mention as the tooling layer that made SDK3 adoption practical at scale. Prior to VCC, installing and updating the VRChat SDK was a manual process β downloading Unity packages from the VRChat website and importing them into projects. This process was error-prone and made managing multiple SDK components (avatar SDK, world SDK, UdonSharp, community packages) unnecessarily complex.
VCC introduced:
- A dedicated desktop application managing all VRChat SDK and community package installations
- A curated package registry allowing third-party packages to be distributed and updated through a standardized system
- Project management tools for organizing multiple VRChat Unity projects
- One-click updates for SDK components
The VCC package registry became a significant distribution channel for community tools β physics utilities, shader packs, avatar systems, and world-building frameworks. This infrastructure had indirect cultural effects, making the creator ecosystem more accessible to less-technical creators.
Community Impact[edit]
World Creator Perspective[edit]
For world creators, the SDK2βSDK3 transition presented a genuine disruption. Existing skills β the Trigger/Action vocabulary, workarounds for complex logic via Animator, specific SDK2 component patterns β did not transfer cleanly to Udon. Creators who had spent years mastering SDK2's constraints had to learn an essentially new system.
At the same time, the ceiling of what was possible rose dramatically:
- Full inventory and currency systems (previously impossible cleanly in SDK2)
- Real-time multiplayer games with authoritative server logic
- Complex puzzle systems with branching state
- Dynamic world modification based on player actions
- Synchronized visual effects across large groups of players
The worlds that emerged from mature SDK3 tooling represent a qualitative leap over what was achievable in SDK2, even accounting for the transition cost.
Avatar Creator Perspective[edit]
The avatar SDK3 changes (PhysBones, Expressions Menu, new constraint system) required creators to:
- Rebuild PhysBones rigs on existing avatar products
- Learn the new Expressions Menu and parameter system
- Update avatar bases sold to customers
The PhysBones transition in particular was a significant labor event for the avatar creator economy. Creators who sold avatar bases were implicitly obligated to provide updated PhysBones versions of existing products if they wished to maintain customer satisfaction and commercial reputation. This created a period of intense update activity across the avatar marketplace.
Security Model Improvement[edit]
From the perspective of platform safety, the Udon sandbox addressed the most serious structural vulnerability of SDK2. The era of worlds that could crash clients or exploit player systems ended with the sunset of SDK2 world creation. This was a meaningful improvement to the basic safety of participating in VRChat as a user.
SDK2 Worlds: Legacy Status[edit]
As of August 2023, SDK2 worlds on VRChat's platform entered legacy/read-only status. This means:
- Players can still visit and play in SDK2 worlds
- World owners cannot update or modify SDK2 worlds β they are frozen as-of the last SDK2 upload
- No new SDK2 worlds can be created or uploaded
- SDK2 worlds are not deleted β they remain accessible indefinitely under current policy
This outcome preserves a significant portion of VRChat's historical world catalog. Worlds like early versions of iconic community spaces remain visitable, representing a form of living preservation of VRChat's early technical era. However, creators who wish to add features, fix bugs, or update assets in old SDK2 worlds must rebuild them from scratch in SDK3 β a substantial undertaking for complex worlds.
Connection to Broader VRCHistory Themes[edit]
| Theme | SDK2βSDK3 Connection |
|---|---|
| Graham Gaylor & Jesse Joudrey | The SDK3 initiative reflects founding commitments: open creation, user-generated content, and platform safety β all priorities articulated by VRChat's co-founders |
| Furry Community in VRChat | PhysBones was especially significant for furry avatar creators, as tails, ears, manes, and other secondary-motion elements are central to furry avatar aesthetics; the transition required widespread avatar updates across the furry creator economy |
| The Great Pug | One of VRChat's most historically significant worlds; its SDK version history illustrates the practical stakes of the transition for legacy worlds |
| Creator Economy | The Udon platform forms the technical foundation for VRChat's creator economy ambitions; the Udon Store system for paid world content is built on SDK3 infrastructure |
| Platform Safety | The Easy Anti-Cheat (EAC) controversy of July 2022 and the Udon sandbox represent two distinct but related approaches VRChat pursued to improve platform safety during the same general era |
Technical Reference Summary[edit]
| Feature | SDK2 | SDK3 (Udon) |
|---|---|---|
| Scripting | Trigger/Action components (no code) | Udon Graph (visual) + UdonSharp (C#-like) |
| Security | No sandbox; broad Unity API access | Sandboxed VM; whitelist-based API access |
| Networking | VRC_ObjectSync; manual configuration | First-class synced variables + RPC system |
| Avatar physics | Dynamic Bones (third-party) | PhysBones (native) |
| Avatar controls | Gesture-based; limited parameter system | Expressions Menu; 256-bit parameter space |
| Installation | Manual Unity package import | VRChat Creator Companion (VCC) |
| World creation status | Ended August 2023 | Active |
| Existing world access | Legacy/read-only | N/A (new system) |
See Also[edit]
- Graham Gaylor β VRChat CEO; SDK3 development occurred under his executive leadership
- Jesse Joudrey β VRChat CTO; technically responsible for the platform's SDK architecture
- The Great Pug β Historically significant SDK2-era world; illustrative case for legacy world status
- Furry Community in VRChat β Avatar creator community significantly affected by PhysBones transition
- Furality Online Xperience (F.O.X.) β Large-scale events whose technical execution depends on SDK3 world capabilities
- VRChat Creator Economy β The Udon Store and monetization layer built on SDK3 infrastructure *(stub β to be created)*
Notes on Documentation[edit]
Precise public release dates for individual Udon beta milestones and specific internal VRChat SDK versioning are not fully captured in available public sources. The timeline in this article reflects the best available public record. Editors with access to VRChat's official changelogs, the VRChat Discord server's archived announcements, or the VRChat Ask Forum should expand this article with precise versioning data where possible.
UdonSharp's development history and Merlin_VT's contributions deserve a dedicated article given their significance to the creator ecosystem. A stub is encouraged.
References[edit]
- VRChat Official Documentation β SDK3 / Udon reference (docs.vrchat.com)
- VRChat Creator Companion β Official documentation and release notes
- VRChat Ask Forum β Udon announcements; SDK2 sunset announcement
- VRChat Wiki β SDK and platform history
- VRChat Legends Wiki β Technical history timeline
- Merlin_VT β UdonSharp GitHub repository and original release documentation
- Community documentation: VRChat Udon networking, PhysBones migration guides
- Last documented: April 19, 2026