The JUCE 8 Preview branch is available now!

Hello everybody,

We are excited to announce that a JUCE 8 preview is available now on the juce8 branch of our public repository:

Please take this opportunity to try out the new features, and use this thread to provide any feedback.

JUCE 8 will also come with some important changes to the End User Licence Agreement. For more information, and to ask any questions related to licensing, please use the dedicated thread here:

A high level overview of the key features of JUCE 8 can be found on the JUCE website, but the information is also provided below to save everyone a few clicks.

JUCE 8 proudly doubles down on cross-platform C++ UI, bringing serious low-level enhancements to text rendering, a blazing fast Direct2D renderer on Windows and a brand new animation framework.

On top of this deep investment into traditional UI, the JUCE team unlocks an exciting new paradigm in audio software interfaces: WebViews.

WebView UI

JUCE 8 comes stocked with all the cross-platform glue code and tooling you need to build UIs with your favorite web framework. Iterate plugin UIs faster than you thought possible, with web tooling you already know and love. Onboard frontend web devs to your C++ audio products. Gain instant access to cross-platform hardware accelerated graphics via WebGL. The World Wide Web is your oyster, just BYOW (Bring Your Own Widgets).

Learn more: JUCE 8 Feature Overview: WebView UIs - JUCE

Improved Unicode Support

What do we want? Consistent text rendering across platforms! When do we want it? Emoji!

Months of research. Alignment with current industry best practices. A new custom renderer. Cross-platform tests. Painstaking attention to backwards compatibility. More than 2-person years of time were invested into re-plumbing the depths of low-level text rendering. We could go on, or leave it at :partying_face::tada:

Learn more: JUCE 8 Feature Overview: Unicode - JUCE

New Animation Module

JUCE 8 sports a brand new, fully-featured animation module. Whether you want to add sprinkles of delight to your UIs or build complex graphs of instersection animations, an expressive API makes it easy to get started. Sync to hardware refresh rates and pick from a familiar set of standard easings. You’ll be cooking up buttery smooth animations in no time.

Learn more: JUCE 8 Feature Overview: Animation Module - JUCE

Direct2D

Windows gets a major upgrade. The Direct2D renderer was nursed back to life by a dedicated JUCE community member and brought over the finish line with help from the JUCE team. Built on modern native platform APIs and taking advantage of hardware acceleration and GPU-backed images, it brings significant rendering and performance improvements. Expect all the basics such font rendering to be better AND faster.

Minimum Requirements

For Developers (Compiling)

  • C++ Standard: 17
  • MacOS/iOS: Xcode 12.4 (Intel macOS 10.15.4, Apple Silicon macOS 11.0)
  • Windows: Visual Studio 2019 (Windows 10)
  • Linux: g++ 7.0 or Clang 6.0 (for a full list of dependencies, see here).
  • Android: Android Studio (NDK 26) on Windows, macOS or Linux

For End Users (Deployment Targets)

  • macOS: macOS 10.11
  • Windows: Windows 10
  • Linux: Mainstream Linux distributions
  • iOS: iOS 12
  • Android: Android 5 - Lollipop (API Level 21)

Anyone trying out JUCE 8 should also read through the breaking changes document, as there are several related to text rendering to facilitate the new unicode renderer. We have also removed support for MinGW.

We have also been working with Avid to allow us to bundle the AAX SDK with JUCE. Not only will this make the compilation of AAX plug-ins easier, it will also allow us to discuss the contents of the bundled SDK on the JUCE forum without worrying about the restrictions of the AAX SDK licensing agreement. This hasn’t made it into the initial JUCE 8 preview branch, but we anticipate adding it shortly.

Finally, I would like to thank @matt yet again for his outstanding, and extensive, work on the new Direct2D renderer, along with everyone who has been helping Matt benchmark several different iterations of the renderer in their software. Working with Matt has been fantastic, and the new renderer is the culmination of multiple years of work (the JUCE team’s involvement has only been towards the end of this).

30 Likes

Congratulations guys. Thank you for all your hard work.

Congrats JUCE team, looking forward to trying it out

Congrats! Direct2D renderer is already incredible. And I can wait to try the animation module!

1 Like

Is there any chance it would still work under 10.14.6 and Xcode 10.3? I should buy a new machine, and I probably will have to, but just asking. :wink:

1 Like

It might work for a bit, but we kept the minimums as low as possible for JUCE 8. Ultimately there will be some non-optional feature or development introduced that requires a specific macOS SDK or compiler. Sorry.

1 Like

Thank you, @tom, for the kind words. That means a lot to me.

My heartfelt thanks to the entire JUCE team for their friendship, support, skill, and professionalism. Special thanks go to @tom for his patience and help as I struggled with the CI system, and for the late nights you put in to launch the beta, and for so much more. Special thanks are also due to @reuk, who somehow seemed to absorb, in about a week, the entire body of knowledge it took me a few years to put together, and then spent many hours and late nights to streamline and improve the renderer.

Working with the JUCE team has been one of the most satisfying, enjoyable, and educational experiences of my career. I’m honestly going to miss it.

I can’t wait to see what everyone does with JUCE 8. I’m going to write a plugin that visualizes music entirely with animated emoji.

All the best-

Matt

20 Likes

(Take a look at the Open Core Legacy Patcher, I have Ventura running on a 2013 MacBook Pro and everything works perfectly)

Thanks JUCE team for this great update!

1 Like

Exciting stuff! Looking forward to having a more in-depth look at the new features ASAP, but for now here’s a couple bits of feedback from my initial look:

  1. There appears to be an issue with cursor positioning using unicode characters in a JUCE text editor:
    cursor
    This is using the JUCE 8 demo runner on Sonoma 14.3 on an M2 Macbook Pro.

  2. The new animations library looks great, one of those things that’s always felt JUCE has been missing, however I must say I was hoping for a little more in terms of functionality and integration with Components.
    The main thing I’d love to see is that a component will apply transitions internally when its properties are changed. E.g. if I set a transition for a component’s width, and then call setBounds() on that component, instead of immediately taking the new width it will instead transition to that value according to the transition I specified.
    It would also be great to get some interpolation functions of JUCE objects like juce::Colour, juce::Rectangle, juce::Point, etc. At the moment it seems I just get a callback with a float and so would have to manually add that extra layer of using that float to interpolate between some colours, for example.
    I’d love to be able to write something like this:

component.setColour (backgroundColourId, juce::Colours::red);
// Component is now red.

component.setTransition ("colour", juce::ValueAnimatorBuilder {}.withDurationMs (2000));
component.setColour (backgroundColourId, juce::Colours::blue);
// Component is still red, but will fade to blue over the next 2s.
7 Likes

There seems to be some mem leaks when closing an app down, at least on Windows/VS2022’s msvc compiler:

Dumping objects ->
{12579} normal block at 0x000002823EDEB6E0, 6 bytes long.
 Data: <en-gb > 65 6E 2D 67 62 00 
{12578} normal block at 0x000002823EDEBB90, 16 bytes long.
 Data: <@ R:       >    > 40 C8 52 3A 82 02 00 00 E0 B6 DE 3E 82 02 00 00 
{5048} normal block at 0x000002823A62E170, 2 bytes long.
 Data: <c > 63 00 
{5047} normal block at 0x000002823A52C840, 16 bytes long.
 Data: <        p b:    > 00 00 00 00 00 00 00 00 70 E1 62 3A 82 02 00 00 
{5044} normal block at 0x000002823ED328B0, 216 bytes long.
 Data: <                > 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
{5024} normal block at 0x000002823A528A80, 184 bytes long.
 Data: <                > 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
Object dump complete.

It’s fairly consistent for me, but cannot be triggered by a quick open/close of an app - you need to keep it running for a bit. It’s reproducible via the demo.

3 Likes

Congrats on 8.0 getting to preview

What’s the status on MIDI 2.0 in JUCE now? I see UMP and CI are in but what’s still missing or pending?
Profiles?
USB?
( UMP and Ethernet has only just been announced so obviously will come much later )

Nice work! I can’t wait to try the new Direct2D renderer.

As a user, I’m very scared to see WebView at the top though. I can’t avoid linking it to this post on reddit. Maybe a “use responsibly” note should be added to the announcement? :sweat_smile:

I also wonder who wrote that :sweat_smile:

There are already (non-JUCE) plug-ins out there, that are fairly famous, using WebViews. It’s not really the future, it’s the present. I can’t disclose which ones they are, but there are no complaints about their performance.

Output did an ADC23 talk on using web views for Arcade etc so I don’t think there’s any harm in mentioning them.

1 Like

Some interesting stuff here, tho of little use for me personally. Would have been much more excited about some iOS updates which have been pretty much dead for 3-4 years.

4 Likes

Alright fair enough. I find that interesting. I don’t mind being proved wrong.

I admit my ignorance, I had never heard about something called WebView UI until yesterday, and didn’t even know JUCE was about to include such a thing. But I have developed a very similar architecture for my products that allows me to create the UI by just editing an XML definition file, and I can also reload the whole UI by just hitting F5 (like on a web browser) during debug runtime so to see the changes immediately. I haven’t given a name to this thing, but I started working at it in 2020 and that helped me boosting my productions a lot in the last 4 years.

Now I’m glad to see JUCE 8 will have a similar thing… that I don’t need, though.

Now my question is: will I be penalized if I keep using JUCE 7 for another year or two? If bug fixes will be applied to JUCE 8, will I be able to apply them to JUCE 7 as well or am I forced to switch to JUCE 8 and pay the extra money for features that I will probably never use?

Not criticizing, just looking for advice.

Generally JUCE has always followed that you’ll need to upgrade to get the latest bug fixes. However, there are normally discounts for upgrades for existing users. The exact discount will depend on different factors and I’m afraid I don’t know exactly what these will be for JUCE 8 yet.

2 Likes

I report here because I haven’t located the bug(?) :smiling_face_with_tear: After bump JUCE from the latest commit of the direct2d branch to the lastest commit of the juce8 branch, the plugin shows a massive graphics lag on Linux (words from a Linux user) and a noticeable lag on macOS.
You may build the following repo with develop branch (JUCE 8). And you will see the lags when moving the dragger of a filter. However, when you switch to juce7 branch (direct2d latest commit), the lags disappear. The only different is JUCE itself and a one-line JUCE 8 font-related code.