This post is taken from the JUCE email newsletter.
To get these delivered to your email inbox, sign up here: Newsletter - JUCE
8.0.13 is out and there’s a lot in it!
There are over 240 commits since the last release.
As always, the JUCE team’s main job has been keeping things working smoothly on top of changes to operating systems, compilers, plug-in SDKs, DAWs, and dependencies.
That said, there’s also a ton of interesting little features and bug fixes, so let’s dive into some detail.
Please also note the deprecations in this release. Over 80% of respondents to the 2025 JUCE survey said they were happy to see well-documented breaking changes — we’ve taken you at your word! Please view the section at the bottom and checkout BREAKING_CHANGES.md for more.
GUI
The unusually big compilation unit in the juce_gui_basics module has been split into 5 pieces, reducing the overall compile-time. (commit)
Apple’s new Icon Composer is now supported in MacOS and iOS builds. Add an .icon bundle to your Projucer or CMake project and JUCE will produce the correct asset catalogue automatically; legacy .icns icons still work as before. (commit, forum, commit)
Component painting performance
A new diagnostics framework lets you inspect and time the paint routine of any component (commit, commit)
There’s also a fantastic new ComponentDiagnosticsDemo in the DemoRunner which illustrates how you could use the diagnostics to speed up your drawing code. (commit)
Melatonin Inspector is already taking advantage of the diagnostics, giving JUCE 8.0.13 users real-time performance stats without any additional setup.

Component::paintComponentAndChildren has been substantially refactored for performance and to tighten the opaque-region checks resulting in fewer redundant redraws and unnecessary clip operations. (commit)
The stack size of Component and ListenerList has been reduced. (commit, commit)
The old macOS image tiling fallback has been removed, which means image tiling is faster and less artifact-y. (commit)
Windows
The Windows minimum deployment target is now Windows 10 version 1607. This will impact people still targetting the initial launch version of Windows 10, which should be a very small number. (commit, forum)
Repaint performance is improved. The D2D renderer is now driven by WM_PAINT, allowing the system to better optimise drawing when there are multiple heavy plugin editors all onscreen at the same time. (commit, commit, forum)
JUCE no longer dynamically loads functions that have shipped with Windows 10 for years. (commit and many follow-ups)
Mirrored vertical/horizontal flip transforms now draw correctly on the D2D renderer. (commit, forum)
Several Windows resize handling issues are fixed. (commit, forum, commit, commit, forum).
iOS
iOS input handling improvements, including improved handling of different pointer types (touch, mouse, pencil). Apple pencil hover states work properly. (commit, forum, commit, commit)
Switching between text input targets now reloads the input view instead of restarting it, resulting in smoother transitions. (commit)
There’s a new warning when JUCE_IN_APP_PURCHASES_USE_SANDBOX_ENVIRONMENT is defined, so you don’t ship sandbox-mode IAP to the store by accident. (commit)
Linux
JUCE now uses gio to implement moveToTrash, complying with the FreeDesktop.org Trash specification (commit)
WebView ResourceProvider throughput performance increased. (commit)
Lots of WebView fixes (commit, commit, commit)
PopupMenu scaling fixed in plugins where the host (e.g. Ardour) overrides the system scale. (commit, forum)
Dependencies
Xcode 26.4.1 support (commit, commit)
The ASIO SDK is now bundled in the JUCE source. Steinberg relicensed the ASIO SDK under GPLv3. Both the DemoRunner and AudioPluginHost have ASIO enabled by default. (commit)
The ARA SDK was updated to 2.3.0. New helpers AudioProcessor::getARAExtensions() / AudioProcessorEditor::getARAExtensions() are now the preferred way to access ARA extensions — deriving from the extension types is being phased out. (commit, commit, commit, commit)
Breaking Change Highlights
Please see BREAKING_CHANGES.md for more detail. Here are some highlights:
Typeface::getStringWidth(), Font::getStringWidth() and their friends that have been deprecated since JUCE 8 are now removed in this release. Replace with GlyphArrangement::getStringWidth() and TextLayout::getStringWidth() which takes font-fallback and shaping into account. (commit)
Windows hi-dpi behaviour in plugins is now consistent with behaviour in Standalones. Peers (heavyweight components) will adopt the scale factor of the enclosing display by default, with new API to override. Previously, plugins would always report a scale factor of 1. (commit, forum, commit)
The AlertWindow::show return value is now consistent between native and non-native windows. Please look at your code to make sure it’s handling the updated return values. (commit, forum)
If you use ARA, it must be updated to version 2.3.0. The ARA::ChannelArrangement type is replaced by ARA::ChannelFormat. A new type member ARAConfigurationType has been added to ARADemoPluginDocumentControllerSpecialisation.
The ExtensionsVisitor type and functions on VSTPluginFormatHeadless have been removed. Use the new member functions of AudioPluginInstance. (commit, commit, commit)




