OpenSoundControl.org: /pages /contents
/spec/1.0 /spec/1.1 /implementations /publications /about
(contents of this file: links to
each section)
Although OSC is often compared with MIDI, they are mostly incommensurable. OSC is primarily a self-describing data encoding. MIDI is a protocol with a tacit schema and hardware specification. So to understand OSC’s technical and historical context it is useful to consider the attributes of encodings which share its key features: self-describing with named, typed data with a core set of primitive types. This table of representative encodings is ordered chronologically. This reminds us that OSC (and some precursor encodings I developed) and JSON owe much to Lisp’s S-Expr’s and property lists.
| Attribute | S-Expr. (1960s) | ASN.1 BER/DER (1980s) | OSC 1.0 (1997) | JSON (2001) | YAML (~2001) | BSON (2009) | SMILE (2009) | MessagePack (2011) | EDN (2011) | CBOR (2012) | OSC 1.1 draft (2009 pub. 2012) | OSC Ext. (libs) (2010s) | UBJSON (2013) | JSON5 (2013) | Amazon Ion (2016) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 32-bit aligned? | ⬜ | ⬜ | ✅ | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ | ✅ | ✅ | ⬜ | ⬜ | ⬜ |
| Zero-copy friendly? | ⬜ | ~ | ✅ | ⬜ | ⬜ | ~ | ⬜ | ~ | ⬜ | ~ | ✅ | ✅ | ~ | ⬜ | ~ |
| Timestamp resolution | Parser-dep. | Fractional | 2−32 s | ms-num | ms+ ISO | ms | ms | ns | Arbitrary | Fractional | Same | Same | ms/ISO | ms | ns+tz |
| Framing / Msg boundaries | ⬜ (no msg boundary) | ✅ (TLV) | ✅ (packet) | ⬜ (needs delim/len) | ⬜ | ✅ (doc len) | ✅ | ✅ | ⬜ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
| Concise (binary) | ⬜ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ | ✅ | ⬜ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
| Names | Symbols | Tagged | Addr. patterns | Keys | Keys | Field names | Back-refs | Map keys | Keywords | Keys/tags | Addr.+tags | Addr.+libs | Keys | Keys | Keys+annot. |
| Integers | Text | Tagged widths | 32-bit | Text num | Text | i32/i64/dec128 | Varints | i8–i64 | Arbitrary | Arbitrary+big | +i64 | Unsigned | i8–i64 | Text | i32/i64/big |
| Floats | Text | f32/f64 | f32 | Text | Text | f64/dec128 | f32/f64 | f32/f64 | Arbitrary | f16/f32/f64 | +f64 | f32/f64 | f32/f64/HP | Text | f32/f64/dec |
| Timestamps | Symbolic | Tagged | NTP 64-bit | Str/num | ISO | Date, ts | Date | Ext. ts (ns) | Tagged | Tag 0 |
Type t
|
Arg t
|
Str/num | Str/num | Rich ts |
| Booleans / Null | Atoms | ✅ | ⬜ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ (T/F/N/I) | ✅ | ✅ | ✅ | ✅ |
| Other special types | Lists | Telecom/crypto | ⬜ | ⬜ | Anchors/sets | OID/regex/bin | Back-refs | Ext types | Keywords/tags | Tags (URI,big) | MIDI/char | Lib extras | ⬜ | Relaxed JSON | Annot./blob |
| Stability | Very stable | Decades | Frozen | Very stable | Stable | Stable | Stable | Stable | Stable | Stable (RFC 8949) | Draft | Ad hoc | Frozen draft | Informal | Active |
| Primary apps | Lisp data | Telecom, X.509 | Media ctrl | Web APIs | Configs | MongoDB | JSON alt | Perf RPC | Clojure | IoT, COSE | Multimedia | Multimedia libs | Binary JSON niche | Human configs | AWS/DBs |
This page of OpenSoundControl website updated Mon Aug 18 14:05:03 PDT 2025 by matt (license: CC BY).