create-juce-app
v0.4.3
Published
<p align="center"><img src="templates/Icon-512x.png" width="150"/></p> <h1 align="center">create-juce-app</h1> <p align="center">The fastest way to create production-ready JUCE projects with all the trimmings</h1>
Readme
Usage
Install Node, and run
npx create-juce-appOptions
--dump=<file>- writes the config to the given JSON file.--config=<file>- uses the provided config JSON to pre-select options. This can be a partial config, allowing you to save preferences across projects.
Customisation
The various prompts will allow you customise almost every aspect of your JUCE project, including:
- JUCE version, including the
masteranddevelopbranches - Dependency management (CPM, FetchContent, or submodules)
- Project type (Plugin, Desktop App, or Console App)
- Audio API (basic JUCE API, or the
juce_dspmodule) - Plugin type (Effect, Synth, or MIDI Effect), MIDI input/output, and (for effects) a specific category such as Dynamics, EQ, Filter, Reverb, etc. - categorising the plugin across all supported formats (VST3, AU, AAX, VST)
- GUI API (JUCE components or a web front-end)
- Testing framework (Catch2, GoogleTest, doctest, Tiny-BDD, or
juce::UnitTest) - Various additional extensions from the open-source community
The generator also adds various defaults to get you started, such as:
- Code formatting with
clang-format - Code linting with
clang-tidy, andcppcheck - CTest integration for all tests
- CPack integration for building installers
- APVTS integration for plugins
- ValueTree state management for Desktop apps
- State saving/loading for Desktop apps and Plugins
- CMake options to enable code sanitizers
- Recommended compiler and linker options
- Placeholder assets for installers' copy and icons, including an Icon Composer bundle for macOS
Contributing
All contributions are welcome - especially if you'd like to add integration for your own open-source extension.
Start in index.js and add any extra prompts needed to main(), then look in the various source files in source/ to implement the choices the user makes. Follow the patterns established by existing code, and try to keep it nice and simple!
