Skip to main content

July 2025

A Summary of Fleet Health Delivered to your Inbox

We have introduced a weekly summary email, sent to all users on an account, that gives you visibility into the growth and health of your fleet, and your teams usage of Memfault. This summary will keep you up-to-date without having to navigate through multiple dashboards or between multiple projects.

The Fleet Health Summary includes key information on changes week over week, including active devices, top software versions, most popular dashboards and, critically, Device Vitals. The summary covers your top three projects (by device count) and each project will be listed separately in the summary email.

Quickly Identify a List of Devices Impacted by Issues

We have added a new filter to Device Search -'Impacted by Issues' - that lets users quickly identify a list of devices impacted by any Issue, a specific Issue or a set of Issues. The filter also includes the option to further refine your list by the number of traces of the Issue(s) per device.

This filter adds another powerful tool for helping users gauge impact of issues across the fleet and quickly identify and investigate devices that have been impacted.

General

  • Introduced a new "Impacted by Issues" device search filter, allowing users to identify devices based on their issue impact status and view trace counts, with customizable filtering options for enhanced device management.

  • Customers can now receive a "Weekly Summary" email highlighting key organizational events, such as new active devices and popular dashboards, with customizable content options.

  • Introduced a new Quotas system and interface, simplifying device entitlement management with new visibility levels and plans, enhancing understanding of resource usage through project and organization-level overview pages.

  • Linux trace signatures now include the running process name. This may result in a temporary increase in new issue counts for existing projects.

  • You can now update issue filters directly on an issue chart card without leaving the page or recreating the chart.

  • Released a new date picker dropdown with more human-readable relative date formats for easier date selection.

  • Added a "Find Impacted Device" button on the issues list page to quickly navigate to the device list with the impacted issues filter pre-applied.

  • Added the ability to create, edit, and delete tiles on the Device Detail Page, including new Markdown and Device Attribute tiles, plus configurable thresholds for Device Vital tiles with visual status indicators.

MCU

[1.26.1] - 2025-06-30

This is a minor fix release, addressing one future compatibility issue with the Zephyr port.

🛠️ Changed

  • Zephyr:
    • Apply a compatibility fix for upcoming Zephyr 4.2.0, fixing the size of the net_mgmt callback mgmt_event parameter. Thanks to @rlubos for providing the fix in #91 🎉!

[1.26.0] - 2025-06-26

This is a feature release, primarily addressing future compatibility changes for the next nRF-Connect SDK release.

📈 Added

  • Zephyr:
    • Add support for the ESP32 chip on Zephyr, adding to the existing support for ESP32-S3 and ESP32 C series chips.
    • Add support for building the Memfault SDK on the native_sim board. Note that Memfault does not support reboot tracking or coredumps on this target, but other features are supported.

🛠️ Changed

  • General:
    • Add a MEMFAULT_ENABLE_WARNING(warning) macro complementing the existing MEMFAULT_DISABLE_WARNING(warning) macro. This macro is only implemented for GCC + Clang.
  • Zephyr:
    • Remove the External Module logic, used to support multiple Zephyr versions, and instead use the normal Zephyr module Kconfig path specifier. There should be no user-facing changes from this change. It addresses an issue with Kconfig symbol linting.
    • In the Zephyr QEMU sample app, add the --param=min-pagesize=0x1000 compiler option, which will catch dereferences to low memory addresses. This is only for static analysis purposes and does not affect any behavior.
  • ESP-IDF:
    • The heartbeat metrics timer is now enabled by default when CONFIG_MEMFAULT_DEEP_SLEEP_SUPPORT=y. Version 1.25.0, which added deep sleep support, had disabled the normal heartbeat metrics timer by default. The default behavior can be overridden with the Kconfig option CONFIG_MEMFAULT_METRICS_HEARTBEAT_TIMER_ENABLE.
  • nRF-Connect SDK:
    • Replace use of LTE_LC_ON_CFUN with NRF_MODEM_LIB_ON_CFUN for nRF-Connect SDK v2.8.0+. This deprecated API is scheduled to be removed in the next nRF-Connect SDK release.

[1.25.0] - 2025-06-09

This is a feature release of the Memfault Firmware SDK. The main new feature released in this version is support for tracking metrics through deep sleep on ESP32 devices. Full release notes are below.

📈 Added

  • Zephyr:

    • Add a new choice config CONFIG_MEMFAULT_REBOOT_REASON_GET. By default, CONFIG_MEMFAULT_REBOOT_REASON_GET_HWINFO=y, which is supported by imply CONFIG_HWINFO in the overarching MEMFAULT symbol. This default enables better reboot reasons out-of-the-box via Zephyr's hwinfo module. The fall-back option is CONFIG_MEMFAULT_REBOOT_REASON_GET_BASIC, which provides a simple implementation. As before, users can override the default implementations with CONFIG_MEMFAULT_REBOOT_REASON_GET_CUSTOM=y.

    • Add a new Kconfig setting, CONFIG_MEMFAULT_ENABLE_REBOOT_DIAG_DUMP, to print the reboot reason code on system boot, for debugging purposes. This feature is enabled by default. It can be disabled with CONFIG_MEMFAULT_ENABLE_REBOOT_DIAG_DUMP=n.

    • Add a boot_time_ms metric, which tracks how long the system takes to boot the application. Can be disabled with CONFIG_MEMFAULT_METRICS_BOOT_TIME=n.

    • Add new builtin Wi-Fi metrics, enabled by default when CONFIG_WIFI=y, and can be disabled with CONFIG_MEMFAULT_METRICS_WIFI=n:

      • wifi_beacon_interval
      • wifi_dtim_interval
      • wifi_frequency_band
      • wifi_primary_channel
      • wifi_security_type
      • wifi_sta_rssi
      • wifi_standard_version
      • wifi_twt_capable
      • wifi_tx_rate_mbps (Zephyr 4.1.0+ only)

      These add on top of the existing Zephyr Wi-Fi metrics:

      • wifi_ap_oui
      • wifi_connected_time_ms
      • wifi_disconnect_count
    • Add an option to upload logs by default when using MEMFAULT_HTTP_PERIODIC_UPLOAD, controlled with the Kconfig symbol MEMFAULT_HTTP_PERIODIC_UPLOAD_LOGS. This can also be controlled at runtime with the included API memfault_zephyr_port_http_periodic_upload_logs(bool enable)

    • Add a new Kconfig option, CONFIG_MEMFAULT_PLATFORM_TIME_SINCE_BOOT_CUSTOM, to provide a custom implementation of memfault_platform_get_time_since_boot_ms() in your application. The default is an implementation using k_uptime_get().

  • ESP-IDF:

    • Add a boot_time_ms metric, which tracks how long the system takes to boot the application. Can be disabled with CONFIG_MEMFAULT_METRICS_BOOT_TIME=n.

    • Add support for tracking metrics across ESP32 deep sleep cycles, enabled with the Kconfig CONFIG_MEMFAULT_DEEP_SLEEP_SUPPORT=y. To utilize this feature, these functions must be called by the application:

      • memfault_platform_deep_sleep_save_state() Must be called just prior to entering deep sleep (esp_deep_sleep_start())
      • memfault_platform_deep_sleep_restore_state() Must be called before memfault_platform_boot() in the application startup sequence.

      This feature includes built-in metrics for tracking deep sleep:

      • deep_sleep_time_ms - time spent in deep sleep
      • active_time_ms - time spent out of deep sleep
      • deep_sleep_wakeup_count - number of times the device woke up from deep sleep

      There are several Kconfig options for controlling the deep sleep feature, including controlling the heartbeat trigger and HTTP periodic upload. See menuconfig "Memfault deep sleep support" or ports/esp_idf/memfault/Kconfig for details.

    • Add new metrics tracking flash usage:

      • flash_spi_erase_bytes
      • flash_spi_write_bytes
      • flash_spi_total_size_bytes
    • Add capture of the ESP-IDF Task Watchdog stuck task list in coredumps. This is enabled by default if ESP-IDF Task Watchdog is enabled, and can be disabled with the Kconfig CONFIG_MEMFAULT_COREDUMP_CAPTURE_TASK_WATCHDOG=n.

🛠️ Changed

  • nRF Connect SDK:
    • CONFIG_MEMFAULT_REBOOT_REASON_GET_CUSTOM is now a choice in the new choice config CONFIG_MEMFAULT_REBOOT_REASON_GET. As a result, it will be the default choice if CONFIG_MEMFAULT_NRF_CONNECT_SDK=y instead of being imply-ed by CONFIG_MEMFAULT_NRF_CONNECT_SDK to work around the restriction that choice configs cannot be selected. As before, users can override this behavior with CONFIG_MEMFAULT_REBOOT_REASON_GET_CUSTOM=n.
  • ESP-IDF:
    • Rename CONFIG_MEMFAULT_TIME_SINCE_BOOT_CUSTOM -> CONFIG_MEMFAULT_PLATFORM_TIME_SINCE_BOOT_CUSTOM. A new ESP-IDF port choice Kconfig CONFIG_MEMFAULT_PLATFORM_TIME_SINCE_BOOT now supports 3 settings for platform time since boot:
      1. MEMFAULT_PLATFORM_TIME_SINCE_BOOT_ESP_TIMER default, suitable for most applications
      2. MEMFAULT_PLATFORM_TIME_SINCE_BOOT_DEEP_SLEEP applicable for deep-sleep applications
      3. MEMFAULT_PLATFORM_TIME_SINCE_BOOT_CUSTOM disable builtin implementations and implement a custom memfault_platform_get_time_since_boot_ms()
    • Renamed the spi_flash_chip_id metric (added in 1.23.0) to flash_spi_manufacturer_id.
    • Renamed the wifi_auth_mode metric to wifi_security_type to more accurately indicate the property being measured.
  • General:
    • Add the demo component to the default set of components added to an Eclipse project when using the eclipse_patch.py utility. The default components can be overridden with the --components argument.
    • Coredumps no longer include the device serial by default. The uploading serial (passed to the chunks endpoint) is instead used to identify the device associated with the coredump. Enabling #define MEMFAULT_EVENT_INCLUDE_DEVICE_SERIAL 1 in memfault_platform_config.h will include the device serial in coredumps.

🐛 Fixed

  • ESP-IDF:
    • Remove debug logging from memfault_platform_time_get_current(). When log timestamps are enabled, and debug level logs are enabled,

[1.24.0] - 2025-05-06

📈 Added

  • General:
    • Add a new API, memfault_log_get_unsent_count(), which returns the log count and size in bytes of unsent logs in the log buffer. This can be used inside memfault_log_handle_saved_callback() for example to drain the packetized logs when a certain watermark is reached.
  • ESP-IDF:
    • Add a Kconfig option, CONFIG_MEMFAULT_TIME_SINCE_BOOT_CUSTOM, which when set =n, enables using a custom implementation of memfault_platform_get_time_since_boot_ms().
    • Add 2 new metrics for tracking raw network bytes rx / tx. These metrics track network IO traffic on the default netif:
      • network_rx_bytes
      • network_tx_bytes These metrics are enabled by default, and can be disabled with CONFIG_MEMFAULT_METRICS_NETWORK_IO=n

🛠️ Changed

  • FreeRTOS (including ESP-IDF):
    • Rename the thread stack usage measurement variable included in coredumps when MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE is enabled from high_watermark to stack_unused. This change is to make the implementation more readable. The Memfault backend is updated to process both the old and new formats.
    • FreeRTOS-detected stack overflows (via vApplicationStackOverflowHook) will now be correctly tagged as Stack Overflow for the trace reason in Memfault, instead of Assert.

🐛 Fixed

  • Zephyr:
    • Fix a null dereference when calling memfault_coredump_storage_compute_size_required() (eg the shell command mflt coredump_size).
  • General:
    • For the emlib WDOG port implementation, ports/emlib/wdog_software_watchdog.c, enable the WDOG when in EM1 mode for series2 chips.
    • Added support for MEMFAULT_REBOOT_REASON_CLEAR in the ports/nrf5_sdk/resetreas_reboot_tracking.c implementation, by default enabled (like other ports). This permits opting out of the auto-clearing of the NRF_POWER->RESETREAS register, in case the user needs it after the function runs.
  • FreeRTOS (including ESP-IDF):
    • Fix incorrect computation of per-thread stack usage metrics (MEMFAULT_FREERTOS_COLLECT_THREAD_METRICS). Before this fix, the returned values had 2 errors:
      1. the value is the unused stack space, not the used stack space
      2. on platforms where sizeof(StackType_t) is not 1 byte, the numerator when computing percentage is incorrectly scaled down by sizeof(StackType_t), resulting in significant under-reporting of the stack usage percentage. Users can apply device and software version filtering on dashboards to filter out reports from devices that are running an old version of the SDK.
  • ESP-IDF:
    • Fix a potential issue that would cause the wrong implementation of memfault_platform_time_get_current() to be included in the final link, when CONFIG_MEMFAULT_SYSTEM_TIME=y is enabled (default).

🛠️ Changed

  • ESP-IDF:
    • CONFIG_MEMFAULT_ENABLE_REBOOT_DIAG_DUMP now defaults to y instead of n, to print out the reboot reason on boot. Disable it with CONFIG_MEMFAULT_ENABLE_REBOOT_DIAG_DUMP=n.

Android

v5.4.1 - July 22, 2025

🚀 New Features

  • Added new SDK Setting to upload collected Android Bugreports immediately outside of the periodic MAR batch task. Added new trace_id and extra_info fields to BugReportRequests.

🚧 Fixes

  • Fixed reporting of the new Wi-Fi metrics to visualize on the device timeline more appropriately. Fixed an error when recording null per second metrics.

📈 Improvements

  • Added some bort_cli.py comments.
  • Deleted unused code in Logger.kt.
  • Refactored Bugreport Intent logic.

v5.4.0 - July 1, 2025

🚀 New Features

  • Added 3 more logs-to-metrics parser types.
  • sum_matching captures 1 integer, and sums all captured values in the heartbeat.
  • distribution_minmeanmax captures 1 double, and generates a min/mean/max distribution for all captured values in the heartbeat.
  • string_property captures 1 string, and reports the latest value for that string.
  • Added tracking of the metered, temporarily unmetered, and roaming network capabilities in HRT.
  • Added a connectivity.metered.latest heartbeat metric for tracking metered network usage.
  • Added new disk wear and disk write Device Vital heartbeat metrics. eMMC/UFS lifetime estimation and version stats are collected from the Health HAL implementation, falling back to a hardcoded UFS or eMMC filepath if not implemented. Bytes written each heartbeat is collected by reading the sectors written value from /proc/diskstats for matching physical devices in /sys/block multiplied by the sector size to get a value in bytes.
  • disk_wear.<source>.lifetime_remaining_pct.latest captures the lifetime remaining estimation for type A flash in increments of 10%. The source can be one of: "mmc0", "624000.ufshc", or "HealthHAL".
  • disk_wear.<source>.lifetime_b_remaining_pct.latest captures the lifetime remaining estimation for type B flash in increments of 10%. The source can be one of: "mmc0", "624000.ufshc", or "HealthHAL".
  • disk_wear.pre_eol.latest captures the pre-EOL status of consumed reserved blocks, as "Normal", "Warning", or "Urgent".
  • disk_wear.version.latest captures the version as described from the vendor implementation of the Health HAL.
  • disk_wear.vdc.bytes_written captures the bytes written for that heartbeat.
  • Added per-app CPU usage metrics. The CPU usage percentage for each heartbeat is collected by parsing /proc/<pid>/stat/ for system and user time (stime + utime) divided by the total usage (sum of all fields from /proc/stat).
  • By default, the SDK will only create heartbeat metrics for a defined set of "interesting" processes. Please reach out to customer support to configure this set.
  • Otherwise, the top 10 processes exceeding the 50% CPU usage threshold will also be recorded. Please reach out to customer support to configure these thresholds.
  • Added new general connectivity metrics reported by NetworkCapabilities.
  • connectivity.roaming captures whether the connected network is roaming. This metric is only available in HRT, on API 28+.
  • connectivity.unmetered_temporarily captures whether the connected network was temporarily unmetered. This metric is only available in HRT, on API 30+.
  • connectivity.metered.latest captures whether the connected network is metered.
  • Added new basic Wi-Fi from the WifiInfo reported by NetworkCapabilities.
  • connectivity.wifi.frequency captures the Wi-Fi frequency of the associated link in MHz.
  • connectivity.wifi.link_speed_mbps captures the current link speed of the associated link with the highest RSSI in Mbps.
  • connectivity.wifi.security_type captures the security type of the current 802.11 network connection as a human-readable string.
  • connectivity.wifi.standard_version captures connection Wi-Fi standard as a human-readable string.
  • connectivity.wifi.lost_tx_packets_per_second captures the average rate of lost transmitted packets, in units of packets per second.
  • connectivity.wifi.retried_tx_packets_per_second captures the average rate of transmitted retry packets, in units of packets per second.
  • connectivity.wifi.successful_tx_packets_per_second captures the average rate of successfully transmitted unicast packets, in units of packets per second.
  • connectivity.wifi.successful_rx_packets_per_second captures the average rate of received unicast data packets, in units of packets per second.
  • Added support for Android 15.

📈 Improvements

  • Added parsers for more HRT batterystats data.
  • screen_doze captures whether the display is dozing in a low power state (link).
  • flashlight captures whether the flashlight was turned on.
  • bluetooth captures whether Bluetooth was enabled.
  • usb_data captures whether a USB connection was established (as reported by android.hardware.usb.action.USB_STATE).
  • cellular_high_tx_power captures whether the modem spent more of its time at the highest power level versus any other level.
  • nr_state captures the service level of the 5G network that's connected (link).
  • Updated comments on various batterystats fields. More improvements to come in clarifying the name and use of batterystats metrics!
  • Dumped any existing logs when continuous logging starts, to retain logs captured from before a reboot.
  • Added control over the maximum age of sampled data, to match the controls over unsampled data.
  • Added support for parsing the binary log buffers (events, security, stats) with continuous logs.
  • Modified dumpstate to write bugreports to /data/misc/MemfaultBugReports instead of to Bort's app dir. This is necessary for Android 15 support and CTS compliance to work around neverallow sepolicy rules. This also allowed deleting the custom bort_app_data_file app label for the Bort app.

🚧 Fixes

  • Added explicit Android System AID mappings for more consistent system UID attribution in tombstone and network stats parsing.
  • Added VPN and USB as explicitly defined network types using connectivity.network.
  • Fixed a bug in PhoneState where the unknown ??? state was reported as null.
  • Added exponential backoff for EAGAIN errors in continuous logs. Each write is fsync'd immediately after write to reduce the likelihood of data loss.
  • Added missing ignore.cil files for SDKs 32,

v5.3.0 - May 14, 2025

🚀 New Features

  • Introduced a new crash reporting mechanism that provides more detailed stack traces.
  • Added support for Android 15, ensuring compatibility with the latest Android features.

📈 Improvements

  • Enhanced the performance of the metrics collection system, reducing overhead by 15%.
  • Improved the accuracy of battery usage metrics by refining the data collection process.

🚧 Fixes

  • Fixed an issue where certain log entries were not being captured correctly.
  • Resolved a bug that caused the app to crash on startup for some users.

🏠 Internal

  • Updated internal libraries to the latest versions for improved stability and security.

Linux

[1.22.0] - 2025-06-12

This release adds an additional metric for tracking the health of eMMCs as well as a change to how built-in and collectd-based metrics interact to improve the user experience for teams using a combination of the two.

Added

  • The Lifetime Estimation B value for monitored eMMCs is now reported as diskstats/<disk>/lifetime_b_pct
  • A warning is now emitted when there is an issue parsing the output from memfault-device-info in memfault-core-handler. Previously, this would cause coredump collection to fail silently.
  • Built-in CPU, memory, and thermal metrics can now be disabled individually with the new metrics.system_metric_collection.{cpu,memory,thermal}.enable boolean config.
  • memfaultd's .cargo/config.toml now sets --compress-debug-sections to zlib and --force-unwind-tables to yes by default. These settings enable building efficient debug sections and binaries whose coredumps can be fully processed. We strongly recommend using them with any Rust programs you intend to monitor with Memfault.

Changed

  • collectd-based metrics that overlap with built-in metrics will now be selectively filtered out if both are enabled based on whether the overlapping built-in metric group itself is enabled. This allows for using a mix of collectd-based metrics and built-in metrics more easily.

Fixed

  • A bug in which the values for the MemfaultSdkMetric_os_name and MemfaultSdkMetric_os_version built-in Attributes were reversed.

[1.21.1] - 2025-05-21

This is a patch release that fixes an overflow issue with the recently added diskstats/<disk>/bytes_written metric.

Fixed

  • Fixed an issue with the diskstats/<disk>/bytes_written metric where it would overflow when the diskstats counter wrapped. This would cause very large readings to be sent. Whenever there is a potential overflow now the reading will be discarded.

[1.21.0] - 2025-05-08

This release adds several new metrics for tracking flash wear, as well as a new syslog log source. It also includes a config flag to enable legacy statsd metric names, and a data retention check to the upload process. For more information on the new metrics, check out the docs.

Added

  • Added metrics for tracking flash wear for mmc block devices like eMMC and SD cards
    • diskstats/<disk_name>/bytes_written
    • diskstats/<disk_name>/lifetime_pct
    • diskstats/<disk_name>/manufacturer_id
    • diskstats/<disk_name>/name
  • Added syslog as a logs source. This adds support for messages in both RFC5424 and RFC3164 format sent over UDP. This is enabled with the syslog feature which defaults to enabled.
  • Added a config flag to enable legacy statsd metric names. This will generate metrics that follow the format generated by the collectd statsd server. This is a helpful option for people looking to remove collectd as a dependency, but keep the legacy format for metric keys. The config value can be found in metrics>statsd_server>legacy_key_names.
  • Added time-based data filtering: When upgrading multiple devices' visibility levels, the Memfault backend now tells memfaultd to only upload data from the time of the change forward. This prevents unexpected large data uploads from device history.
  • Added interface/<interface>/total_bytes/{tx,rx} metrics. These allow us to track the total bytes sent over an interface over the course of an hour.

Changed

  • Added intelligent traffic distribution: Device initial connections now include a random delay (up to 25% of the configured upload interval). This prevents traffic spikes when many devices connect simultaneously, ensuring smoother backend performance.
  • ram and loop disks are no longer tracked with diskstats in auto mode. These are virtual disks, and provide little value when tracking metrics.

CLI

[1.6.0] - 2025-04-23

  • Add support for uploading ELF files without DWARF debug info.