Open-source project
openframeworks/openFrameworks avatar
openframeworks/openFrameworks

openFrameworks: A C++ Toolkit for Creative Coding Across Platforms

openFrameworks is a community-developed cross platform toolkit for creative coding in C++.

10,432 stars2,569 forksC++NOASSERTION

At a glance

What is it?
openFrameworks is a community-developed C++ toolkit that provides a unified API for graphics, sound, video, networking, and computer vision, targeting artists, designers, and engineers who want to write creative software in C++. It ships as a self-contained package with extensive examples and a project generator tool.
Who is it for?
openFrameworks suits developers and artists who want to write creative interactive software in C++ and need a cross-platform library that abstracts the operating system, graphics, and audio layers. The self-contained release model means that different projects targeting different OF versions stay isolated without dependency conflicts, but it also means releases must not be mixed.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 8 days ago.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What openFrameworks Is and the Problem It Addresses

Building interactive graphics and sound applications in C++ from scratch requires assembling and integrating many separate libraries: an OpenGL context, a windowing system, an audio backend, video decoding, computer vision, networking, and more. These components use different APIs, different build systems, and different platform abstractions. openFrameworks provides a single unified C++ API that wraps all of them into a consistent interface.

The README describes it as a toolkit for creative coding, and the examples directory reflects this orientation: it organises sample programs by topic, including 3d, shader, computer_vision, sound, video, events, threads, math, graphics, and windowing. The community behind the project includes artists, designers, researchers, and engineers who use C++ for interactive installations, data visualisations, performances, and experimental software.

The key design premise is that openFrameworks should work the same way across operating systems. Windows (MSYS2 and Visual Studio builds), Linux (64-bit and ARM), Emscripten (web output), macOS, iOS, and tvOS are all in the CI build matrix. A sketch written for desktop can, in principle, target web via Emscripten with limited code changes.

The Self-Contained Release Structure and Folder Layout

Each openFrameworks release is designed to be entirely self-contained on disk. The README states explicitly that different releases must not be mixed: keep each release (0.8.0, 0.8.1) as separate directories. Projects developed against one release should not reference libs or headers from another.

The folder structure that every release ships with is consistent across versions:

- addons: additional functionality beyond the core - apps: where your own projects live - docs: per-platform notes and usage guidance (the README says to read the platform-specific file, such as osx.md on macOS) - examples: sample programs organised by feature area - libs: the openFrameworks core libraries and their dependencies - scripts: templates and automation scripts per platform - projectGenerator: the GUI tool for creating new project files

This self-contained layout produces extensive use of relative paths such as ../../../libs throughout OF projects. Moving a project to a different depth in the directory tree relative to the OF root breaks those paths. The README flags this as a common error that new users encounter.

The GitHub repository does not include project files for the examples. They are generated per release using the projectGenerator. Anyone working from the repository rather than a packaged release must generate project files manually after setup.

Getting the Release and Setting Up from GitHub

The README recommends downloading the nightly release from the GitHub releases page rather than cloning the repository directly, specifically to avoid submodule cloning. The stable branch corresponds to the last stable release. The nightly release at the time of writing is dated 2026-09-28.

For those working with the GitHub repository, external dependencies are not included and must be downloaded using the platform-specific download_libs.sh script in the scripts directory. After that, the projectGenerator submodule must be initialised:

code
git submodule init
git submodule update

The project generator is then used to create project files for the examples directory. The README instructs developers to enable Advanced Options in the generator's settings tab, then use Update Multiple to regenerate projects for the entire examples directory.

Setup guides for each platform are linked from openframeworks.cc/download. The docs directory in the repository provides platform-specific instructions: the README mentions reading the platform markdown file (such as osx.md) for macOS-specific considerations. Platform notes cover build tool requirements, library paths, and any system-level dependencies that OF expects to find on the host.

Platform Coverage: Desktop, Web, and Mobile

The CI build matrix in the README covers six platform configurations. Windows builds in both MSYS2 (GCC-based) and Visual Studio toolchains, ensuring compatibility with both. Linux builds cover 64-bit and ARM targets, which allows deployment on single-board computers and embedded Linux systems. Emscripten output enables running OF applications in a browser via WebAssembly. macOS, iOS, and tvOS builds are all in the matrix, with separate configurations for device and simulator targets.

The addons directory is how optional capabilities are delivered. Addons that do not belong in the core because of platform coverage limitations, additional dependencies, or specialised use cases live here. The project generator includes addons when it creates a new project. Community-developed addons from sources outside the main repository can be placed in the addons directory and included in projects the same way.

The export directory, present on some systems according to the README, holds DLLs and dylibs that need to be distributed with compiled projects on Windows and macOS. This is necessary because shared libraries used by OF are not system-installed and must accompany the application binary.

openFrameworks vs Processing: Different Assumptions About the Developer

Processing is the most common comparison for openFrameworks in search data. Processing is a Java-based creative coding environment that simplifies the development model: programs are called sketches, the setup() and draw() loop is predefined, and the standard library handles most tasks with minimal configuration. Processing targets developers who want to focus on ideas rather than build systems and language details.

openFrameworks takes a different approach. It is standard C++, with a setup/update/draw pattern that parallels Processing's structure but sits on top of the full C++ language and standard library. An openFrameworks project is a CMake or IDE project that compiles to a native binary. The developer is responsible for the build system, linker settings, and IDE configuration.

The practical difference is ceiling and floor. Processing's ceiling is lower: performance-intensive workloads and low-level GPU programming are harder to reach. openFrameworks' floor is higher: setting up a first project requires more steps than writing a Processing sketch. Teams who need high-performance native output, direct OpenGL access, or integration with C and C++ libraries will find openFrameworks the better fit. Teams who want quick iteration and a shorter path from idea to running sketch will find Processing or p5.js more accessible.

Release Cadence, Version History, and Licence

The most recent stable release is 0.12.1, published on 2026-05-03. Nightly builds are available as a continuous release that tracks the master branch; a nightly was published on 2026-09-28. The last push to the master branch was on 2026-09-22, six days before the time of writing.

The project uses Semantic Versioning, but the README notes that strict adherence will only come into effect at version 1.0.0. At the current 0.12.x version, this means API breaks between minor versions are possible without violating the stated versioning policy. Projects that need a stable API should pin to a specific release and not upgrade without reviewing the CHANGELOG.md.

The CHANGELOG.md is in the repository root. A SECURITY.md file is also present, which describes the project's security policy. The licence is in LICENSE.md in the repository root, and THIRDPARTYLICENSES information is referenced through the Contributing and Security documentation. The project community uses a forum at forum.openframeworks.cc and has a Slack workspace for discussion.

Editorial conclusion

openFrameworks suits developers and artists who want to write creative interactive software in C++ and need a cross-platform library that abstracts the operating system, graphics, and audio layers. The self-contained release model means that different projects targeting different OF versions stay isolated without dependency conflicts, but it also means releases must not be mixed. The README is explicit that strict Semantic Versioning will apply only from version 1.0.0; at the current 0.12.x version, API breaks between minor versions are possible. ARM-based macOS deployments and mobile iOS projects are covered in CI, but anyone working from the GitHub repository rather than a packaged release must run the git submodule commands and download_libs.sh before building.

Frequently asked questions

What is openFrameworks?

openFrameworks is a community-developed C++ toolkit for creative coding that provides a unified API for graphics, sound, video, computer vision, and networking across Windows, Linux, macOS, iOS, and the web via Emscripten. It ships as a self-contained package with examples and a GUI project generator.

How do I install openFrameworks?

The recommended approach is to download the packaged release from the openframeworks.cc downloads page or the GitHub releases page. The README advises downloading the nightly or stable release rather than cloning the repository, to avoid needing to run git submodule init and download_libs.sh manually. Platform setup guides are at openframeworks.cc/download.

What is the difference between openFrameworks and Processing?

Processing is a Java-based creative coding environment that abstracts the project setup and build system behind a simple sketch model. openFrameworks is a C++ library that uses a similar setup/update/draw structure but compiles to a native binary using a standard IDE or CMake build. openFrameworks gives direct access to the C++ language and OpenGL, while Processing prioritises simplicity over performance ceiling.

Official sources

  1. Issues
  2. openframeworks/openFrameworks on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/openframeworks-openframeworks.svg)](https://hysenlabs.com/projects/openframeworks-openframeworks)