Skip to content

Error

NumberMeaningDescription
TUKI0001A form this language does not supportValid as C#, but the runtime has no corresponding mechanism. This is the most common number, and the alternative forms are in each page’s table of unsupported forms
TUKI0099A form that doesn’t compileAccepted as syntax, but there’s no way to turn it into Udon instructions. Often appears together with TUKI0001.
TUKI0101A call not present in the runtimeThe method being called doesn’t exist on the Udon side.
TUKI0102A type not present in the runtimeThe variable’s type doesn’t exist on the Udon side.
TUKI0103A type that can’t be syncedThe type of a variable marked [UdonSynced] isn’t eligible for sync (sync).
TUKI0106A type that can’t interpolate[UdonSynced(UdonSyncMode.Linear)] or similar is attached to a type that can’t produce intermediate values (sync).
TUKI0108A form that holds a method as a valueDelegates and lambdas. Udon has no function values. Writing one as a type, creating one, or calling one all error for the same reason
TUKI0109Two or more programs in one fileOne file becomes one program (the shape of a program).
TUKI0110A field that can’t be synced[UdonSynced] on a const, static, or readonly field (Sync)
TUKI0112A cycle in reactive dependenciesThe dependencies loop back on themselves, so the order of updates can’t be decided (Reactive programming)
TUKI0114A check call outside a testAssert and Mimic can only be written inside a method with [TsukimiTest]. Mimic.Explore() must also be the first statement of the test (Testing)
TUKI0201A null-safety violationOnly appears in a range marked #nullable enable. What C# treats as a warning, this treats as an error (null and references).

Numbers with no example in this document (17)

Section titled “Numbers with no example in this document (17)”
NumberMeaningDescription
TUKI0104Not enough storage for variablesThere’s a cap on the number of variables one program can use.
TUKI0105Too many type argument expansionsToo many combinations were passed to a generic to expand them all
TUKI0107A conflict between the sync mode and the variableThe [UdonBehaviourSyncMode] setting and the way [UdonSynced] is attached don’t match up.
TUKI0117A test sits in a file that goes to the world[TsukimiTest] is written in the world-bound file. The method is built into the program that goes to the world and is exposed as an entry point. It compiles (does not stop)
TUKI0202A null comparison that always gives the same resultComparing a value type against null. It compiles (it doesn’t halt)
TUKI0203Taking a value type out of an objectReading it costs one conversion. It compiles (it doesn’t halt)
TUKI0204The cost of a 2D arrayIt turns into boxing each element on the way in and out. It compiles (it doesn’t halt)
TUKI0116A reserved nameNames beginning with __, and the names of the slots that receive the arguments of an event you handle (onPlayerJoinedPlayer for OnPlayerJoined), are used by the compiler for its own heap variables. Renaming the field fixes it
TUKI0120A model that cannot be compiled inThe trained model is outside the range that can be compiled in. The fix is in the settings of the tool that exported the model; rewriting the C# does not help (ONNX models (experimental))
TUKI0121A name a shader cannot holdA name in the part that runs on the GPU (kernels, the methods they call, and their parameters and locals) contains something other than ASCII letters, digits and underscores. Renaming it fixes it (methods and fields that stay on the Udon side can use any name)
TUKI0111Change propagation can’t be builtThe reactive attribute was read, but not one piece of change-propagating code could be placed. The effect isn’t run automatically (Reactive programming)
TUKI0113An effect that nothing runsThe effect’s trigger doesn’t change in any entry point. It compiles (it doesn’t halt)
TUKI0115An attribute on a synced fieldA value that arrives doesn’t run the effect (propagation is inserted only in the entry point that writes the value). It compiles (it doesn’t halt)
TUKI0119An effect that runs only once, at startupNo entry point that writes a dependency can be found, so it doesn’t run when the dependency changes later. It compiles (it doesn’t halt)
TUKI0901An internal compiler errorNot a mistake in the code you wrote. The same code may well be correct, so rewriting it won’t necessarily fix it
TUKI0902Analysis failedThe analysis failed partway through. An empty result doesn’t mean the risk is absent
TUKI0903A call in the output program to a name that doesn’t existThe compiled program calls a name that isn’t in this runtime’s Udon API. The name doesn’t appear in the code you wrote

The “Why” column in the “Not supported” tables is one of these four words. Whether it is worth waiting for is decided here.

  • Runtime: the runtime side has no mechanism. It can’t be written unless the runtime changes
  • By design: the mechanism exists, but this language decided not to support it. It never will
  • Not yet: the intent is to support it; it isn’t implemented. This can change
  • Undecided: no decision has been made
When the type is absentThis runtime exposes only part of the Unity and VRChat types, and writing a type that isn’t there into a variable is a TUKI0102 error
When the call is absentEven when the type is there, not all of its calls are. A call that isn’t exposed is a TUKI0101 error
Where the list livesNot in this document. Unity types are in Unity’s script reference, and VRChat types in VRChat’s creator documentation