{"id":25738353,"url":"https://github.com/kunitoki/yup","last_synced_at":"2025-05-08T03:57:51.465Z","repository":{"id":246219860,"uuid":"790711037","full_name":"kunitoki/yup","owner":"kunitoki","description":"YUP is an open-source library dedicated to empowering developers with advanced tools for cross-platform application development.","archived":false,"fork":false,"pushed_at":"2025-04-20T14:23:50.000Z","size":22764,"stargazers_count":68,"open_issues_count":2,"forks_count":9,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-08T03:57:42.566Z","etag":null,"topics":["application-framework","audio","gpu-acceleration","graphics","gui","juce","rive"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kunitoki.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-04-23T11:43:54.000Z","updated_at":"2025-05-06T20:38:54.000Z","dependencies_parsed_at":"2024-06-26T16:59:10.511Z","dependency_job_id":"e3100e2a-701b-4da8-a095-24e712379efb","html_url":"https://github.com/kunitoki/yup","commit_stats":null,"previous_names":["kunitoki/yup"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kunitoki%2Fyup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kunitoki%2Fyup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kunitoki%2Fyup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kunitoki%2Fyup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kunitoki","download_url":"https://codeload.github.com/kunitoki/yup/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252996333,"owners_count":21837621,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["application-framework","audio","gpu-acceleration","graphics","gui","juce","rive"],"created_at":"2025-02-26T07:30:05.144Z","updated_at":"2025-05-08T03:57:51.456Z","avatar_url":"https://github.com/kunitoki.png","language":"C++","funding_links":[],"categories":["Forks"],"sub_categories":[],"readme":"# YUP: Cross-Platform Application And Plugin Development Library\n\n\u003cp float=\"left\"\u003e\n  \u003ca href=\"https://kunitoki.github.io/yup/demos/web_render_0/\" title=\"UI courtesy from https://www.drywestdesign.com/\"\u003e\n    \u003cimg src=\"./docs/demos/web_render_0.png\" width=\"99%\" /\u003e\u003c/a\u003e\n\u003cp\u003e\n\n\u003cp float=\"left\"\u003e\n  \u003ca href=\"https://kunitoki.github.io/yup/demos/web_render_1/\"\u003e\u003cimg src=\"./docs/demos/web_render_1.png\" width=\"24%\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://kunitoki.github.io/yup/demos/web_render_2/\"\u003e\u003cimg src=\"./docs/demos/web_render_2.png\" width=\"24%\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://kunitoki.github.io/yup/demos/web_render_3/\"\u003e\u003cimg src=\"./docs/demos/web_render_3.png\" width=\"24%\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://kunitoki.github.io/yup/demos/web_render_4/\"\u003e\u003cimg src=\"./docs/demos/web_render_4.png\" width=\"23%\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nExample Rive animation display ([source code](./examples/render/source/main.cpp)):\n[Renderer Youtube Video](https://youtube.com/shorts/3XC4hyDlrVs)\n\n[![Build And Test MacOS](https://github.com/kunitoki/yup/actions/workflows/build_macos.yml/badge.svg)](https://github.com/kunitoki/yup/actions/workflows/build_macos.yml)\n[![Build And Test Windows](https://github.com/kunitoki/yup/actions/workflows/build_windows.yml/badge.svg)](https://github.com/kunitoki/yup/actions/workflows/build_windows.yml)\n[![Build And Test Linux](https://github.com/kunitoki/yup/actions/workflows/build_linux.yml/badge.svg)](https://github.com/kunitoki/yup/actions/workflows/build_linux.yml)\n[![Build And Test Wasm](https://github.com/kunitoki/yup/actions/workflows/build_wasm.yml/badge.svg)](https://github.com/kunitoki/yup/actions/workflows/build_wasm.yml)\n[![Build And Test iOS](https://github.com/kunitoki/yup/actions/workflows/build_ios.yml/badge.svg)](https://github.com/kunitoki/yup/actions/workflows/build_ios.yml)\n[![Build And Test Android](https://github.com/kunitoki/yup/actions/workflows/build_android.yml/badge.svg)](https://github.com/kunitoki/yup/actions/workflows/build_android.yml)\n\n\n## Introduction\nYUP 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](https://juce.com/)'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.\n\n\n\u003e [!CAUTION]\n\u003e The project is still in embryonic stage, use it at your own risk!\n\n\n## Features\nYUP brings a suite of powerful features, including:\n- **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](https://rive.app/) Renderer, backed by Metal, Direct3D, OpenGL, Vulkan and WebGPU.\n- **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.\n- **Open Source Audio Plugin Standards:** Facilitates the development of [CLAP](https://cleveraudio.org/) and [VST3](https://github.com/steinbergmedia/vst3sdk) plugin abstractions, providing a framework for creating versatile and compatible audio plugins.\n- **Cross-Platform Compatibility:** Consistent and reliable on Windows, macOS, Linux, Wasm, iOS and Android.\n- **Extensive Testing Infrastructure:** Massive set of unit and integration tests to validate functionality.\n- **Community-Driven Development:** As an open-source project, YUP thrives on contributions from developers around the globe.\n\n\n## Supported Platforms\n| **Windows**        | **macOS**          | **Linux**          | **WASM**           | **Android**        | **iOS**            |\n|--------------------|:------------------:|:------------------:|:------------------:|:------------------:|:------------------:|\n| :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |\n\n\n## Supported Rendering Backends\n|                          | **Windows**        | **macOS**          | **Linux**          | **WASM**           | **Android**               | **iOS**               |\n|--------------------------|:------------------:|:------------------:|:------------------:|:------------------:|:-------------------------:|:---------------------:|\n| **OpenGL 4.2**           | :white_check_mark: |                    | :white_check_mark: |                    |                           |                       |\n| **OpenGL ES3.0**         |                    |                    |                    |                    | :white_check_mark:        |                       |\n| **WebGL2 (GLES3.0)**     |                    |                    |                    | :white_check_mark: |                           |                       |\n| **Metal**                |                    | :white_check_mark: |                    |                    |                           | :white_check_mark:    |\n| **Direct3D 11**          | :white_check_mark: |                    |                    |                    |                           |                       |\n| **Vulkan**               | :construction:     |                    | :construction:     |                    | :construction:            |                       |\n| **WebGPU**               | :construction:     | :construction:     | :construction:     | :construction:     | :construction:            | :construction:        |\n\n\n## Supported Audio Backends\n|                          | **Windows**        | **macOS**          | **Linux**          | **WASM**           | **Android**               | **iOS**               |\n|--------------------------|:------------------:|:------------------:|:------------------:|:------------------:|:-------------------------:|:---------------------:|\n| **CoreAudio**            |                    | :white_check_mark: |                    |                    |                           | :white_check_mark:    |\n| **ASIO**                 | :white_check_mark: |                    |                    |                    |                           |                       |\n| **DirectSound**          | :white_check_mark: |                    |                    |                    |                           |                       |\n| **WASAPI**               | :white_check_mark: |                    |                    |                    |                           |                       |\n| **ALSA**                 |                    |                    | :white_check_mark: |                    |                           |                       |\n| **JACK**                 | :white_check_mark: | :white_check_mark: | :white_check_mark: |                    |                           |                       |\n| **Oboe**                 |                    |                    |                    |                    | :white_check_mark:        |                       |\n| **OpenSL**               |                    |                    |                    |                    | :white_check_mark:        |                       |\n| **AudioWorklet**         |                    |                    |                    | :white_check_mark: |                           |                       |\n\n\n## Supported Plugin Formats\n|                          | **CLAP**           | **VST3**           | **VST2**           | **AUv3**           | **AUv2**                  | **AAX**               | **LV2**               |\n|--------------------------|:------------------:|:------------------:|:------------------:|:------------------:|:-------------------------:|:---------------------:|:---------------------:|\n| **Windows**              | :construction:     | :construction:     |                    |                    |                           |                       |                       |\n| **macOS**                | :white_check_mark: | :construction:     |                    |                    | :construction:            |                       |                       |\n| **Linux**                | :construction:     | :construction:     |                    |                    |                           |                       |                       |\n\n\n## Prerequisites\nBefore building, ensure you have a:\n- C++17-compliant compiler\n- CMake 3.28 or later\n\n\n### Windows\nVisual Studio 2022.\n\n\n### macOS and iOS\nXcode 15.2 (and command-line tools).\n\n\n### Linux\nRequired packages:\n\n```bash\nsudo apt-get update \u0026\u0026 sudo apt-get install -y \\\n    libasound2-dev libjack-jackd2-dev ladspa-sdk libcurl4-openssl-dev libfreetype6-dev \\\n    libx11-dev libxcomposite-dev libxcursor-dev libxcursor-dev libxext-dev libxi-dev libxinerama-dev \\\n    libxrandr-dev libxrender-dev libglu1-mesa-dev mesa-common-dev\n```\n\n\n### Wasm\nEmscripten SDK (at least version 3.1.45).\n\n\n### Android\nJDK 17, Android SDK, and NDK (at least r26d).\n\n\n## Installation\nClone the YUP repository:\n\n```bash\ngit clone https://github.com/kunitoki/yup.git\ncd yup\n```\n\n## Using just\nTo ease bootstrapping, a provided `justfile` allows to quickly launch default configurations (see https://github.com/casey/just for more information):\n\n```bash\n$ just\nAvailable recipes:\n    android                                 # generate and open project for Android using Android Studio\n    build CONFIG=\"Debug\"                    # build project using cmake\n    clean                                   # clean project build artifacts\n    c                                       # alias for `clean`\n    default                                 # list available recipes\n    emscripten CONFIG=\"Debug\"               # generate build and serve project for WASM\n    emscripten_serve CONFIG=\"Debug\"         # serve project for WASM\n    ios PLATFORM=\"OS64\"                     # generate and open project for iOS using Xcode\n    ios_simulator PLATFORM=\"SIMULATORARM64\" # generate and open project for iOS Simulator macOS using Xcode\n    linux PROFILING=\"OFF\"                   # generate project in Linux using Ninja\n    osx PROFILING=\"OFF\"                     # generate and open project in macOS using Xcode\n    win PROFILING=\"OFF\"                     # generate and open project in Windows using Visual Studio\n```\n\n## Preparing the build directory\nCreate a Dedicated Build Directory:\n\n```bash\nmkdir -p build\n```\n\n\n## Configure and Build\nGenerate the build system files with CMake.\n\n\n### Windows / Linux / macOS\nFor a standard desktop build with tests and examples enabled, run:\n\n```bash\ncmake . -B build -DYUP_ENABLE_TESTS=ON -DYUP_ENABLE_EXAMPLES=ON\ncmake --build build --config Release --parallel 4\n```\n\n\n### Android\nAndroid will rely on cmake for configuration and gradlew will again call into cmake to build the native part of yup:\n\n```bash\ncmake -G \"Ninja Multi-Config\" . -B build -DYUP_TARGET_ANDROID=ON -DYUP_ENABLE_TESTS=ON -DYUP_ENABLE_EXAMPLES=ON\ncd build/examples/render\n./gradlew assembleRelease\n# ./gradlew assembleDebug\n```\n\n\n### iOS\nYou can either use Ninja or Xcode:\n\n```bash\ncmake -G \"Ninja Multi-Config\" . -B build -DCMAKE_TOOLCHAIN_FILE=cmake/toolchains/ios.cmake -DPLATFORM=OS64 -DYUP_ENABLE_TESTS=ON -DYUP_ENABLE_EXAMPLES=ON\ncmake --build build --config Release --parallel 4\n```\n\n\n### Wasm\nUse 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):\n\n```bash\nemcmake cmake -G \"Ninja Multi-Config\" . -B build -DYUP_ENABLE_TESTS=ON -DYUP_ENABLE_EXAMPLES=ON\ncmake --build build --config Release --parallel 4\npython3 -m http.server -d build\n```\n\nThese command builds the project in Release mode. Replace `Release` with `Debug` if you need a debug build.\n\n\n## Running Tests and Examples\nAfter compilation, you can validate the build and explore YUP’s features:\n\n- Run Tests:\nBuild and execute the yup_tests target to run the automated test suite.\n\n- Build Examples:\nCompile example targets like example_app, example_console, or example_render to see practical implementations.\n\n\n## Running Your First Application\nHere is a simple example of creating a basic window using YUP, save this as `main.cpp`:\n\n```cpp\n#include \u003cjuce_core/juce_core.h\u003e\n#include \u003cjuce_events/juce_events.h\u003e\n#include \u003cyup_graphics/yup_graphics.h\u003e\n#include \u003cyup_gui/yup_gui.h\u003e\n\nclass MyWindow : public yup::DocumentWindow\n{\npublic:\n    MyWindow()\n        : yup::DocumentWindow (yup::ComponentNative::Options(), {})\n    {\n        setTitle (\"MyWindow\");\n\n        takeFocus();\n    }\n\n    void paint (yup::Graphics\u0026 g) override\n    {\n        g.setFillColor (0xffffffff);\n        g.fillAll();\n    }\n\n    void userTriedToCloseWindow() override\n    {\n        yup::YUPApplication::getInstance()-\u003esystemRequestedQuit();\n    }\n};\n\nstruct MyApplication : yup::YUPApplication\n{\n    MyApplication() = default;\n\n    const yup::String getApplicationName() override\n    {\n        return \"MyApplication\";\n    }\n\n    const yup::String getApplicationVersion() override\n    {\n        return \"1.0\";\n    }\n\n    void initialise (const yup::String\u0026 commandLineParameters) override\n    {\n        window = std::make_unique\u003cMyWindow\u003e();\n        window-\u003ecentreWithSize ({ 1080, 2400 });\n        window-\u003esetVisible (true);\n        window-\u003etoFront(true);\n    }\n\n    void shutdown() override\n    {\n        window.reset();\n    }\n\nprivate:\n    std::unique_ptr\u003cMyWindow\u003e window;\n};\n\nSTART_JUCE_APPLICATION (MyApplication)\n```\n\nAnd add this as `CMakeLists.txt`:\n\n```cmake\ncmake_minimum_required (VERSION 3.28)\n\nset (target_name my_app)\nset (target_version \"0.0.1\")\nproject (${target_name} VERSION ${target_version})\n\ninclude (FetchContent)\n\nFetchContent_Declare(\n  yup\n  GIT_REPOSITORY https://github.com/kunitoki/yup.git\n  GIT_TAG        main)\n\nset (YUP_BUILD_EXAMPLES OFF)\nset (YUP_BUILD_TESTS OFF)\nFetchContent_MakeAvailable(yup)\n\nyup_standalone_app (\n    TARGET_NAME ${target_name}\n    TARGET_VERSION ${target_version}\n    TARGET_IDE_GROUP \"MyApp\"\n    TARGET_APP_ID \"my.company.${target_name}\"\n    TARGET_APP_NAMESPACE \"my.company\"\n    INITIAL_MEMORY 268435456\n    MODULES yup_gui)\n\nif (NOT YUP_TARGET_ANDROID)\n    file (GLOB sources \"${CMAKE_CURRENT_LIST_DIR}/*.cpp\")\n    source_group (TREE ${CMAKE_CURRENT_LIST_DIR}/ FILES ${sources})\n    target_sources (${target_name} PRIVATE ${sources})\nendif()\n```\n\n\n## Documentation\nFor full documentation, including more detailed tutorials and comprehensive API references, please visit [YUP Documentation](https://yup.github.io/docs).\n\n\n## Community Engagement\nJoin our growing community and contribute to the YUP project. Connect with us and other YUP developers:\n- **GitHub:** [YUP Repository](https://github.com/kunitoki/yup)\n\n\u003e [!IMPORTANT]\n\u003e We are looking for collaborators to bring forward the framework!\n\n\n## License\nYUP is distributed under the ISC License, supporting both personal and commercial use, modification, and distribution without restrictions.\n\n\n## Acknowledgments\nYUP 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.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkunitoki%2Fyup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkunitoki%2Fyup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkunitoki%2Fyup/lists"}