Skip to main content
Popsicle: Python integration for JUCE with pybind11.

Popsicle: Python integration for JUCE with pybind11

Linux Builds Status macOS Builds Status Windows Builds Status PyPI - Python Version PyPI - Downloads

Coveralls - Code Coverage PyPI - Status Open Source License Commercial License

Overview

Popsicle is a groundbreaking project designed to extend the accessibility of JUCE by seamlessly integrating it with Python. Leveraging the power of pybind11, Popsicle offers a Pythonic interface to the JUCE framework. This integration allows developers to utilize JUCE in a manner similar to using Qt with PySide, offering a simplified yet robust approach.

Popsicle serves multiple purposes, each contributing to its significance in the development landscape.

Features

  • Effortless JUCE App Prototyping: Effortlessly prototype JUCE apps. Popsicle streamlines the development process, allowing developers to focus on creativity by eliminating the need for intricate build configurations and setups.

  • Python Scripting Integration: Seamlessly integrate Python scripting by embedding Popsicle into existing JUCE applications as a dedicated module. Extend and enhance your JUCE projects with the flexibility and ease of Python within the familiar JUCE framework.

  • Unit Testing Made Easy: Ensure the robustness and reliability of JUCE classes with Popsicle’s built-in unit testing support. Leverage Python’s testing infrastructure for a seamless testing process.

  • Cross-Platform Compatibility: Enjoy cross-platform compatibility with Popsicle. Work consistently across Windows, macOS, and Linux environments for a unified development experience.

Popsicle stands as a humble yet powerful solution, aimed at enriching the development experience with JUCE by simplifying, extending, and enhancing its integration with Python.

Example Usage

A single 80 lines script is better than thousand of words:

import popsicle as juce


class MainContentComponent(juce.Component, juce.Timer):
    def __init__(self):
        juce.Component.__init__(self)
        juce.Timer.__init__(self)

        self.setSize(600, 400)
        self.startTimerHz(60)

    def __del__(self):
        self.stopTimer()

    def paint(self, g):
        g.fillAll(juce.Colours.black)

        random = juce.Random.getSystemRandom()
        rect = juce.Rectangle[int](0, 0, 20, 20)

        for _ in range(100):
            g.setColour(juce.Colour.fromRGBA(
                random.nextInt(256),
                random.nextInt(256),
                random.nextInt(256),
                255))

            rect.setCentre(random.nextInt(self.getWidth()), random.nextInt(self.getHeight()))
            g.drawRect(rect, 1)

    def timerCallback(self):
        if self.isVisible():
            self.repaint()


class MainWindow(juce.DocumentWindow):
    component = None

    def __init__(self):
        super().__init__(
            juce.JUCEApplication.getInstance().getApplicationName(),
            juce.Desktop.getInstance().getDefaultLookAndFeel()
                .findColour(juce.ResizableWindow.backgroundColourId),
            juce.DocumentWindow.allButtons,
            True)

        self.component = MainContentComponent()

        self.setResizable(True, True)
        self.setContentNonOwned(self.component, True)
        self.centreWithSize(800, 600)
        self.setVisible(True)

    def __del__(self):
        if self.component:
            del self.component

    def closeButtonPressed(self):
        juce.JUCEApplication.getInstance().systemRequestedQuit()


class Application(juce.JUCEApplication):
    window = None

    def getApplicationName(self):
        return "JUCE-o-matic"

    def getApplicationVersion(self):
        return "1.0"

    def initialise(self, commandLine):
        self.window = MainWindow()

    def shutdown(self):
        if self.window:
            del self.window


if __name__ == "__main__":
    juce.START_JUCE_APPLICATION(Application)

As easy as that ! You will find more example on JUCE usage in the examples folder.

https://raw.githubusercontent.com/kunitoki/popsicle/v0.9.6/images/juce_o_matic.png

Supported Platforms

List of popsicle supported platforms

Platform

Python 3.10

Python 3.11

Python 3.12

Notes

macOS-universal2

✅

✅

✅

win_amd64

✅

✅

✅

win_arm64

✅

✅

✅

manylinux_2014-x86_64

✅

✅

✅

manylinux_2014-aarch64

⚠️

⚠️

⚠️

Built but not tested exhaustively

Supported Modules

List of popsicle supported JUCE modules

Module

Supported

Test Coverage

Notes

juce_analytics

⛔️

N/A

Not Planned

juce_audio_basics

✅

0.87%

In Progress

juce_audio_devices

✅

0.0%

In Progress

juce_audio_formats

✅

0.0%

In Progress

juce_audio_plugin_client

⛔️

N/A

Not planned

juce_audio_processors

✅

0.0%

In Progress

juce_audio_utils

✅

0.0%

In Progress

juce_box2d

⛔️

N/A

Planned

juce_core

✅

44.82%

Ready

juce_cryptography

⛔️

N/A

Planned

juce_data_structures

✅

55.61%

Ready

juce_dsp

⛔️

N/A

Planned

juce_events

✅

49.68%

Ready

juce_graphics

✅

15.76%

In Progress

juce_gui_basics

✅

9.77%

In Progress, Basic Components Available

juce_gui_extra

✅

0.57%

In Progress

juce_midi_ci

⛔️

N/A

Not Planned

juce_opengl

⛔️

N/A

Planned

juce_osc

⛔️

N/A

Not Planned

juce_product_unlocking

⛔️

N/A

Not Planned

juce_video

⛔️

N/A

Not planned

Example Applications

Some images of JUCE tutorials and other small apps ported to popsicle.

Code Coverage

Coveralls - Code Coverage

The current code coverage of the project refers to the combined JUCE + popsicle

Popsicle places a strong emphasis on comprehensive code coverage to ensure the reliability and quality of the project. Our code coverage encompasses thorough testing of the JUCE framework, providing developers with confidence in the stability and performance of their applications.

To explore detailed information about the testing, refer to the tests directory in our GitHub repository. This resource offers insights into the specific areas of the JUCE framework that have been rigorously tested, empowering developers to make informed decisions about the robustness of their implementations.

At Popsicle, we believe that extensive code coverage is essential for delivering software solutions that meet the highest standards of excellence. Feel free to delve into our testing documentation to gain a deeper understanding of the meticulous approach we take towards ensuring code quality and reliability.

Licensing

Popsicle is offered in two distinct licensed flavors to cater to diverse usage scenarios:

  • GPLv3 License: This license is applicable when utilizing Popsicle from Python through the PyPi-provided wheels or embedding it in an open-source (OSS) application. Embracing the principles of open-source development, the GPLv3 license ensures that Popsicle remains freely accessible and modifiable within the open-source community.

  • Commercial License: Tailored for scenarios where Popsicle is integrated into a closed-source application, the commercial license provides a flexible solution for proprietary software development. This option offers a streamlined approach for utilizing Popsicle within closed environments, with further details to be announced.

Popsicle’s dual licensing approach ensures compatibility with a wide range of projects, whether they align with open-source principles or require the flexibility of a commercial license for closed-source applications.

It’s important to note that when Popsicle is employed in a closed-source application, a corresponding JUCE license is also required to ensure proper adherence to licensing requirements.

Installation

Getting started with Popsicle is a straightforward process, requiring just a few simple steps. Follow the instructions below to install Popsicle effortlessly:

pip3 install popsicle

Ensure that you have an up-to-date version of pip to ensure a smooth installation process.

Be sure you follow the quick start guide to know more abut how to use popsicle.

Build From Source

Clone the repository recursively as JUCE is a submodule.

git clone --recursive git@github.com:kunitoki/popsicle.git

Install python dependencies.

# Build the binary distribution
python3 -m build --wheel

# Install the local wheel
pip3 install dist/popsicle-*.whl

Metadata

Release files for popsicle 0.9.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for popsicle 0.9.6
File
popsicle-0.9.6-cp312-cp312-win_arm64.whl CPython 3.12 CPython 3.12 Windows ARM64 Details
popsicle-0.9.6-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
popsicle-0.9.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
popsicle-0.9.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details
popsicle-0.9.6-cp312-cp312-macosx_10_15_universal2.whl CPython 3.12 CPython 3.12 macOS 10.15+ universal2 (ARM64, x86-64) Details
popsicle-0.9.6-cp311-cp311-win_arm64.whl CPython 3.11 CPython 3.11 Windows ARM64 Details
popsicle-0.9.6-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
popsicle-0.9.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
popsicle-0.9.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARM64 Details
popsicle-0.9.6-cp311-cp311-macosx_10_15_universal2.whl CPython 3.11 CPython 3.11 macOS 10.15+ universal2 (ARM64, x86-64) Details
popsicle-0.9.6-cp310-cp310-win_arm64.whl CPython 3.10 CPython 3.10 Windows ARM64 Details
popsicle-0.9.6-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
popsicle-0.9.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details
popsicle-0.9.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARM64 Details
popsicle-0.9.6-cp310-cp310-macosx_10_15_universal2.whl CPython 3.10 CPython 3.10 macOS 10.15+ universal2 (ARM64, x86-64) Details

Total release size: 81.3 MB

Release files / popsicle-0.9.6-cp312-cp312-win_arm64.whl

Download URL popsicle-0.9.6-cp312-cp312-win_arm64.whl
Size 3.8 MB
Tags CPython 3.12 Windows ARM64
SHA-256 checksum
How to use checksums
c40d8301b08690b041ed5710f0e9a63bf83c48ab51f5cf015b6fb7cf95921744
BLAKE2b-256 checksum
How to use checksums
2d4fef8ccd54d49f7b87d368015f732db114d5b691474befdd2fb376e72d5744
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/4.0.2 CPython/3.11.8

Release files / popsicle-0.9.6-cp312-cp312-win_amd64.whl

Download URL popsicle-0.9.6-cp312-cp312-win_amd64.whl
Size 3.8 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
ce7f79069151860a1bd43ba50e786d57c8db3e2f6e8538db45bb0ac67adba7f6
BLAKE2b-256 checksum
How to use checksums
e706564c23a8c39326795bf9c33b254c46177c3e69ea93c5e51deac067b5a99d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/4.0.2 CPython/3.11.8

Release files / popsicle-0.9.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL popsicle-0.9.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 5.4 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
11de3ccfb5a8f422f1532aaca835ab6907affcbf91ff45312ebcb1d424b4723f
BLAKE2b-256 checksum
How to use checksums
960f237bd8e92f001a0dfdf27e1c102579f905254224772b83a67a524f7fe61e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/4.0.2 CPython/3.11.8

Release files / popsicle-0.9.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL popsicle-0.9.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 6.2 MB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
4429eeee549cf340b3bcc60e7244881b08b8357aeafc88a2a9aee9dd1e3b9fc1
BLAKE2b-256 checksum
How to use checksums
1ed0f4e364f972a49fb56fc13eba09370531ef32a8b7f4324ac78636acec3073
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/4.0.2 CPython/3.11.8

Release files / popsicle-0.9.6-cp312-cp312-macosx_10_15_universal2.whl

Download URL popsicle-0.9.6-cp312-cp312-macosx_10_15_universal2.whl
Size 8.0 MB
Tags CPython 3.12 macOS 10.15+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
a42d53580ddbaca15e64e34c4971f83a862a95c5e50d3e1be5b127c4ff056e48
BLAKE2b-256 checksum
How to use checksums
a94bdab88c2b55611574ce90afe3ce79b3314af42b757a2eb0b60161019e4418
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/4.0.2 CPython/3.11.8

Release files / popsicle-0.9.6-cp311-cp311-win_arm64.whl

Download URL popsicle-0.9.6-cp311-cp311-win_arm64.whl
Size 3.8 MB
Tags CPython 3.11 Windows ARM64
SHA-256 checksum
How to use checksums
0d0eafff83b08b6ada954e897a0e07b17f6994398c1860a5a9560af402c8f6e9
BLAKE2b-256 checksum
How to use checksums
732c2ff08fb47134ab13dcbac3318c2d00fd38990067eef9f054e94c9176c9c7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/4.0.2 CPython/3.11.8

Release files / popsicle-0.9.6-cp311-cp311-win_amd64.whl

Download URL popsicle-0.9.6-cp311-cp311-win_amd64.whl
Size 3.8 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
f30b6309b015f3a26a461223c19d7c8f962f42868575af076f15f71f53b58496
BLAKE2b-256 checksum
How to use checksums
0dcea68e9c72fb74e0fbd90a5b3e391c95d1a471159793941b4bd6b5be69ad99
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/4.0.2 CPython/3.11.8

Release files / popsicle-0.9.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL popsicle-0.9.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 5.4 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
95063399a42258b56b469ae31a380d6c2ddb4ab01d729a52300ee3e55ecececb
BLAKE2b-256 checksum
How to use checksums
d0ae6c68d7ec5dbf910014aae893a81285225c21a912e6ca90d9362cae32d538
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/4.0.2 CPython/3.11.8

Release files / popsicle-0.9.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL popsicle-0.9.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 6.2 MB
Tags CPython 3.11 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
cafbace5fb0df51aac0336cce47fc5208335c43670a103d1a7f8ee0f3094f118
BLAKE2b-256 checksum
How to use checksums
a7779b221a09aedde6a43670f587fb9c3753e584380bfdff7f340ec5eb0bbdac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/4.0.2 CPython/3.11.8

Release files / popsicle-0.9.6-cp311-cp311-macosx_10_15_universal2.whl

Download URL popsicle-0.9.6-cp311-cp311-macosx_10_15_universal2.whl
Size 7.8 MB
Tags CPython 3.11 macOS 10.15+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
d013f08cfd2c491d3f4a35b6477592bd58ece3d59c37a513b6d1e620f50145f1
BLAKE2b-256 checksum
How to use checksums
699a5f7f683e6771903d2ded407698e923e37e8fabc744ea9e1e92d688e216ab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/4.0.2 CPython/3.11.8

Release files / popsicle-0.9.6-cp310-cp310-win_arm64.whl

Download URL popsicle-0.9.6-cp310-cp310-win_arm64.whl
Size 3.8 MB
Tags CPython 3.10 Windows ARM64
SHA-256 checksum
How to use checksums
1e22ffb9aca2b468915d7c4b5bd7ce82cdf52ce86e1f4d54eacf6a033dd13c98
BLAKE2b-256 checksum
How to use checksums
a3569586dda4244bb54e25101b3361bc6f0d1f17c72bc8d1f7870f04fbafc1d3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/4.0.2 CPython/3.11.8

Release files / popsicle-0.9.6-cp310-cp310-win_amd64.whl

Download URL popsicle-0.9.6-cp310-cp310-win_amd64.whl
Size 3.8 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
c55c6f840269a49b395626ce600c65078aeeda8c727d305d1dca7bded5cf587b
BLAKE2b-256 checksum
How to use checksums
a9f15e4a1b371d95618cb25a51b828010760d8829f700a9983709b81809ddf8d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/4.0.2 CPython/3.11.8

Release files / popsicle-0.9.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL popsicle-0.9.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 5.4 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
4e2d51bd173da55f84aec6c2a3b5c4b8c0ac3742491a20110531fcc3a3f308bc
BLAKE2b-256 checksum
How to use checksums
a395ac52c32f7d041ab8661bcdc122eab8a8db56fd2b6c178cb340ac76b6b080
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/4.0.2 CPython/3.11.8

Release files / popsicle-0.9.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL popsicle-0.9.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 6.2 MB
Tags CPython 3.10 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
10ef070c120e782d852eb47a55a187cf7276e8a759110bbbec713e5bbd0faf6a
BLAKE2b-256 checksum
How to use checksums
40d7a34e02432ba5476da22cefcdda33fe0833050611a377103e8a6ac86b7f80
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/4.0.2 CPython/3.11.8

Release files / popsicle-0.9.6-cp310-cp310-macosx_10_15_universal2.whl

Download URL popsicle-0.9.6-cp310-cp310-macosx_10_15_universal2.whl
Size 7.8 MB
Tags CPython 3.10 macOS 10.15+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
0abedd3790cfe63b14ac3aa46263993e8d859b2c1f769dad8e8685d9995e8e2e
BLAKE2b-256 checksum
How to use checksums
8df41742f8bc023808776f29cf6cb1c24091d961f6ea141632eb2eb04045a58b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/4.0.2 CPython/3.11.8

Security for popsicle 0.9.6

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page