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
callbackmgmt_event
parameter. Thanks to @rlubos for providing the fix in #91 🎉!
- Apply a compatibility fix for upcoming Zephyr 4.2.0, fixing the size of the
[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 existingMEMFAULT_DISABLE_WARNING(warning)
macro. This macro is only implemented for GCC + Clang.
- Add a
- 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
. Version1.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 optionCONFIG_MEMFAULT_METRICS_HEARTBEAT_TIMER_ENABLE
.
- The heartbeat metrics timer is now enabled by default when
- nRF-Connect SDK:
- Replace use of
LTE_LC_ON_CFUN
withNRF_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.
- Replace use of
[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 byimply CONFIG_HWINFO
in the overarchingMEMFAULT
symbol. This default enables better reboot reasons out-of-the-box via Zephyr'shwinfo
module. The fall-back option isCONFIG_MEMFAULT_REBOOT_REASON_GET_BASIC
, which provides a simple implementation. As before, users can override the default implementations withCONFIG_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 withCONFIG_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 withCONFIG_MEMFAULT_METRICS_BOOT_TIME=n
. -
Add new builtin Wi-Fi metrics, enabled by default when
CONFIG_WIFI=y
, and can be disabled withCONFIG_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 symbolMEMFAULT_HTTP_PERIODIC_UPLOAD_LOGS
. This can also be controlled at runtime with the included APImemfault_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 ofmemfault_platform_get_time_since_boot_ms()
in your application. The default is an implementation usingk_uptime_get()
.
-
-
ESP-IDF:
-
Add a
boot_time_ms
metric, which tracks how long the system takes to boot the application. Can be disabled withCONFIG_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 beforememfault_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 sleepactive_time_ms
- time spent out of deep sleepdeep_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" orports/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 configCONFIG_MEMFAULT_REBOOT_REASON_GET
. As a result, it will be the default choice ifCONFIG_MEMFAULT_NRF_CONNECT_SDK=y
instead of beingimply
-ed byCONFIG_MEMFAULT_NRF_CONNECT_SDK
to work around the restriction that choice configs cannot be selected. As before, users can override this behavior withCONFIG_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 KconfigCONFIG_MEMFAULT_PLATFORM_TIME_SINCE_BOOT
now supports 3 settings for platform time since boot:MEMFAULT_PLATFORM_TIME_SINCE_BOOT_ESP_TIMER
default, suitable for most applicationsMEMFAULT_PLATFORM_TIME_SINCE_BOOT_DEEP_SLEEP
applicable for deep-sleep applicationsMEMFAULT_PLATFORM_TIME_SINCE_BOOT_CUSTOM
disable builtin implementations and implement a custommemfault_platform_get_time_since_boot_ms()
- Renamed the
spi_flash_chip_id
metric (added in1.23.0
) toflash_spi_manufacturer_id
. - Renamed the
wifi_auth_mode
metric towifi_security_type
to more accurately indicate the property being measured.
- Rename
- General:
- Add the
demo
component to the default set of components added to an Eclipse project when using theeclipse_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
inmemfault_platform_config.h
will include the device serial in coredumps.
- Add the
🐛 Fixed
- ESP-IDF:
- Remove debug logging from
memfault_platform_time_get_current()
. When log timestamps are enabled, and debug level logs are enabled,
- Remove debug logging from
[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 insidememfault_log_handle_saved_callback()
for example to drain the packetized logs when a certain watermark is reached.
- Add a new API,
- ESP-IDF:
- Add a Kconfig option,
CONFIG_MEMFAULT_TIME_SINCE_BOOT_CUSTOM
, which when set=n
, enables using a custom implementation ofmemfault_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 withCONFIG_MEMFAULT_METRICS_NETWORK_IO=n
- Add a Kconfig option,
🛠️ Changed
- FreeRTOS (including ESP-IDF):
- Rename the thread stack usage measurement variable included in coredumps
when
MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE
is enabled fromhigh_watermark
tostack_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 asStack Overflow
for the trace reason in Memfault, instead ofAssert
.
- Rename the thread stack usage measurement variable included in coredumps
when
🐛 Fixed
- Zephyr:
- Fix a null dereference when calling
memfault_coredump_storage_compute_size_required()
(eg the shell commandmflt coredump_size
).
- Fix a null dereference when calling
- 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 theports/nrf5_sdk/resetreas_reboot_tracking.c
implementation, by default enabled (like other ports). This permits opting out of the auto-clearing of theNRF_POWER->RESETREAS
register, in case the user needs it after the function runs.
- For the emlib WDOG port implementation,
- 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:- the value is the unused stack space, not the used stack space
- on platforms where
sizeof(StackType_t)
is not 1 byte, the numerator when computing percentage is incorrectly scaled down bysizeof(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.
- Fix incorrect computation of per-thread stack usage metrics
(
- 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, whenCONFIG_MEMFAULT_SYSTEM_TIME=y
is enabled (default).
- Fix a potential issue that would cause the wrong implementation of
🛠️ Changed
- ESP-IDF:
CONFIG_MEMFAULT_ENABLE_REBOOT_DIAG_DUMP
now defaults toy
instead ofn
, to print out the reboot reason on boot. Disable it withCONFIG_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
andextra_info
fields toBugReportRequest
s.
🚧 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 byandroid.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 asnull
. - 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
inmemfault-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
tozlib
and--force-unwind-tables
toyes
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
andMemfaultSdkMetric_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 removecollectd
as a dependency, but keep the legacy format for metric keys. The config value can be found inmetrics
>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
andloop
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.