openFrameworks is an open-source C++ toolkit for creative coding — the framework a lot of serious interactive-installation, generative-art, and real-time-graphics work graduates to once a project’s performance demands outgrow what a browser-based tool like p5.js can comfortably handle. The tradeoff for that performance is a steeper initial setup than JavaScript-based tools; here’s the fastest path through it.
Watch: Getting started with openFrameworks C++ creative coding — superBasics e01 (dan buzzo, YouTube)
Step 1: Use the Project Generator, don’t hand-roll a project
openFrameworks ships with a Project Generator tool specifically to avoid the traditional C++ pain point of manually configuring build systems and linking libraries. Point it at where you want a new project, select which addons (openFrameworks’ term for optional library modules — computer vision, sound analysis, networking, and dozens more) you want included, and it generates a working, buildable project scaffold for your platform and IDE. Skipping this and trying to configure a C++ project by hand is a real and unnecessary way to lose a first afternoon to build-system frustration rather than actual creative coding.
Step 2: Learn the three functions everything hangs off of
Nearly every openFrameworks sketch is structured around three core functions: setup() (runs once, for initialization), update() (runs every frame, for logic and state changes), and draw() (runs every frame, for rendering). This is conceptually the same setup/draw pattern p5.js borrowed its own structure from — if you’ve used p5.js, the mental model transfers directly, even though the syntax is now C++ rather than JavaScript.
Step 3: Addons are where openFrameworks’ real power shows up
The base framework handles graphics, basic I/O, and windowing — the addon ecosystem is where domain-specific capability lives: ofxOpenCv for computer vision, ofxKinect for depth-camera input, ofxOsc for OSC networking (talking to TouchDesigner, Max/MSP, or other tools), and many more community-maintained addons for everything from sound analysis to serial communication with Arduino. Adding an addon after initial project setup means re-running the Project Generator on the existing project folder rather than editing build files by hand — a detail that trips up people trying to configure things manually instead.
Step 4: Expect a real compile step, and budget for it
Unlike p5.js’s instant browser refresh, openFrameworks requires an actual compile step before you see a change — slower than a script-language iteration loop, but the tradeoff for compiled-language performance headroom. For camera-driven, sensor-driven, or dense-particle-system work specifically — the kind of project that tends to be the actual reason someone reaches for openFrameworks over a browser tool — that performance ceiling is usually the entire point, worth the slower edit-compile-run cycle it costs to get there.