Create-juce-app - The fastest way to create production-ready JUCE projects

create-juce-app

create-juce-app Demo

This is a little project I’ve been working on recently to make starting new JUCE projects as simple as possible without compromising on the recommended tools and practices.

The script can be run using npm create juce-app, and the various prompts will let you customise almost every aspect of your new project, such as:

  • Project type (Plugin, Desktop app, or Console app)
  • Dependency manager (CPM, FetchContent, or submodules)
  • GUI API (JUCE components or web front-end)
  • Audio API (basic JUCE API or the juce_dsp module)
  • Unit-testing framework (Catch2, GoogleTest, doctest, Tiny-BDD, or JUCE’s built-in API)

The script will also add lots of “sensible defaults”, such as:

  • Code formatting and linting with clang-format, clang-tidy, and cppcheck
  • CTest and CPack integration
  • State saving/loading for all project types (including APVTS integration for plugins)
  • Placeholder assets for installers

This is still a work in progress so if you have any suggestions for additional config options, and/or would like to add integration for your own tools, please leave a comment on this thread or the Issues tab on GitHub, and/or open a PR!

4 Likes

I’ve made some improvements to the synth template, including adding Gamma and The STK as options for the DSP API.

Would love to add more options for other DSP APIs but haven’t found many others with permisive licenses, and I want to avoid anything using GPL or a commercial license.

Would love to add more options for other DSP APIs but haven’t found many others with permisive licenses, and I want to avoid anything using GPL or a commercial license.

  1. Maybe you should consider just as similar create-... tool, option to describe LICENSE type and maybe add default one (md).
  2. Add FFT engines - I’m not sure about DSP, but JUCE already allows multiple FFT backends. on macOS you’ll get decent performance. but on Windows/Linux you’re most likely to end with JUCE naive implementation which is slow. There are plenty of nice permissive FFTs (KissFFT, PFFFT) but I’d suggest also supporting also commercial ones and just highlight that.
  3. Platform and CMakePresets - maybe it’s out of scope of your project but I have a bunch of branching on CMakes for each platform. it gets even trickier when you also target mobile platforms in addition to desktop.
1 Like

Thanks, those are all great ideas!

Yes for now I’m only focusing on desktop projects, but I will consider expanding to mobile in the future too! Adding CMake presets is a good idea - I’ve also though about adding a justfile with some a list of useful commands

Interested to try this too much boiler plate in my current set up!