Example Rive animation display (source code): Renderer Youtube Video
YUP is an open-source library dedicated to empowering developers with advanced tools for cross-platform application and plugin development, featuring state-of-the-art rendering and audio processing. Originating from a fork of JUCE7's ISC-licensed modules, YUP builds on the robust, high-performance capabilities that made JUCE7 popular among audio and visual application developers. Unlike its successor JUCE8, which moved to a restrictive AGPL license and an even more costly commercial one, YUP maintains the more permissive ISC license and ensures that all of its dependencies are either liberally licensed or public domain, remaining a freely accessible and modifiable resource for developers worldwide.
Caution
The project is still in embryonic stage, use it at your own risk!
YUP brings a suite of powerful features, including:
- High-Performance Rendering: From intricate visualizations to high-speed gaming graphics, YUP handles it all with ease and efficiency, relying on the open source Rive Renderer, backed by Metal, Direct3D, OpenGL, Vulkan and WebGPU.
- Advanced Audio Processing: Tailored for professionals, our audio toolkit delivers pristine sound quality with minimal latency, suitable for music production, live performance tools, and more. Based on the JUCE7 module for audio/midi input and output.
- Open Source Audio Plugin Standards: Facilitates the development of CLAP plugin abstractions, providing a framework for creating versatile and compatible audio plugins.
- Cross-Platform Compatibility: Consistent and reliable on Windows, macOS, Linux, Wasm (iOS and Android are in the pipe).
- Extensive Testing Infrastructure: Massive set of unit and integration tests to validate functionality.
- Community-Driven Development: As an open-source project, YUP thrives on contributions from developers around the globe.
| Windows | macOS | Linux | WASM | Android | iOS |
|---|---|---|---|---|---|
| β | β | β | β | π§ | π§ |
| Windows | macOS | Linux | WASM | Android | iOS | |
|---|---|---|---|---|---|---|
| OpenGL 4.2 | β | β | ||||
| OpenGL ES3.0 | β | |||||
| WebGL2 (GLES3.0) | β | |||||
| Metal | β | β | ||||
| Direct3D 11 | β | |||||
| Vulkan | π§ | π§ | π§ | |||
| WebGPU | π§ | π§ | π§ | π§ | π§ | π§ |
| Windows | macOS | Linux | WASM | Android | iOS | |
|---|---|---|---|---|---|---|
| CoreAudio | β | β | ||||
| ASIO | β | |||||
| DirectSound | β | |||||
| WASAPI | β | |||||
| ALSA | β | |||||
| JACK | β | |||||
| Oboe | β | |||||
| OpenSL | β | |||||
| AudioWorklet | β |
Before building, ensure you have a:
- C++17-compliant compiler
- CMake 3.28 or later
Visual Studio 2022.
Xcode 15.2 (and command-line tools).
Required packages:
sudo apt-get update && sudo apt-get install -y \
libasound2-dev libjack-jackd2-dev ladspa-sdk libcurl4-openssl-dev libfreetype6-dev \
libx11-dev libxcomposite-dev libxcursor-dev libxcursor-dev libxext-dev libxi-dev libxinerama-dev \
libxrandr-dev libxrender-dev libglu1-mesa-dev mesa-common-devEmscripten SDK (at least version 3.1.45).
JDK 17, Android SDK, and NDK (at least r26d).
Clone the YUP repository:
git clone https://github.com/kunitoki/yup.git
cd yupCreate a Dedicated Build Directory:
mkdir -p buildGenerate the build system files with CMake.
For a standard desktop build with tests and examples enabled, run:
cmake . -B build -DYUP_ENABLE_TESTS=ON -DYUP_ENABLE_EXAMPLES=ON
cmake --build build --config Release --parallel 4Android will rely on cmake for configuration and gradlew will again call into cmake to build the native part of yup:
cmake -G "Ninja Multi-Config" . -B build -DYUP_TARGET_ANDROID=ON -DYUP_ENABLE_TESTS=ON -DYUP_ENABLE_EXAMPLES=ON
cd build/examples/render
./gradlew assembleRelease
# ./gradlew assembleDebugYou can either use Ninja or Xcode:
cmake -G "Ninja Multi-Config" . -B build -DCMAKE_TOOLCHAIN_FILE=cmake/toolchains/ios.cmake -DPLATFORM=OS64 -DYUP_ENABLE_TESTS=ON -DYUP_ENABLE_EXAMPLES=ON
cmake --build build --config Release --parallel 4Use Emscriptenβs helper command, after having activated the emsdk (refer to https://emscripten.org/docs/getting_started/downloads.html how to install and activate Emscripten):
emcmake cmake -G "Ninja Multi-Config" . -B build -DYUP_ENABLE_TESTS=ON -DYUP_ENABLE_EXAMPLES=ON
cmake --build build --config Release --parallel 4
python3 -m http.server -d buildThese command builds the project in Release mode. Replace Release with Debug if you need a debug build.
After compilation, you can validate the build and explore YUPβs features:
-
Run Tests: Build and execute the yup_tests target to run the automated test suite.
-
Build Examples: Compile example targets like example_app, example_console, or example_render to see practical implementations.
Here is a simple example of creating a basic window using YUP, save this as main.cpp:
#include <juce_core/juce_core.h>
#include <juce_events/juce_events.h>
#include <yup_graphics/yup_graphics.h>
#include <yup_gui/yup_gui.h>
class MyWindow : public yup::DocumentWindow
{
public:
MyWindow()
: yup::DocumentWindow (yup::ComponentNative::Options(), {})
{
setTitle ("MyWindow");
takeFocus();
}
void paint (yup::Graphics& g) override
{
g.fillAll (0xffffffff);
}
void userTriedToCloseWindow() override
{
yup::YUPApplication::getInstance()->systemRequestedQuit();
}
};
struct MyApplication : yup::YUPApplication
{
MyApplication() = default;
const yup::String getApplicationName() override
{
return "MyApplication";
}
const yup::String getApplicationVersion() override
{
return "1.0";
}
void initialise (const yup::String& commandLineParameters) override
{
window = std::make_unique<MyWindow>();
window->centreWithSize ({ 1080, 2400 });
window->setVisible (true);
window->toFront();
}
void shutdown() override
{
window.reset();
}
private:
std::unique_ptr<MyWindow> window;
};
START_JUCE_APPLICATION (MyApplication)And add this as CMakeLists.txt:
# TODOFor full documentation, including more detailed tutorials and comprehensive API references, please visit YUP Documentation.
Join our growing community and contribute to the YUP project. Connect with us and other YUP developers:
- GitHub: YUP Repository
Important
We are looking for collaborators to bring forward the framework!
YUP is distributed under the ISC License, supporting both personal and commercial use, modification, and distribution without restrictions.
YUP was born in response to JUCE8βs shift to a more restrictive licensing model. By forking JUCE7βs community-driven, ISC-licensed modules, we aim to preserve and continue a legacy of high-quality, freely accessible software development. We are grateful to the JUCE7 community for laying the groundwork for this initiative.




