Skip to content

Repository files navigation

OscTap

CI

OscTap is the actively-maintained, security-hardened continuation of oscpack — Ross Bencina's C++ library for packing and unpacking Open Sound Control (OSC) packets, with UDP and TCP networking classes for Windows and POSIX.

It is a drop-in successor: the canonical namespace is tap::osc, and the former names (osctap, and oscpack before it) plus the original include paths are retained as compatibility aliases, so existing code keeps building while new code uses tap::osc.

Status: actively modernized. The parsing path is audited, hardened, and fuzzed; a non-throwing validation gate, a freestanding/embedded profile, OSC-over-TCP, and an aarch64 (Raspberry Pi 5) target have landed. CI spans Linux/macOS/Windows × GCC/Clang/MSVC at C++17 and C++20, plus ASan/UBSan, RTSan, TSan, fuzzing, aarch64 (QEMU), Windows-runtime (Wine), and ~85% coverage. See ROADMAP.md.

What it is

OscTap is a set of C++ classes for constructing, sending, receiving, and parsing OSC packets. It is not an application framework — there's no namespace routing or service infrastructure, just the packet machinery. The networking classes are enough to write many OSC applications, but you can pair the packet classes with any transport.

Design goals (inherited from oscpack, and the reason it's worth continuing):

  • A simple and complete implementation of OSC 1.0.
  • Portable across a wide range of platforms.
  • Robust against malformed input — it should be impossible to crash a receiver by sending it a hostile packet. (This is the focus of the current hardening work.)

Quick start

cmake -S . -B build
cmake --build build
ctest --test-dir build --output-on-failure

Override the language standard with -DCMAKE_CXX_STANDARD=20 (C++17 is the floor). The library itself is header-only; the build targets are the tests and examples.

Layout

Path Contents
osctap/osc/ OSC packet classes (parsing, printing, outbound packing, listeners, stream framing)
osctap/ip/ UDP + TCP networking; posix/ and win32/ backends
oscpack/ redirect shim — old <oscpack/...> include paths forwarding to <osctap/...> (deprecated compatibility)
tests/ unit tests (malformed-input regression, validation, framing, UDP/TCP loopback), the compat-shim guard
demos/ runnable OSC programs (UDP hub + sender, TCP server + sender)
examples/ the canonical oscpack examples — OscDump, SimpleSend, SimpleReceive
android/ Android NDK JNI bridge + Kotlin facade
fuzz/ libFuzzer harnesses (parser + TCP deframer), corpora, standalone driver — see fuzz/README.md
docs/ guides (below); docs/legacy/ keeps the original oscpack README/CHANGES/TODO

Documentation

Heritage & license

OscTap continues oscpack by Ross Bencina (2004–2014), via the header-only line developed by Jean-Michaël Celerier and others. Original copyright notices are preserved throughout the source; see docs/HERITAGE.md for full credits and LICENSE for terms.

About

An actively-maintained, security-hardened continuation of the OscPack C++ library Open Sound Control.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages