Write Unity C#. Run it in VRChat.
Udonite compiles ordinary Unity C# to Udon for VRChat worlds. There is no dialect to learn and no list of forbidden keywords - the code you already write runs in the world as it is. Packages cover the parts of Udon that are fiddly to get right, and the hosted services cover the parts a world cannot do on its own.
Press, sync, show
A button anyone can press, a count every player sees, a label that follows it. No sync attribute, no serialization call, no dialect. The tutorial builds it from an empty project in about fifteen minutes.
Interactruns when a player presses the object.Synced<int>is the count every client holds. Writing .Value replicates it, and a late joiner receives the current value.Subscriberuns on every client when the value arrives, so the label is updated in exactly one place.
Get the compiler
Free, and it stays free. Paste this listing into the VRChat Creator Companion, then add Udonite from the package list.
https://udonite.github.io/vpm/index.json
Add to VCCThe compiler
C# in, Udon out. Generics, interfaces and the rest are compiled rather than reimplemented, so you write what you would write in any Unity project.
Hosted services
Send a message from a world to your Discord or your phone, and keep a counter, a score table or a shared switch that survives everyone leaving.
Free to use
The compiler is free, and stays that way. The hosted services have a free tier big enough to build against; supporting raises the limits.
Become a supporter →Packages
Libraries you drop into a world. Each one takes a part of Udon that is fiddly to get right and makes it ordinary C# again.
Binding
Hear that a player moved a control, without wiring anything in the inspector.
Read the docs →Logging
Logging that says which behaviour, which method and which line it came from, and keeps working after upload.
Read the docs →Networking
Synced values that tell you when they change, and typed messages anyone can send, with nothing to wire up.
Read the docs →Observables
A value that tells its subscribers when it changes, so a score and everything showing it stay in step without a list of things to poke by hand.
Read the docs →Persistence
Saving a player's progress, with two verbs instead of sixteen types and the one timing rule handled for you.
Read the docs →Serialization
Pack data to bytes or to JSON, over exactly what Udon can already marshal — not a reimplementation of either.
Read the docs →Questions people ask
- What is Udonite?
- Udonite is a compiler that turns ordinary Unity C# into Udon, the scripting runtime of VRChat worlds, together with a set of packages and hosted services. You write a MonoBehaviour the way you would in any Unity project, and Udonite compiles it into an Udon program when you save. The compiler documentation has the details.
- How is Udonite different from UdonSharp?
- UdonSharp is a dialect: a subset of C# with its own rules and a list of features it refuses. Udonite compiles the C# you already write, generics, interfaces, LINQ, async and records included, and refuses only what Udon itself cannot do, naming each case with a diagnostic code and a suggested rewrite. UdonSharp behaviours keep working in the same project. Language support lists what compiles.
- Is Udonite free?
- The compiler and the packages are free, and stay that way. The hosted services have a free tier large enough to build against, and supporters get higher limits.
- How do I install Udonite?
- Add the Udonite listing to the VRChat Creator Companion with the button above, then add the package to your world project. Your first world walks through it step by step, and Getting started is the short version.
- Which Unity and VRChat SDK versions does Udonite support?
- Whatever VRChat currently supports for worlds: today that is Unity 2022.3 and the Worlds SDK 3.10 or newer. VRChat keeps the current Unity version and the SDK documented, and Udonite follows them.
- What do the hosted services do?
- Relay sends messages from a world to a Discord webhook or your phone. Storage keeps counters, score tables and shared switches that survive everyone leaving. Both are managed from the dashboard and reached from a world through the Net and Persistence packages.