OverviewFeaturesLicensingDocumentationUsers

The Juce Library

JUCE (Jules' Utility Class Extensions) is an all-encompassing C++ class library for developing cross-platform applications.

It contains pretty much everything you're likely to need to create most applications, and is particularly good for creating highly-specialised UIs and for handling graphics and sound.

Supported Platforms

Supported development environments are XCode, Visual Studio, GCC (and probably any other modern C++ compiler).

  • Applications can be compiled to run on Windows, Mac, Linux, and (just recently!) iPhone.
  • Audio plugins can be built as VST (Mac/Windows), AudioUnit (Mac) and RTAS (Mac/Windows). Using cunning tricks, a single binary image can be created that functions as multiple plugin formats.
  • Browser plugins can be built as NPAPI (Mac/Windows), or ActiveX (Windows).

JUCE can be built as a static library and linked into your application, or can be used in its 'amalgamted' form, where the entire library is simply added to your target project in the form of a single .cpp file (containing over 250,000 lines of code!).

Licence and Purchasing

JUCE is released under the GNU Public Licence, which means it can be freely copied and distributed, and costs nothing to use in open-source applications.

If you'd like to release a closed-source application that uses JUCE, commercial licences are available for a fee - click here for more information on pricing and terms.

Design and coding style

In designing JUCE, I've tried to make it:

  • Literate - class, method and variable names are clear, self-explanatory and written in full English rather than abbreviated programmerspeak. In choosing method and class names, the readability of code that uses them is absolutely the top consideration - the more your code resembles natural English, the easier it is to work with.
  • Coherent - a library needs to be predictable enough that once you've got a feel for the way things are arranged, you can navigate around it without any surprises. If you need to do a particular task, you should be able to guess what the classes to do it might be called and find them quickly. All parts of the codebase are written in exactly the same strict coding style.
  • Cross-platform - platform-dependent code is all confined to a single area and kept to an absolute minimum. Wherever it's possible to use a pure C++ technique as effectively as native function calls, I've done so.
  • Modern C++ - very object-oriented, avoiding older C-style coding techniques wherever possible. But pushing the limits of the language is not what this library is about - you won't find any elaborate intertwined templates that require genius-level code-breaking skills to understand.