Migration notes for nRF Connect SDK v3.3.0

This document describes the changes required or recommended when migrating your application from nRF Connect SDK v3.2.x to nRF Connect SDK v3.3.0.

Required changes

The following changes are mandatory to make your application work in the same way as in previous releases.

Partition Manager deprecation

The Partition Manager is a component in the nRF Connect SDK and is responsible for handling the memory partitioning at build time.

This functionality is in the process of being deprecated and replaced by Zephyr’s default devicetree-based memory partitioning. It is recommended that all new designs using Nordic devices, excluding the nRF91 Series devices, are built with DTS instead of Partition Manager. Partition Manager will be removed from the nRF Connect SDK by the end of 2026 from the main branch.

For more information on how to configure partitions using DTS and how to migrate your existing configuration to DTS, see the Migrating partition configuration from Partition Manager to devicetree (DTS) page.

Build system

  • The nRF Connect SDK-specific mechanism for creating variant images is replaced with the Zephyr-provided ExternalZephyrVariantProject_Add(..) function. The new function is defined and maintained in the Zephyr repository, providing a very similar API and functionality. The old function, ExternalNcsVariantProject_Add(..), is deprecated and kept for backward compatibility, but it will be removed in the future. To migrate your project, replace all instances of ExternalNcsVariantProject_Add(..) with ExternalZephyrVariantProject_Add(..).

    For example, the following code snippet:

    ExternalNcsVariantProject_Add(
      APPLICATION <src_image>
      VARIANT <variant_image>
    )
    

    Should be modified as follows:

    ExternalZephyrVariantProject_Add(
      SOURCE_APP <src_image>
      APPLICATION <variant_image>
      SNIPPET secondary-app-partition
    )
    

Samples and applications

This section describes the changes related to samples and applications.

nRF5340 Audio

When preparing the JSON file, the sirk field sets the Set Identity Resolving Key (SIRK) for the device set, which is used in the unicast applications. The SIRK must be 16 characters long and cannot be the default SIRK defined in the Kconfig file (NRF5340_TWS_DEMO).

Fast Pair Locator Tag sample

  • The battery measurement configuration for the thingy53/nrf5340/cpuapp board target has changed. The battery level is now measured and calculated by the Fuel Gauge library instead of direct ADC read and linear approximation of charge level. This change requires the following configuration updates:

    • Define fuel gauge device in the DTS along with its source. In case of the thingy53/nrf5340/cpuapp board target, the fuel gauge device is already defined in the board DTS as fuel_gauge with the source set to the voltage divider vbatt. Enable the fuel gauge and source devices as follows:

      vbatt {
          status = "okay";
      };
      
      fuel_gauge {
          status = "okay";
      };
      
    • Add the following entries to the Kconfig configuration:

      CONFIG_FUEL_GAUGE=y
      CONFIG_FUEL_GAUGE_COMPOSITE=y
      CONFIG_VOLTAGE_DIVIDER=y
      
    • Alias the fuel gauge device to the battery-fuel-gauge name in the DTS:

      aliases {
          battery-fuel-gauge = &fuel_gauge;
      };
      
    • Additionally, you can configure the Power Management module to decrease the power consumption of the voltage divider:

      • Add the zephyr,pm-device-runtime-auto; property to the voltage divider and the fuel gauge device in the DTS.

      • Add the following entries to the Kconfig configuration:

        CONFIG_PM_DEVICE=y
        CONFIG_PM_DEVICE_RUNTIME=y
        

Matter

  • Changed partitions mapping for the nRF7002 DK in the Matter samples and applications. This change breaks the DFU between the previous nRF Connect SDK versions and the upcoming release. Ensure that you have valid partition mappings for the nRF7002 DK in your project to perform the DFU.

  • Removed the application-specific snippets from the Matter samples. Snippets are available now in the global snippets/matter directory in the nRF Connect SDK root. To see the snippets documentation, refer to the Matter snippet collection page.

    Refer to the following list of changes for more information:

    • Matter: Light switch

      • Removed the lit_icd snippet and enabled LIT ICD configuration by default.

    • Matter: Door lock

      • Removed the schedules snippet. Use the schedules.conf configuration overlay file instead.

        For example:

        west build -b nrf54l15dk_nrf54l15_cpuapp -p -- -DEXTRA_CONF_FILE=schedules.conf
        
    • Matter bridge

      • Removed the onoff_plug snippet. Use the onoff_plug.conf configuration overlay file instead.

        For example:

        west build -b nrf54l15dk_nrf54l15_cpuapp -p -- -DEXTRA_CONF_FILE=onoff_plug.conf
        
    • Renamed the diagnostic-logs snippet to matter-diagnostic-logs.

Thread

  • Removed all application-specific snippets from the Thread samples. New snippets are available now in the global snippets directory in the nRF Connect SDK root. Sample-specific configurations were converted to extra configuration files in each sample’s extra_conf/ directory. To see the snippets documentation, refer to the OpenThread snippet collection page.

    Refer to the following table for the list of changes:

    Thread samples — snippet and extra configuration file migration

    Sample

    Removed snippet

    Replacement

    Thread: CLI

    ci, ci_l2, debug, logging, usb, diag_gpio

    Use global snippets ot-ci, ot-debug, ot-usb, ot-diag-gpio

    logging_l2

    Use extra configuration file: extra_conf/l2_logging.conf

    low_power

    Use extra configuration file: extra_conf/low_power.conf and extra Devicetree overlay file: extra_conf/low_power.overlay

    multiprotocol

    Use extra configuration file: extra_conf/multiprotocol.conf

    tcat, tcp

    Use extra configuration files: extra_conf/tcat.conf, extra_conf/tcp.conf

    Thread: CoAP Client

    ci, debug, logging

    Use global snippets ot-ci, ot-debug.

    mtd

    Use extra configuration file: extra_conf/mtd.conf

    multiprotocol_ble

    Use extra configuration file: extra_conf/multiprotocol_ble.conf

    Thread: CoAP Server

    ci, debug, l2, logging, logging_l2

    Use global snippets ot-ci, ot-debug, ot-zephyr-l2.

    Thread: Co-processor

    ci, debug, logging, usb

    Use global snippets ot-ci, ot-debug, ot-usb.

    hci

    Use extra configuration file: extra_conf/rcp_hci.conf and extra Devicetree overlay file: extra_conf/rcp_hci.overlay

    vendor_hook

    Set the CONFIG_OPENTHREAD_COPROCESSOR_VENDOR_HOOK_SOURCE Kconfig option to the path to the vendor hook source file. The default one is src/user_vendor_hook.cpp.

    Example for building with a global snippet and an overlay (CLI sample):

    west build -b nrf54l15dk_nrf54l15_cpuapp -p -- -DSNIPPET=ot-debug -DEXTRA_CONF_FILE=extra_conf/tcp.conf
    

Libraries

This section describes the changes related to libraries.

  • LTE link control library:

    • The functions lte_lc_modem_events_enable() and lte_lc_modem_events_disable() have been removed. Instead, use the CONFIG_LTE_LC_MODEM_EVENTS_MODULE Kconfig option to enable modem events.

  • nRF Security library:

    • Removed:

      • The CONFIG_PSA_WANT_KEY_TYPE_WPA3_SAE_PT Kconfig option and replaced it with CONFIG_PSA_WANT_KEY_TYPE_WPA3_SAE.

      • The CONFIG_PSA_WANT_ALG_WPA3_SAE Kconfig option and replaced it with CONFIG_PSA_WANT_ALG_WPA3_SAE_FIXED and CONFIG_PSA_WANT_ALG_WPA3_SAE_GDH.

      • The CONFIG_MBEDTLS_PSA_STATIC_KEY_SLOT_BUFFER_SIZE Kconfig option. The PSA Crypto API is able to infer the key slot buffer size based on the keys enabled in the build, so there is no need to define it manually.

      • The CONFIG_MBEDTLS_MAC_SHA256_ENABLED Kconfig option.

  • FTP client library:

    • The library has been moved to the Zephyr repository. Along with the transition, the following API changes were introduced:

      • You need to define the ftp_client instance at application level instead of defining it internally within the library to allow to multiple instances of the library.

      • All FTP client API functions now require an additional struct ftp_client *client parameter (using the client instance defined in the application). For example:

        int ftp_mkd(const char *folder);
        

        Became:

        int ftp_mkd(struct ftp_client *client, const char *folder);
        
      • All ftp_reply_code reply code names have been extended with additional information, for example FTP_CODE_150 became FTP_CODE_150_FILE_STATUS_OK.

      • All FTP client API functions now return 0 on success instead of function-specific reply code.

Trusted Firmware-M

  • The default TF-M profile has changed. It is now CONFIG_TFM_PROFILE_TYPE_NOT_SET in all cases except for the Thingy:91 and Thingy:91 X board targets, on which it is still CONFIG_TFM_PROFILE_TYPE_MINIMAL. If your build is using the minimal TF-M profile, make sure to explicitly enable CONFIG_TFM_PROFILE_TYPE_MINIMAL. See Building and configuring TF-M for more information on the TF-M profiles.

  • For the nRF91 Series board targets that have MCUboot and a TF-M profile other than minimal enabled, the default TF-M partition size (as configured with CONFIG_PM_PARTITION_SIZE_TFM) has been reduced. In cases where it would previously be 0x3FE00, it is now 0x17E00. If your build was using the default value of 0x3FE00 and your TF-M flash usage is higher than the new value, make sure to explicitly set it to more than 0x17E00 to avoid flash overflow issues.