Community:OSC Resources: Difference between revisions

From VRChat Wiki
Hackebein (talk | contribs)
add CoreOSC and OscQueryLibrary
Hackebein (talk | contribs)
added vrchat_osc, and collapsible table
 
Line 8: Line 8:


==Libraries==
==Libraries==
{| class="wikitable" style="text-align:center"
{| class="wikitable" style="text-align:center; table-layout:fixed; width:100%"
|-
|-
!
!
! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://github.com/radarsat1/liblo liblo]
! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [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: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [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: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [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: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [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: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [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: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/hypebeast/go-osc go-osc]
! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://github.com/hoijui/JavaOSC JavaOSC]
! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/hoijui/JavaOSC JavaOSC]
! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://github.com/colinbdclark/osc.js osc.js]
! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/colinbdclark/osc.js osc.js]
! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://github.com/jangxx/node-oscquery node-oscquery]
! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/jangxx/node-oscquery node-oscquery]
! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://github.com/attwad/python-osc python-osc]
! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/attwad/python-osc python-osc]
! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://github.com/theepicsnail/vrchat_oscquery vrchat_oscquery]
! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/theepicsnail/vrchat_oscquery vrchat_oscquery]
! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://github.com/fraklein/python-oscquery python-oscquery]
! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/fraklein/python-oscquery python-oscquery]
! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://github.com/cyberkitsune/tinyoscquery tinyoscquery]
! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/cyberkitsune/tinyoscquery tinyoscquery]
! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://github.com/klingtnet/rosc rosc]
! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/klingtnet/rosc rosc]
! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://lib.rs/crates/oscquery oscquery]
! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://lib.rs/crates/oscquery oscquery]
! style="width: 6%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | [https://github.com/orchetect/OSCKit OSCKit]
! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/minetake01/vrchat_osc vrchat_osc]
! style="width: 3%; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; padding: 0.35em 0.1em;" | [https://github.com/orchetect/OSCKit OSCKit]
|-
|-
! style="text-align:left" | Language
! style="text-align:left" | Language
Line 42: Line 43:
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | Python
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | Python
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | Python
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | Python
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | Rust
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | Rust
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | Rust
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | Rust
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | Rust
Line 60: Line 62:
| 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 / Apache-2.0
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT / Apache-2.0
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT / Apache-2.0
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT / Apache-2.0
| style="writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap;" | MIT / Apache-2.0
| 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="17" style="text-align:left; background:#9AA0AA; color:#fff" | OSC transport
! colspan="18" style="text-align:left; background:#9AA0AA; color:#fff" | OSC transport
|-
|-
! style="text-align:left" | Send messages
! style="text-align:left" | Send messages
Line 82: Line 85:
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; color:#fff" | ✓
| style="background:#C03030; color:#fff" | ✗
| style="background:#C03030; color:#fff" | ✗
| style="background:#22A84A; color:#fff" | ✓<ref name="vrchat-osc-rosc">OSC UDP encode/decode via bundled [https://github.com/klingtnet/rosc rosc].</ref>
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; color:#fff" | ✓
|-
|-
Line 100: Line 104:
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; color:#fff" | ✓
| style="background:#C03030; color:#fff" | ✗
| style="background:#C03030; color:#fff" | ✗
| style="background:#22A84A; color:#fff" | ✓<ref name="vrchat-osc-rosc" />
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; color:#fff" | ✓
|-
|-
Line 118: Line 123:
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; color:#fff" | ✓
| style="background:#C03030; color:#fff" | ✗
| style="background:#C03030; color:#fff" | ✗
| style="background:#22A84A; color:#fff" | ✓<ref name="vrchat-osc-rosc" />
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; color:#fff" | ✓
|-
|-
! colspan="17" style="text-align:left; background:#9AA0AA; color:#fff" | VRChat types
! colspan="18" 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)
Line 134: Line 140:
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; color:#fff" | ✓<ref name="python-osc-dep" />
| style="background:#22A84A; color:#fff" | ✓<ref name="python-osc-dep" />
| 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 141: Line 148:
|-
|-
! 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" | ✓
Line 159: Line 167:
|-
|-
! 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" | ✓
Line 177: Line 186:
|-
|-
! 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" | ✓
Line 207: Line 217:
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; 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:#22A84A; color:#fff" | ✓
| style="background:#22A84A; color:#fff" | ✓
Line 212: Line 223:
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; color:#fff" | ✓
|-
|-
! colspan="17" style="text-align:left; background:#9AA0AA; color:#fff" | Optional types
! colspan="18" class="mw-customtoggle-ot-b-blob mw-customtoggle-ot-h-int64 mw-customtoggle-ot-d-float64 mw-customtoggle-ot-t-timetag mw-customtoggle-ot-s-symbol mw-customtoggle-ot-c-char mw-customtoggle-ot-r-rgba-color mw-customtoggle-ot-u mw-customtoggle-ot-m-midi-message mw-customtoggle-ot-n-nil mw-customtoggle-ot-i-infinitum mw-customtoggle-ot-array" style="text-align:left; background:#9AA0AA; color:#fff; cursor:pointer" | Optional types
|-
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-b-blob"
! 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" | ✓
Line 231: Line 242:
| 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" | ✓
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-h-int64"
! 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" | ✓
Line 249: Line 261:
| 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" | ✓
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-d-float64"
! 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" | ✓
Line 267: Line 280:
| 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" | ✓
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-t-timetag"
! 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" | ✓
Line 285: Line 299:
| 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" | ✓
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-s-symbol"
! 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" | ✓
Line 302: Line 317:
| style="background:#C03030; color:#fff" | ✗
| style="background:#C03030; color:#fff" | ✗
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; color:#fff" | ✓
| style="background:#D4890B; color:#fff" | ~<ref name="vrchat-osc-symbol">OSCQuery TYPE tag only; UDP encode/decode uses bundled [https://crates.io/crates/rosc rosc], which has no Symbol.</ref>
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; color:#fff" | ✓
|-
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-c-char"
! style="text-align:left" | <code>c</code> (char)
! style="text-align:left" | <code>c</code> (char)
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; color:#fff" | ✓
Line 321: Line 337:
| 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" | ✓
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-r-rgba-color"
! 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" | ✗
Line 336: Line 353:
| 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:#22A84A; color:#fff" | ✓
| style="background:#22A84A; color:#fff" | ✓
| style="background:#C03030; color:#fff" | ✗
| style="background:#C03030; color:#fff" | ✗
|-
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-u"
! style="text-align:left" | <code>u</code>
! style="text-align:left" | <code>u</code>
| style="background:#C03030; color:#fff" | ✗
| style="background:#C03030; color:#fff" | ✗
Line 357: Line 375:
| 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" | ✗
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-m-midi-message"
! 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" | ✓
Line 375: Line 394:
| 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" | ✓
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-n-nil"
! 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" | ✓
Line 393: Line 413:
| 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" | ✓
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-i-infinitum"
! 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" | ✓
Line 411: Line 432:
| 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" | ✓
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-ot-array"
! style="text-align:left" | <code>[]</code> (array)
! style="text-align:left" | <code>[]</code> (array)
| style="background:#C03030; color:#fff" | ✗
| style="background:#C03030; color:#fff" | ✗
Line 426: Line 448:
| 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:#22A84A; color:#fff" | ✓
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; color:#fff" | ✓
|-
|-
! colspan="17" style="text-align:left; background:#9AA0AA; color:#fff" | OSCQuery server — VRChat attributes
! colspan="18" style="text-align:left; background:#9AA0AA; color:#fff" | OSCQuery server — VRChat attributes
|-
|-
! style="text-align:left" | HTTP server
! style="text-align:left" | HTTP server
Line 447: Line 470:
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; 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 465: Line 489:
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; 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 508:
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; 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 501: Line 527:
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; 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 519: Line 546:
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; 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 537: Line 565:
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; 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 555: Line 584:
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; 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 573: Line 603:
| style="background:#D4890B; color:#fff" | ~<ref name="range-adv" />
| style="background:#D4890B; color:#fff" | ~<ref name="range-adv" />
| 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 592: Line 623:
| style="background:#C03030; color:#fff" | ✗
| style="background:#C03030; color:#fff" | ✗
| style="background:#22A84A; color:#fff" | ✓
| style="background:#22A84A; color:#fff" | ✓
| style="background:#D4890B; color:#fff" | ~<ref name="desc-adv" />
| style="background:#C03030; color:#fff" | ✗
| style="background:#C03030; color:#fff" | ✗
|-
|-
! colspan="17" style="text-align:left; background:#9AA0AA; color:#fff" | OSCQuery server — additional OSCQuery attributes
! colspan="18" class="mw-customtoggle-oe-tags mw-customtoggle-oe-extended-type mw-customtoggle-oe-unit mw-customtoggle-oe-critical mw-customtoggle-oe-clipmode mw-customtoggle-oe-overloads" style="text-align:left; background:#9AA0AA; color:#fff; cursor:pointer" | OSCQuery server — additional OSCQuery attributes
|-
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-oe-tags"
! style="text-align:left" | TAGS
! style="text-align:left" | TAGS
| style="background:#C03030; color:#fff" | ✗
| style="background:#C03030; color:#fff" | ✗
Line 613: Line 645:
| 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" | ✗
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-oe-extended-type"
! style="text-align:left" | EXTENDED_TYPE
! style="text-align:left" | EXTENDED_TYPE
| style="background:#C03030; color:#fff" | ✗
| style="background:#C03030; color:#fff" | ✗
Line 631: Line 664:
| 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" | ✗
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-oe-unit"
! style="text-align:left" | UNIT
! style="text-align:left" | UNIT
| style="background:#C03030; color:#fff" | ✗
| style="background:#C03030; color:#fff" | ✗
Line 649: Line 683:
| 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" | ✗
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-oe-critical"
! style="text-align:left" | CRITICAL
! style="text-align:left" | CRITICAL
| style="background:#C03030; color:#fff" | ✗
| style="background:#C03030; color:#fff" | ✗
Line 667: Line 702:
| 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" | ✗
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-oe-clipmode"
! style="text-align:left" | CLIPMODE
! style="text-align:left" | CLIPMODE
| style="background:#C03030; color:#fff" | ✗
| style="background:#C03030; color:#fff" | ✗
Line 685: Line 721:
| 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" | ✗
|- class="mw-collapsible mw-collapsed" id="mw-customcollapsible-oe-overloads"
! style="text-align:left" | OVERLOADS
! style="text-align:left" | OVERLOADS
| style="background:#C03030; color:#fff" | ✗
| style="background:#C03030; color:#fff" | ✗
Line 702: Line 739:
| style="background:#C03030; 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" | ✗
| style="background:#C03030; color:#fff" | ✗
|-
|-
! colspan="17" style="text-align:left; background:#9AA0AA; color:#fff" | OSCQuery client
! colspan="18" style="text-align:left; background:#9AA0AA; color:#fff" | OSCQuery client
|-
|-
! style="text-align:left" | HTTP client
! style="text-align:left" | HTTP client
Line 722: Line 760:
| 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:#C03030; color:#fff" | ✗
| style="background:#C03030; color:#fff" | ✗
|-
|-
! colspan="17" style="text-align:left; background:#9AA0AA; color:#fff" | Service discovery
! colspan="18" style="text-align:left; background:#9AA0AA; color:#fff" | Service discovery
|-
|-
! style="text-align:left" | mDNS advertisement
! style="text-align:left" | mDNS advertisement
Line 742: Line 781:
| 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:#C03030; color:#fff" | ✗
| style="background:#C03030; color:#fff" | ✗
|-
|-
Line 760: Line 800:
| 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:#C03030; color:#fff" | ✗
| style="background:#C03030; color:#fff" | ✗
|}
|}

Latest revision as of 02:39, 14 August 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 vrchat_osc OSCKit
Language C C# C# C# C# Go Java JavaScript TypeScript Python Python Python Python Rust 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 / Apache-2.0 MIT
OSC transport
Send messages [1] [2] [3]
Receive messages [1] [2] [3]
Bundle support ~[4] [1] [2] [3]
VRChat types
i (int32) [2]
f (float32)
s (string)
T (True)
F (False)
Optional types
b (blob)
h (int64) ~[5]
d (float64) ~[5]
t (timetag) ~[6] ~[5]
S (symbol) ~[7]
c (char)
r (RGBA color)
u
m (MIDI message)
N (Nil)
I (Infinitum)
[] (array)
OSCQuery server — VRChat attributes
HTTP server ~[8]
HOST_INFO ~[9]
FULL_PATH ~[10]
CONTENTS ~[10]
TYPE
ACCESS
VALUE
RANGE ~[11] ~[11] ~[11]
DESCRIPTION ~[12] ~[12] ~[12] ~[12]
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. 3.0 3.1 3.2 OSC UDP encode/decode via bundled rosc.
  4. Receive fully supported including nested bundles; send requires low-level OscWriter API.
  5. 5.0 5.1 5.2 lossy type mapping to Python float.
  6. receive-only
  7. OSCQuery TYPE tag only; UDP encode/decode uses bundled rosc, which has no Symbol.
  8. Minimal VRChat-specific subset; only serves / and /?HOST_INFO.
  9. Returns OSC_PORT only; missing NAME, EXTENSIONS, OSC_IP, OSC_TRANSPORT.
  10. 10.0 10.1 Hardcoded to /avatar and /tracking paths; not a dynamic OSC address tree.
  11. 11.0 11.1 11.2 Advertised as supported in HOST_INFO extensions but not implemented at the node level.
  12. 12.0 12.1 12.2 12.3 Supported on the node level but not advertised in HOST_INFO extensions.

See Also