Arduino IDE 2.3.7 is now available

If you are using a recent version of the IDE, you will get an auto-update offer simply by starting the IDE.

Otherwise, the release is available for download here:

https://www.arduino.cc/en/software


This release provides some nice advancements and fixes.

Thanks so much to the forum community for all the valuable testing and feedback that has helped us greatly in identifying and investigating these bugs and enhancements!

Highlights

Add "Copy Output" icon to Serial Monitor toolbar

arduino/arduino-ide#2718, arduino/arduino-ide#1729

Due to limitations of the technology used for the implementation of the Arduino Serial Monitor, the ability to select text in the output field is limited to the visible area of the field (arduino/arduino-ide#812, arduino/arduino-ide#1081). Previously, this means that collecting all Serial Monitor content via the standard "select and copy" workflow is not possible.

It is now possible to collect the full Serial Monitor content in an even more convenient manner by clicking the new "Copy Output" icon that has been added to the right side of the Serial Monitor toolbar:

Add "Installed" filter to Boards Manager

arduino/arduino-ide#2812, arduino/arduino-ide#2638

Boards Manager and Library Manager have a "Type" menu that allows filtering the list of boards platforms or libraries. Previously, an "Installed" option was present in the Library Manager menu, but not in Boards Manager.

This convenient filter option has now been added to Boards Manager, making it easy to obtain a list of the boards platforms you have installed.

Install dependencies during "INSTALL ALL" libraries update

arduino/arduino-ide#2830, arduino/arduino-ide#2505

Arduino IDE periodically checks whether newer versions of any of the installed libraries are available. If so, it displays a notification that offers to update them:

Arduino libraries may have dependencies on other libraries. The library developer can define these dependencies in the library metadata. That information is used by Library Manager to install the dependencies along with a library.

Since dependencies may change from one release of a library to another, the installation of the specified dependencies should be done when updating a library as well as during the initial installation. Previously, this was not done when updating libraries via the "INSTALL ALL" button in the library update notification.

Use proxy configuration with Boards Manager

arduino/arduino-ide#2806, arduino/arduino-cli#2889, arduino/arduino-cli#2888

Some users may access the Internet through a proxy server. Arduino IDE can be configured accordingly via the "Network" tab of the "Preferences" dialog.

A regression occurred that caused Arduino IDE to ignore the proxy configuration when a boards platform was installed via Boards Manager. That bug has now been fixed.

Fixes for security vulnerabilities in macOS builds

Security vulnerabilities were identified in the builds of Arduino IDE for macOS hosts:

https://support.arduino.cc/hc/en-us/articles/24329484618652-ASEC-25-004-Arduino-IDE-v2-3-7-Resolves-Multiple-Vulnerabilities

These vulnerabilities have been fixed in Arduino IDE 2.3.7. To ensure security and stability, users are advised to update as soon as possible.

Remove unnecessary macOS entitlement for environment variables

arduino/arduino-ide#2805

See:

Use minimal file permissions for internal utilities

arduino/arduino-ide#2805

See:

Expand and improve translations

arduino/arduino-ide#2709, arduino/arduino-ide#2806, arduino/arduino-cli#2854, arduino/arduino-cli#2914, arduino/arduino-cli#2939

The community work to make Arduino IDE accessible to everyone in the world through localization of the text of the IDE's UI continues, reaching high coverage levels for 18 languages/locales.

If you would like to contribute to the Arduino IDE translations, please see the information here:

https://github.com/arduino/arduino-ide/blob/main/docs/contributor-guide/translation.md#translator-guide

Update Arduino CLI dependency to 1.3.1

arduino/arduino-ide#2806

Much of the non-GUI functionality of Arduino IDE comes from the Arduino CLI tool.

In order to benefit from the ongoing development work in the Arduino CLI project, Arduino IDE has been updated to using Arduino CLI version 1.3.1.

Remember platform tool dependencies provided by another index

arduino/arduino-ide#2806, arduino/arduino-cli#2942

Arduino boards platforms have dependencies on a collection of tools used for operations such as compilation and uploading. The platform developer may define these dependencies in their package index.

In addition to tools they provide themselves, the platform developer may specify dependencies on tools already offered by other platform developers.

The obvious use of this tool dependencies information is to allow Boards Manager to install tools along with the platform. Additionally, this information is used by the platform framework in discovering the locations of the installed tools. Since the user might later remove additional package indexes from their system, Arduino IDE stores the tool dependencies data alongside the platform installation at the time of platform installation.

Previously, the full data about tool dependencies referenced from other package indexes was not recorded by Boards Manager. This could result in inappropriate tool selection or removal of tool dependencies under certain conditions.

Support multiple recipe.c.combine patterns in platforms

arduino/arduino-ide#2806, arduino/arduino-cli#2954

The commands invoked by Arduino IDE when compiling a sketch are generated from "patterns" (i.e., templates) defined in the configuration files of the boards platform.

One of these "patterns" is defined by the recipe.c.combine.pattern property, which is used for linking the individual compilation objects produced by the earlier compilation commands.

The need was found to allow platforms to run multiple linking commands in sequence. This is now supported by defining multiple properties with a recipe.c.combine.<index>.pattern format, where <index> is an integer used to differentiate the properties and define the order in which the commands are invoked.

Fix function prototype generation failure when processing long lines of code

arduino/arduino-ide#2806, arduino/arduino-cli#2935, arduino/ArduinoCore-zephyr#140

Arduino IDE automatically generates function prototypes for functions defined in a .ino file that don't have a manually created prototype.

It was discovered that the prototype generation failed when processing sketch programs that contain extremely long lines of code. This would normally be an unusual condition, but did occur even minimal sketches when compiled for a board from Arduino's Zephyr OS-based Arduino platforms due to a quirk of that platform's core code.

(Thanks @KurtE)

Enhancements and fixes for build profiles

Arduino sketches have a dependency on the Arduino boards platforms of the target boards, and typically on a set of libraries as well.

Traditionally, all Arduino sketches share a global set of installed dependencies. In some cases, this can be problematic. For example, updating a library to a new version that has a breaking change may cause existing sketches written for use with the previous version to no longer work.

In order to support the more advanced use case where a developer wants more control over the sketch project dependencies, Arduino has implemented a "build profile" system, where the sketch is compiled in an isolated environment which only contains the set of dependencies specified in a metadata file bundled with the sketch.

Build profile support is implemented in the Arduino CLI helper tool Arduino IDE uses to compile sketches. Handling of build profiles has not been officially added to the Arduino IDE GUI, so previously this feature has only been accessible to those using Arduino CLI directly from the command line, and thus the work on the build profiles system has not been notable to Arduino IDE users. This situation has changed to some extent recently due to the availability of build profiles support in Arduino IDE through the 3rd party Arduino Sketch Vault extension.

Support locally installed libraries in build profiles

arduino/arduino-ide#2806, arduino/arduino-cli#2930, arduino/arduino-cli#2133

The primary source of dependencies is the Library Manager and Boards Manager distribution systems. However, a sketch might also have dependencies on libraries that are not available from those sources. For this reason, support has been added to specifying a local path to a library in the build profile via a dir key in the libraries sequence element. For example:

profiles:
  foo:
    fqbn: arduino:avr:uno
    libraries:
      # The library in the `extras/FooLib` subfolder of the sketch.
      - dir: extras/FooLib
      # Servo@1.3.0 from Library Manager
      - Servo (1.3.0)
    platforms:
      - platform: arduino:avr (1.8.6)

Support use of global platform installation with build profiles

arduino/arduino-ide#2806, arduino/arduino-cli#2940, arduino/arduino-cli#2927

Build profiles offer the ability to fully control the dependencies environment of a sketch. This includes the boards platforms in addition to the library dependencies.

However, users may be primarily interested in managing the library dependencies, since these are the most common source of problems caused by breaking changes and collisions.

Although libraries are generally quite lightweight in terms of disk usage, a platform installation may be gigabytes in size.

A user not interested in managing the platform dependency, and who wishes to avoid ending up with additional installations of a platform may prefer to configure their build profile to simply use whichever version of the platform dependency is already installed globally.

When you pin a platform version in the build profile, it is installed via the Boards Manager system. users may also be using manually installed platforms (either due to the platform developer not having provided Boards Manager support, or due to using a development version of a platform). This change provides support for using these manually installed platforms with build profiles.

Compile all libraries specified by build profile

arduino/arduino-ide#2806, arduino/arduino-cli#2951

Traditionally, the Arduino sketch build system performs a "library discovery" operation, where the specific library dependencies of a sketch are automatically determined. "Library discovery" requires repeatedly preprocessing the sketch program and thus is a fairly computing intensive process. This operation can be a significant portion of the duration of a sketch build.

There is a clear need for library discovery in the case of building a sketch in the global dependencies environment where many irrelevant libraries are typically present. This is not the case when a build profile is in use. In this case, the only standalone libraries present will be those specifically indicated as being dependencies of the sketch. Thus, the build system will assume that all those libraries should be compiled and thus avoid the need for their discovery.


Full changelog here:

https://github.com/arduino/arduino-ide/releases/tag/2.3.7


If you have any questions or feedback please post here in the dedicated forum category for Arduino IDE 2.x:

https://forum.arduino.cc/c/software/ide-2-x/93

If you want to see the list of known issues, work in progress, submit a formal report, or contribute to development, the Arduino IDE 2.x source code is hosted in this public repository:

https://github.com/arduino/arduino-ide

The "Update Available" dialog says

Fixed

When updating a library, install all dependencies (#2830) Escape asterisks in error message content for notification display (#2811) Replace null characters in copied monitor output (#2382) Review macOS build security (#2805) Use macos-15-intel runner for MacOS x86_64 builds (#2828)

Those Issue numbers are handily clickable; the odd one out is #2382. The "null characters" issue is actually #2832.

In case it is easy to fix.

Thanks for reporting this. I have corrected the pull request number in the release notes.

This specific item will only be of interest to those who are updating from a nightly build. The reason is because it is a fix for a bug (arduino/arduino-ide#2827) in the Serial Monitor "Copy Output" feature that was introduced in version 2.3.7. Since that feature was not present in the previous release versions of Arduino IDE, users of the release versions of Arduino IDE were never affected by arduino/arduino-ide#2827. The only users who were affected by the bug are those who used a nightly build during the time period between the introduction of the feature (arduino/arduino-ide#2718) and the fix for the bug present in that initial implementation of the feature (arduino/arduino-ide#2832). So from the perspective of someone upgrading from 2.3.6 to 2.3.7, this is simply part of the work to implement that new feature and not noteworthy as a separate release note item (I would have omitted it from the release notes entirely, but another team member was tasked with writing them for this release).

FYI

arduino-ide_nightly-20251221_Windows_64bit prompts that there is a new version available (2.3.7). A nightly build newer than the current release version should not do that :wink:

Thanks for your report. We have a formal release procedure, which includes a step to bump the version number after completing the release in order to provide correct versioning of the nightly builds. However, that final step was forgotten.

I submitted a pull request for the forgotten bump:

The spurious update notification will not occur when using the nightly release builds produced after the time that PR is merged.