Community:OSC Resources: Difference between revisions

From VRChat Wiki
Hackebein (talk | contribs)
smaller table width
Hackebein (talk | contribs)
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="15" style="text-align:left; background:#9AA0AA; color:#fff" | OSC transport
! 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="15" style="text-align:left; background:#9AA0AA; color:#fff" | VRChat types
! 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="15" style="text-align:left; background:#9AA0AA; color:#fff" | Optional types
! 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="15" style="text-align:left; background:#9AA0AA; color:#fff" | OSCQuery server — VRChat attributes
! 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="15" style="text-align:left; background:#9AA0AA; color:#fff" | OSCQuery server — additional OSCQuery attributes
! 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="15" style="text-align:left; background:#9AA0AA; color:#fff" | OSCQuery client
! 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="15" style="text-align:left; background:#9AA0AA; color:#fff" | Service discovery
! 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

V · ECommunity-written content
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. 1.0 1.1 1.2 Pair with a separate OSC library such as LucHeart.CoreOSC for UDP transport (see the example project).
  2. 2.0 2.1 2.2 2.3 Via bundled python-osc dependency; bundle support requires using python-osc's API directly.
  3. Receive fully supported including nested bundles; send requires low-level OscWriter API.
  4. 4.0 4.1 4.2 lossy type mapping to Python float.
  5. receive-only
  6. Minimal VRChat-specific subset; only serves / and /?HOST_INFO.
  7. Returns OSC_PORT only; missing NAME, EXTENSIONS, OSC_IP, OSC_TRANSPORT.
  8. 8.0 8.1 Hardcoded to /avatar and /tracking paths; not a dynamic OSC address tree.
  9. 9.0 9.1 9.2 Advertised as supported in HOST_INFO extensions but not implemented at the node level.
  10. 10.0 10.1 10.2 Supported on the node level but not advertised in HOST_INFO extensions.

See Also