Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.


easy utility for publish/subscribe OSC message.


  • ofxOsc


  • this addon is tested with oF0.9.8~
  • if you use oF0.9.0~, then you can use std::function<void(ofxOscMessage &)>! detail: API Reference
  • if you use oF~0.8.4, then you can use branch:v0_1_x_oF084
  • if you have challange spirit, please use dev/vX.Y.Z branch.
  • if you want to join development ofxPubSubOsc, open the issue and post the PR for dev/vX.Y.Z.


How to use

class ofApp : public ofBaseApp {
	int foo;
	ofColor c;
	ofPoint p;
	void setup() {
		ofxSubscribeOsc(9005, "/foo", foo);
		ofxSubscribeOsc(9005, "/color", c);
		ofxSubscribeOsc(9005, "/p", p);
		ofxPublishOsc("localhost", 9006, "/fps", &ofGetFrameRate);
		ofxSubscribeOsc(9005, "/lambda", [](const std::string &str){
			ofLogNotice() << "receive " << str;
		ofxSubscribeOsc(9005, "/trigger_event", [](){
			ofLogNotice() << "receive trigger_event";
	void update() {
		// do NOTHING about OSC on update!!!
	void draw() {
		ofDrawCircle(p, 5);

Simple API Reference

API Reference is imperfect now.

If you want to use advanced features, see Advanced


  • void ofxSubscribeOsc(int port, const string &address, SupportedType &value);

bind a value to the argument(s) of OSC messages with an address pattern address incoming to port.

See more ofxSubscribeOsc

  • ofxUnsubscribeOsc(int port, const string &address);

unbind from OSC messages with an address pattern address incoming to port.

  • ofxUnsubscribeOsc(int port);

unbind from OSC messages with any address patterns incoming to port.

See class ofxOscSubscriberManager, class ofxOscSubscriber


  • void ofxPublishOsc(const string &ip, int port, const string &address, SupportedType &value, bool whenValueIsChanged = true);

publish value as an OSC message with an address pattern address to ip:port every time the value has changed. If whenValueIsChanged is set to false, then the binded value is sent every frame after App::update.

See more ofxPublishOsc, ofxPublishOscIf

  • void ofxUnpublishOsc(const string &ip, int port, const string &address);

unbind a publisher sending OSC message with an address pattern address to ip:port.

  • void ofxUnpublishOsc(const string &ip, int port);

unbind all the publishers sending to ip:port.

See class ofxOscPublisherManager, class ofxOscPublisher


  • void ofxRegisterPublishingOsc(const string &ip, int port, const string &address, SupportedType &value)
  • void ofxPublishRegisteredOsc(const string &ip, int port, const string &address)

register value as an OSC message with an address pattern address to ip:port. and publish when call ofxPublishRegisteredOsc(ip, port, address).

  • void ofxUnregisterPublishingOsc(const string &ip, int port, const string &address)

unregister OSC message with an address pattern address to ip:port.

  • void ofxUnregisterPublishingOsc(const string &ip, int port)

unregister all the messages sending to ip:port.

NOTE: registable type is same to ofxPublishOsc. see more ofxPublishOsc.


  • void ofxSendOsc(const string &ip, int port, const string &address, Arguments && ... arguments)

Supported types

  • Arithmetic is any type of Int32, Int64 or Float

Arithmetic (Int32, Int64, Float)

  • bool (published as Int32)
  • unsigned char, char (published as Int32)
  • unsigned short, short (published as Int32)
  • unsigned int, int (published as Int32 or Int64 (if sizeof(int) == 8 then Int64))
  • unsigned long, long (published as Int64 or Int64 (if sizeof(int) == 8 then Int64))
  • unsigned long long, long long (published as Int64)
  • float (published as Float)
  • double (published as Float)

NOTE: long double is not guaranteed

String (String)

  • string

openframeworks basic types


  • ofVec2f (published as Float * 2)


  • ofVec3f (= ofPoint) (published as Float * 3)


  • ofVec4f (published as Float * 4)
  • ofColor (published as Int32 * 4)
  • ofShortColor (published as Int32 * 4)
  • ofFloatColor (published as Float * 4)
  • ofQuaternion (published as Float * 4)
  • ofRectangle (published as Float * 4)


  • ofMatrix3x3 (published as Float * 9)


  • ofMatrix4x4 (publish as Float * 16)


  • ofBuffer

ofParameter with supported types

  • ofParameter<SupportedType>

NOTE: we only support subscribing ofParameterGroup. See How to subscribe ofParameterGroup

array/vector of supported types

  • SupportedType[size]
  • vector<SupportedType>

if you use vector<SomeType> vec;, when vec will be resized every receiving OSC messages.

NOTE: do NOT use vector<vector<SupportedType>>, vector<SupportedType>[size]



  • std::function<R(Arguments ...)>;
  • std::function<R(ofxOscMessage &)>
  • pair of U &that, T (U::\*callback)(Arguments ...);
  • pair of U \*that, T (U::\*callback)(Arguments ...);

Arguments ... are all of types we can use in


  • std::function<T()>;
  • pair of U &that, T (U::\*callback)();
  • pair of U \*that, T (U::\*callback)();

Update history

2021/09/30 ver 0.3.3

  • fixed bug on ver 0.3.2 (issued by hanasaan. thanks!!!)

2021/09/26 ver 0.3.2 [Deprecated!!]

  • fixed constructor of ofxOscMessageEx
  • fixed some constness about notify, read

2020/04/15 ver 0.3.1

  • added ofxSubscribeAllOsc, ofxSubscribeAllOscForPort

2018/05/08 ver 0.3.0

  • refactor all for C++11
  • add ofxSendOsc
  • ofxSubscribeOsc got more flexible.
    • multi arguments
    • multi arguments callback
  • add ofxOscMessageEx

Older update histories

about Versioning

ofxPubSubOsc uses Mood Versioning. maybe, 1.0.0. will not come.


MIT License.


  • ISHII 2bit [ISHII Tsuubito Program Office]
  • i[at]

Supporting Contributor

Special Thanks

At the last

Please create a new issue if there is a problem.

And please throw a pull request if you have a cool idea!!

If you get happy with using this addon, and you're rich, please donation for support continuous development.

Bitcoin: 17AbtW73aydfYH3epP8T3UDmmDCcXSGcaf