Info: Early last year (February 2012) I decided to write/design an open source User Interface addon (ofxUI) for openframeworks. There were many driving factors behind why I decided to spend my free time during some nights and weekend designing and writing C++ code. My main reasons were to contribute back to openframeworks and to make something better designed and more powerful than what was available at the time, you can read more about why I made ofxUI:

I am proud to say, its now the third most starred (274 as of Sept 12, 2013) addon for OF, trailing ofxKinect by Theo Watson and ofxFaceTracker by Kyle McDonald. This addon’s success is also due to the feedback and contributions of others in the community and a couple major agencies and projects (Razorfish, Moving Brands, Nokia, CLOUDS, etc). This post will recap things I’ve learned about writing and maintaining an open source library, and what I’ve learned about designing a user interface library. I’ll talk about what the future of ofxUI holds and post projects that have used ofxUI and mention some places and people using ofxUI. Lastly, I mention the very kind people who have donated to keep the project alive and progressing forward, you guys rock! If you would like to donate to the project to keep it awesome and fresh:

To anyone who has:

  • sent me an with feedback email and waited patiently:
  • posted a github issue or sent me a pull request:
  • donated money to keep the project alive:
  • used ofxUI in a project:
  • given me props on twitter or retweeted me:

Thank You, You Rock, and Keep Me Motivated to Keep Pushing Forward!  

What I learned writing and maintaining an open source library:

  • It takes a lot of time and work to make something solid
  • Eat your own dog food, (after writing ofxUI I’ve used it in every since OF project I’ve worked on)
  • You should always write unit tests and test the library as often as possible
  • Always performance test your library against others (if possible)
  • Make sure all the examples compile out of the box
  • Try to get other contributors to the library as soon as possible
  • Get feedback often and make revisions to the library as needed
  • Make sure you properly abstract your library so further features and improvements are backwards compatible
  • Learn to take negative feedback as a positive thing
  • Your library is a reflection of you and your coding style, make sure its awesome!
  • You make a lot of friends and its a lot of fun

What I learned designing a user interface library:

  • New devices and modes of interactions are showing up everyday (touch, leap, myo, etc), so your library will frequently need to be updated and re-designed (be prepared for this)
  • You should always design for the future (because what ever you do design will be use by tons of people) and you want to make sure the future looks better and feels better than today
  • The concept of sliders and buttons are slowly disappearing, design appropriately (see Buttons are a Hack)
  • Make sure your default styling is kick ass, 99 percent of users won’t change the styling, so if the default aesthetic is ugly, you’ve just made the world uglier
  • Edge cases are a bitch, but you must account for them. Test out all types of interactions and make sure your widgets are rock solid
  • When you think of a feature that is super hard to implement, you know you haven’t abstracted your library enough, try again (happened to me with ofxUI, e.g. dynamic placement of the widgets once a widget is removed)
  • Consider moving the UI to another thread (so when your app comes to a crawling halt, the UI is still responsive)
  • Make the library very easy to use but keep it so that its still customizable (a wide range of people use OF, beginners to hardcore hackers, so design for everyone).
  • Have many examples bundled with the library. A lot of people learn by example, so this is important. In addition having more examples show what is possible with the library

What people are making with its help:

  • New Media
  • Creative Coding
  • Prototyping & Hacking
  • Architecture
  • Interactive Installations
  • Projection Mapping
  • Generative Design
  • Interactive Applications
  • Debug Panels
  • Visualization
  • Sonification
  • Live Performance
  • VJing

Other Addons Using ofxUI:


Projects / Places using ofxUI:

  • CLOUDS Interactive Documentary
  • CSAIL @ MIT: Artificial Intelligence Laboratory
  • MIT Media Lab: Lifelong Kindergarten Group

Designers & Developers: Various 
Output: Custom Software (C++, openFrameworks, ofxUI)
Year: 2011-2013