Skip to content

Module map ​

Every JUCE module and every dependency between them, generated at build time from the BEGIN_JUCE_MODULE_DECLARATION blocks in modules/*/juce_*.h.[1] Columns are layers: a module's layer is the length of its longest dependency chain down to juce_core.

Click (or tab to and press Enter on) a module to highlight what it depends on (blue) and what is built on it (orange). Use the chips to hide groups.

depends on used by
layer 0 layer 1 layer 2 layer 3 layer 4 layer 5 layer 6juce_analytics: Classes to collect analytics and send to destinationsanalyticsjuce_animation: Classes for defining and handling animations.animationjuce_audio_basics: Classes for audio buffer manipulation, midi message handling, synthesis, etc.audio_basicsjuce_audio_devices: Classes to play and record from audio and MIDI I/O devicesaudio_devicesjuce_audio_formats: Classes for reading and writing various audio file formats.audio_formatsjuce_audio_plugin_client: Classes for building VST, VST3, AU, AUv3, LV2 and AAX plugins.audio_plugin_clientjuce_audio_processors: Classes for loading and playing VST, AU, LADSPA, or internally-generated audio processors.audio_processorsjuce_audio_processors_headless: Classes for loading and playing VST, AU, LADSPA, or internally-generated audio processors without UI.audio_processors_headlessjuce_audio_utils: Classes for audio-related GUI and miscellaneous tasks.audio_utilsjuce_box2d: The Box2D physics engine and some utility classes.box2djuce_core: The essential set of basic JUCE classes, as required by all the other JUCE modules. Includes text, container, memory, threading and i/o functionality.corejuce_cryptography: Classes for various basic cryptography functions, including RSA, Blowfish, MD5, SHA, etc.cryptographyjuce_data_structures: Classes for undo/redo management, and smart data structures.data_structuresjuce_dsp: Classes for audio buffer manipulation, digital audio processing, filtering, oversampling, fast math functions etc.dspjuce_events: Classes for running an application's main event loop and sending/receiving messages, timers, etc.eventsjuce_graphics: Classes for 2D vector graphics, image loading/saving, font handling, etc.graphicsjuce_gui_basics: Basic user-interface components and related classes.gui_basicsjuce_gui_extra: Miscellaneous GUI classes for specialised tasks.gui_extrajuce_javascript: Javascript interpreter.javascriptjuce_midi_ci: Classes facilitating communication via MIDI Capability Inquirymidi_cijuce_opengl: Classes for rendering OpenGL in a JUCE window.opengljuce_osc: Open Sound Control implementation.oscjuce_product_unlocking: Classes for online product authenticationproduct_unlockingjuce_video: Classes for playing video and capturing camera input.video
juce_audio_processorsPlug-ins & hosting · layer 5

JUCE audio processor classes

Classes for loading and playing VST, AU, LADSPA, or internally-generated audio processors.

Depends on (direct)
Used by (direct)
Pulls in
8 modules in total (transitively)
Public headers
15

Reading the graph ​

  • Left means fundamental. juce_core (layer 0) is needed by everything; nothing depends on the rightmost modules.
  • Linking pulls in the whole upstream chain. Add juce::juce_audio_utils to a CMake target and you get it plus the modules beneath it (the graph shows the count).[2] Selecting a module shows this "pulls in" count.
  • Two independent trunks. The audio chain (audio_basics → audio_devices / audio_formats → dsp) never touches the GUI chain (graphics → gui_basics → gui_extra). They only meet in juce_audio_processors and juce_audio_utils.
  • juce_events is the junction. Almost every branch passes through it, because almost everything needs the message loop.
  • Some modules are leaves (juce_dsp, juce_osc, juce_midi_ci, juce_javascript, juce_video, juce_opengl…). You can add or skip them freely.

How big is each module? ​

Number of headers each module's own header lists, from the same parse that builds the module map. It counts files, not lines, so it is a rough guide to surface area only.

Questions to explore ​

  1. Which module would you need for a command-line tool that converts WAV files to FLAC? What does it pull in?
  2. Why does juce_dsp depend on juce_audio_formats? (Hint: look at dsp::Convolution::loadImpulseResponse.)
  3. juce_audio_processors_headless pulls in only three modules. What kinds of program does that make possible that juce_audio_processors (which pulls in the whole GUI stack) did not?

Sources ​


  1. site/scripts/gen-modules.mjs parses the declaration blocks into site/data/modules.json. The block format is in docs/JUCE Module Format.md. The observations under "Reading the graph" are read off that generated graph for the checked-out version and may change as JUCE does. ↩︎

  2. docs/CMake API.md: linking a module target brings in its dependencies. ↩︎

Personal study notes on JUCE. Not affiliated with or endorsed by the JUCE team.