Community:OSC Resources: Difference between revisions
From VRChat Wiki
smaller table width |
add CoreOSC and OscQueryLibrary |
||
| Line 12: | Line 12: | ||
! | ! | ||
! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://github.com/radarsat1/liblo liblo] | ! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://github.com/radarsat1/liblo liblo] | ||
! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://github.com/LucHeart/CoreOSC-UTF8-ASYNC CoreOSC] | |||
! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://github.com/stella3d/OscCore OscCore] | ! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://github.com/stella3d/OscCore OscCore] | ||
! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://github.com/Natsumi-sama/OscQueryLibrary OscQueryLibrary] | |||
! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://github.com/vrchat-community/vrc-oscquery-lib vrc-oscquery-lib] | ! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://github.com/vrchat-community/vrc-oscquery-lib vrc-oscquery-lib] | ||
! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://github.com/hypebeast/go-osc go-osc] | ! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://github.com/hypebeast/go-osc go-osc] | ||
| Line 28: | Line 30: | ||
! style="text-align:left" | Language | ! style="text-align:left" | Language | ||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | C | | style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | C | ||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | C# | |||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | C# | |||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | C# | | style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | C# | ||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | C# | | style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | C# | ||
| Line 44: | Line 48: | ||
! style="text-align:left" | License | ! style="text-align:left" | License | ||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | LGPL-2.1+ | | style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | LGPL-2.1+ | ||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT | |||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT | |||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT | | style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT | ||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT | | style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT | ||
| Line 58: | Line 64: | ||
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT | | style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT | ||
|- | |- | ||
! colspan=" | ! colspan="17" style="text-align:left; background:#9AA0AA; color:#fff" | OSC transport | ||
|- | |- | ||
! style="text-align:left" | Send messages | ! style="text-align:left" | Send messages | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#C03030; color:#fff" | ✗<ref name="oscquerylib-osc">Pair with a separate OSC library such as [https://www.nuget.org/packages/LucHeart.CoreOSC LucHeart.CoreOSC] for UDP transport (see the [https://github.com/Natsumi-sama/OscQueryLibrary/tree/main/OscQueryExample example project]).</ref> | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 79: | Line 87: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#C03030; color:#fff" | ✗<ref name="oscquerylib-osc" /> | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 93: | Line 103: | ||
|- | |- | ||
! style="text-align:left" | Bundle support | ! style="text-align:left" | Bundle support | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#D4890B; color:#fff" | ~<ref name="osccore-bundle">Receive fully supported including nested bundles; send requires low-level <code>OscWriter</code> API.</ref> | | style="background:#D4890B; color:#fff" | ~<ref name="osccore-bundle">Receive fully supported including nested bundles; send requires low-level <code>OscWriter</code> API.</ref> | ||
| style="background:#C03030; color:#fff" | ✗<ref name="oscquerylib-osc" /> | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 108: | Line 120: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
|- | |- | ||
! colspan=" | ! colspan="17" style="text-align:left; background:#9AA0AA; color:#fff" | VRChat types | ||
|- | |- | ||
! style="text-align:left" | <code>i</code> (int32) | ! style="text-align:left" | <code>i</code> (int32) | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 127: | Line 141: | ||
|- | |- | ||
! style="text-align:left" | <code>f</code> (float32) | ! style="text-align:left" | <code>f</code> (float32) | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 143: | Line 159: | ||
|- | |- | ||
! style="text-align:left" | <code>s</code> (string) | ! style="text-align:left" | <code>s</code> (string) | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 159: | Line 177: | ||
|- | |- | ||
! style="text-align:left" | <code>T</code> (True) | ! style="text-align:left" | <code>T</code> (True) | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 175: | Line 195: | ||
|- | |- | ||
! style="text-align:left" | <code>F</code> (False) | ! style="text-align:left" | <code>F</code> (False) | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 190: | Line 212: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
|- | |- | ||
! colspan=" | ! colspan="17" style="text-align:left; background:#9AA0AA; color:#fff" | Optional types | ||
|- | |- | ||
! style="text-align:left" | <code>b</code> (blob) | ! style="text-align:left" | <code>b</code> (blob) | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 209: | Line 233: | ||
|- | |- | ||
! style="text-align:left" | <code>h</code> (int64) | ! style="text-align:left" | <code>h</code> (int64) | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 225: | Line 251: | ||
|- | |- | ||
! style="text-align:left" | <code>d</code> (float64) | ! style="text-align:left" | <code>d</code> (float64) | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 241: | Line 269: | ||
|- | |- | ||
! style="text-align:left" | <code>t</code> (timetag) | ! style="text-align:left" | <code>t</code> (timetag) | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 257: | Line 287: | ||
|- | |- | ||
! style="text-align:left" | <code>S</code> (symbol) | ! style="text-align:left" | <code>S</code> (symbol) | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 275: | Line 307: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 290: | Line 324: | ||
! style="text-align:left" | <code>r</code> (RGBA color) | ! style="text-align:left" | <code>r</code> (RGBA color) | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 305: | Line 341: | ||
|- | |- | ||
! style="text-align:left" | <code>u</code> | ! style="text-align:left" | <code>u</code> | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 321: | Line 359: | ||
|- | |- | ||
! style="text-align:left" | <code>m</code> (MIDI message) | ! style="text-align:left" | <code>m</code> (MIDI message) | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 337: | Line 377: | ||
|- | |- | ||
! style="text-align:left" | <code>N</code> (Nil) | ! style="text-align:left" | <code>N</code> (Nil) | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 353: | Line 395: | ||
|- | |- | ||
! style="text-align:left" | <code>I</code> (Infinitum) | ! style="text-align:left" | <code>I</code> (Infinitum) | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 370: | Line 414: | ||
! style="text-align:left" | <code>[]</code> (array) | ! style="text-align:left" | <code>[]</code> (array) | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| Line 384: | Line 430: | ||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
|- | |- | ||
! colspan=" | ! colspan="17" style="text-align:left; background:#9AA0AA; color:#fff" | OSCQuery server — VRChat attributes | ||
|- | |- | ||
! style="text-align:left" | HTTP server | ! style="text-align:left" | HTTP server | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 405: | Line 453: | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 419: | Line 469: | ||
|- | |- | ||
! style="text-align:left" | FULL_PATH | ! style="text-align:left" | FULL_PATH | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 435: | Line 487: | ||
|- | |- | ||
! style="text-align:left" | CONTENTS | ! style="text-align:left" | CONTENTS | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 451: | Line 505: | ||
|- | |- | ||
! style="text-align:left" | TYPE | ! style="text-align:left" | TYPE | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 467: | Line 523: | ||
|- | |- | ||
! style="text-align:left" | ACCESS | ! style="text-align:left" | ACCESS | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 483: | Line 541: | ||
|- | |- | ||
! style="text-align:left" | VALUE | ! style="text-align:left" | VALUE | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 499: | Line 559: | ||
|- | |- | ||
! style="text-align:left" | RANGE | ! style="text-align:left" | RANGE | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#D4890B; color:#fff" | ~<ref name="range-adv">Advertised as supported in HOST_INFO extensions but not implemented at the node level.</ref> | | style="background:#D4890B; color:#fff" | ~<ref name="range-adv">Advertised as supported in HOST_INFO extensions but not implemented at the node level.</ref> | ||
| style="background:#D4890B; color:#fff" | ~<ref name="range-adv" /> | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 517: | Line 579: | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#D4890B; color:#fff" | ~<ref name="desc-adv">Supported on the node level but not advertised in HOST_INFO extensions.</ref> | |||
| style="background:#D4890B; color:#fff" | ~<ref name="desc-adv">Supported on the node level but not advertised in HOST_INFO extensions.</ref> | | style="background:#D4890B; color:#fff" | ~<ref name="desc-adv">Supported on the node level but not advertised in HOST_INFO extensions.</ref> | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 530: | Line 594: | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
|- | |- | ||
! colspan=" | ! colspan="17" style="text-align:left; background:#9AA0AA; color:#fff" | OSCQuery server — additional OSCQuery attributes | ||
|- | |- | ||
! style="text-align:left" | TAGS | ! style="text-align:left" | TAGS | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 549: | Line 615: | ||
|- | |- | ||
! style="text-align:left" | EXTENDED_TYPE | ! style="text-align:left" | EXTENDED_TYPE | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 565: | Line 633: | ||
|- | |- | ||
! style="text-align:left" | UNIT | ! style="text-align:left" | UNIT | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 581: | Line 651: | ||
|- | |- | ||
! style="text-align:left" | CRITICAL | ! style="text-align:left" | CRITICAL | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 597: | Line 669: | ||
|- | |- | ||
! style="text-align:left" | CLIPMODE | ! style="text-align:left" | CLIPMODE | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 613: | Line 687: | ||
|- | |- | ||
! style="text-align:left" | OVERLOADS | ! style="text-align:left" | OVERLOADS | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 628: | Line 704: | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
|- | |- | ||
! colspan=" | ! colspan="17" style="text-align:left; background:#9AA0AA; color:#fff" | OSCQuery client | ||
|- | |- | ||
! style="text-align:left" | HTTP client | ! style="text-align:left" | HTTP client | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 646: | Line 724: | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
|- | |- | ||
! colspan=" | ! colspan="17" style="text-align:left; background:#9AA0AA; color:#fff" | Service discovery | ||
|- | |- | ||
! style="text-align:left" | mDNS advertisement | ! style="text-align:left" | mDNS advertisement | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| Line 667: | Line 747: | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
| style="background:#C03030; color:#fff" | ✗ | |||
| style="background:#22A84A; color:#fff" | ✓ | |||
| style="background:#22A84A; color:#fff" | ✓ | | style="background:#22A84A; color:#fff" | ✓ | ||
| style="background:#C03030; color:#fff" | ✗ | | style="background:#C03030; color:#fff" | ✗ | ||
Latest revision as of 04:17, 1 May 2026
The following was created by the community. It may contain material not directly endorsed by the VRChat team. To learn more, consider reading Contributing to the VRChat Wiki.
Open Sound Control enables users to read and write data in VRChat. There are plenty of helpful community made tools and libraries, that use OSC, and makes developing OSC tools easier.
Tools
Libraries
| liblo | CoreOSC | OscCore | OscQueryLibrary | vrc-oscquery-lib | go-osc | JavaOSC | osc.js | node-oscquery | python-osc | vrchat_oscquery | python-oscquery | tinyoscquery | rosc | oscquery | OSCKit | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Language | C | C# | C# | C# | C# | Go | Java | JavaScript | TypeScript | Python | Python | Python | Python | Rust | Rust | Swift |
| License | LGPL-2.1+ | MIT | MIT | MIT | MIT | MIT | BSD-3-Clause | MIT / GPL-2.0 | MIT | Unlicense | None | MIT | MIT | MIT / Apache-2.0 | MIT / Apache-2.0 | MIT |
| OSC transport | ||||||||||||||||
| Send messages | ✓ | ✓ | ✓ | ✗[1] | ✗ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓[2] | ✗ | ✗ | ✓ | ✗ | ✓ |
| Receive messages | ✓ | ✓ | ✓ | ✗[1] | ✗ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓[2] | ✗ | ✗ | ✓ | ✗ | ✓ |
| Bundle support | ✓ | ✓ | ~[3] | ✗[1] | ✗ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓[2] | ✗ | ✗ | ✓ | ✗ | ✓ |
| VRChat types | ||||||||||||||||
i (int32)
|
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓[2] | ✓ | ✓ | ✓ | ✓ | ✓ |
f (float32)
|
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
s (string)
|
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
T (True)
|
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
F (False)
|
✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ |
| Optional types | ||||||||||||||||
b (blob)
|
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | ✓ | ✓ |
h (int64)
|
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ~[4] | ✓ | ✓ | ✓ |
d (float64)
|
✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ~[4] | ✓ | ✓ | ✓ |
t (timetag)
|
✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ | ~[5] | ✓ | ✗ | ~[4] | ✓ | ✓ | ✓ |
S (symbol)
|
✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✓ |
c (char)
|
✓ | ✓ | ✓ | ✗ | ✓ | ✗ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓ | ✓ | ✓ |
r (RGBA color)
|
✗ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | ✓ | ✗ |
u
|
✗ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
m (MIDI message)
|
✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | ✓ | ✓ |
N (Nil)
|
✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | ✓ | ✓ |
I (Infinitum)
|
✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓ | ✓ | ✓ |
[] (array)
|
✗ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | ✓ | ✓ |
| OSCQuery server — VRChat attributes | ||||||||||||||||
| HTTP server | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ~[6] | ✓ | ✓ | ✗ | ✓ | ✗ |
| HOST_INFO | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ~[7] | ✓ | ✓ | ✗ | ✓ | ✗ |
| FULL_PATH | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ~[8] | ✓ | ✓ | ✗ | ✓ | ✗ |
| CONTENTS | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ~[8] | ✓ | ✓ | ✗ | ✓ | ✗ |
| TYPE | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✓ | ✓ | ✗ | ✓ | ✗ |
| ACCESS | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✓ | ✓ | ✗ | ✓ | ✗ |
| VALUE | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✓ | ✓ | ✗ | ✓ | ✗ |
| RANGE | ✗ | ✗ | ✗ | ~[9] | ~[9] | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✗ | ~[9] | ✗ | ✓ | ✗ |
| DESCRIPTION | ✗ | ✗ | ✗ | ~[10] | ~[10] | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✓ | ~[10] | ✗ | ✓ | ✗ |
| OSCQuery server — additional OSCQuery attributes | ||||||||||||||||
| TAGS | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ |
| EXTENDED_TYPE | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ |
| UNIT | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ |
| CRITICAL | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ |
| CLIPMODE | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ |
| OVERLOADS | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ |
| OSCQuery client | ||||||||||||||||
| HTTP client | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ |
| Service discovery | ||||||||||||||||
| mDNS advertisement | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ |
| mDNS discovery | ✗ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ |
- ↑ 1.0 1.1 1.2 Pair with a separate OSC library such as LucHeart.CoreOSC for UDP transport (see the example project).
- ↑ 2.0 2.1 2.2 2.3 Via bundled python-osc dependency; bundle support requires using python-osc's API directly.
- ↑ Receive fully supported including nested bundles; send requires low-level
OscWriterAPI. - ↑ 4.0 4.1 4.2 lossy type mapping to Python float.
- ↑ receive-only
- ↑ Minimal VRChat-specific subset; only serves
/and/?HOST_INFO. - ↑ Returns
OSC_PORTonly; missingNAME,EXTENSIONS,OSC_IP,OSC_TRANSPORT. - ↑ 8.0 8.1 Hardcoded to
/avatarand/trackingpaths; not a dynamic OSC address tree. - ↑ 9.0 9.1 9.2 Advertised as supported in HOST_INFO extensions but not implemented at the node level.
- ↑ 10.0 10.1 10.2 Supported on the node level but not advertised in HOST_INFO extensions.