February 2025
Improved Device Details Page
We have been making a number of usability improvements to the Device Details page including streamlining the amount of information visible when first viewing the page. Below is the view when first viewing the Device details page, highlighting software version and last seen.

Expanding this section now reveals more details on the status, config state and Release information.

This is the first in a series of planned improvements to the Device Details page designed to make it easier, and faster to get to the information that really matters. These changes should also make the Device Details more usable for team members who may be less familiar with Memfault, or do not require the level of information available in the Device timeline.
General
- Improved the Device Page featuring collapsible Device properties, streamlined navigation, and more intuitive filtering.
- Added new "Impacted Devices Summary" for Issue Cards, allowing to quickly identify and assess widespread issues affecting their Fleet.
- Added the ability to group Trace Count charts by Software Type and Hardware Version, enhancing data analysis capabilities.
- Various UX improvements for log search by replacing pagination with infinite scrolling, and giving access to metadata via expandable rows.
MCU
SDK version 1.20.0 was released. Some highlights:
Added
- Configuration option,
MEMFAULT_CRC16_BUILTIN
, that permits disabling the built-in crc16 implementation. The user should provide a compatible implementation ofmemfault_crc16_compute()
.
Improved
- Made
memfault_reboot_reason_get()
andmemfault_platform_metrics_timer_boot()
weakly defined in the platform templates to make removing them optional when first integrating. A Zephyr Kconfig setting,CONFIG_MEMFAULT_CRC16_BUILTIN
, is also provided to control this option. Thanks to @JordanYates for submitting this feature request in #84 ! - FreeRTOS
- Example
daily_heartbeat
session to the FreeRTOS QEMU example, which demonstrates how to send a daily heartbeat session to Memfault. - Optional field to the built-in FreeRTOS task stack usage
metrics,
.get_task_handle
, which allows the user to provide a custom function to get the task handle for a given thread name, instead of using the thread name to identify the thread.
- Example
- nRF Connect SDK:
- Kconfig symbol
CONFIG_MEMFAULT_FOTA_HTTP_FRAG_SIZE
to enable controlling the HTTP fragment size when using NCS >=2.9.9. Previously,CONFIG_DOWNLOAD_CLIENT_HTTP_FRAG_SIZE_1024=y
was required, but this option was deprecated in NCS 2.9.9. - Built-in support for the
thermal_cpu_c
(CPU temperature) metric for nRF5x chips (nRF52 and nRF54 app core supported). Use the Kconfig settingMEMFAULT_METRICS_CPU_TEMP
to disable the Metric.
- Kconfig symbol
- Zephyr
- Kconfig setting,
CONFIG_MEMFAULT_HTTP_CLIENT_TIMEOUT_MS
, which controls the timeout for the Memfault HTTP client, used both for chunk upload and OTA operations. The default timeout is 5 seconds. Connections with poor latency may require a longer timeout to avoid premature disconnection. Thanks to @chirambaht for submitting this in #86!
- Kconfig setting,
Changed
- Removed an extra underscore in the folder name when using
the
eclipse_patch.py
utility with a port name that is one folder deep (e.g.freertos
) - Renamed the
memfault_crc16_ccitt_compute()
function tomemfault_crc16_compute()
. The CRC-16 algorithm used is canonically namedCRC-16/XMODEM
, notCRC-16/CCITT
(akaCRC-16/KERMIT
). The file implementing that function is left asmemfault_crc16_ccitt.c
for backwards compatibility. Thanks to @JordanYates for reporting this Issue in #83! - Zephyr:
- Add a missing Kconfig dependency
to
MEMFAULT_METRICS_THREADS
,INIT_STACKS
. Also add missing dependencies to the Kconfig optionMEMFAULT_METRICS_DEFAULT_SET_ENABLE
:INIT_STACKS
THREAD_RUNTIME_STATS
THREAD_STACK_INFO
Thanks to @JordanYates for reporting this problem in #86 !
- Updated
the
memfault_zephyr_port_post_data() and memfault_zephyr_port_post_data_return_size()
functions to only open the TLS socket if there is data ready to send, which is otherwise wasteful, as the socket will be closed without sending any Memfault data. - Added an explicit module name,
memfault-firmware-sdk
, to the module manifest. This avoids issues when the SDK is registered in a Zephyr manifest under a directory name other thanmemfault-firmware-sdk
. Thanks to @JordanYates for reporting this Issue in #81! - Exclude unused stack space when capturing thread stacks, via
the
thread.stack_info.delta
property. This reduces the amount of coredump storage used to capture thread stacks, especially whenCONFIG_STACK_POINTER_RANDOM
orCONFIG_THREAD_LOCAL_STORAGE
is enabled. Thanks to @JordanYates for reporting this Issue in #81!
- Add a missing Kconfig dependency
to
- nRF Connect SDK:
- Removed use of child and parent image functionality in the nRF9160 sample app, and replace with sysbuild support. Child image support was deprecated in NCS 2.7.0 in favor of sysbuild.
- Use the downloader library instead of the download client library when using
NCS >= 2.9.9. The download_client was recently deprecated in favor of the
downloader. Download client support is now in
memfault_fota_legacy.c
.
Fixed
- Remove the
MEMFAULT_PACKED
attribute for theeMemfaultRebootReason
declaration; this compiler extension is not supported on IAR EWARM's compiler. Change the assembly shim to properly zero-extend the enum constant to avoid ABI issues when invoking the C fault handling code.: - On ESP-IDF, use the configuration
MEMFAULT_LOG_MAX_LINE_SAVE_LEN
to set the max length of a log line whenCONFIG_MEMFAULT_LOG_USE_VPRINTF_HOOK=y
, which is the default setting in ESP-IDF. Previously, the log line was arbitrarily truncated in the Memfault vprintf hook before being saved to the Memfault log buffer.
Android
SDK version v5.3.0 was released. Some highlights:
Added
- Per-component total storage metrics. The total storage used
(apps+cache+data+external) by an application can be recorded as
a
storage_<package>_bytes
metric. - Mechanism to group operational crashes by package. The
existing
operational_crashes
core Metric can be divided intooperational_crashes_<group>
metrics, based off of the package names of the crashes. - New DropBox count core metrics. The number of DropBox entries processed each
heartbeat, grouped by Issue type, is now recorded as
a
drop_box_<type>_count
metric. This makes identifying crashy devices even easier. - New
.mean_time_in_state
metric alongside.total_secs
when theTIME_TOTALS
aggregation is used withStateTracker
s. The existing.total_secs
metric is truncated between heartbeats, so it is only useful as a rough percentage comparison versus other states. The new.mean_time_in_state
metric can be used to track the absolute time spent in a state, even across heartbeats, so its value can be used as an absolute number.
Improved
- Returning a
Session
object whenstartSession
is called to improve the API usability. - Removed
SYSTEM_BOOT
from the default list of 'other' collected DropBox Entries. After some field testing, this DropBox Entry was not consistently collected and did not contain useful information.
Fixed
- Logs-to-metrics bug where it could not parse logcat tags with spaces.
- Harmless SELinux violation where
memfault_structured_app
could not access its own data directory. - Bug in
bort_cli.py
's validation-sdk-integration command where it wouldn't check the right location for system_ext sepolicy. - Continuous log bug where spaces in the tag would break parsing.
Linux
SDK version 1.18.0 was released. Some highlights:
Added
mar.mar_entry_max_count
, which allows for setting the max number of MAR entries in your tmp directory. This will default to 1000.logs.max_buffered_lines
, which sets the max number of lines that will be kept in memory before lines are dropped. Note that this is the same asfluent-bit.max_buffered_lines
, but will apply to both thefluent-bit
log source as well as thejournald
log source. If you have previously configuredfluent-bit.max_buffered_lines
that value will be used instead of the general config.kind
field in the MAR POST body. This is a field that is used by Memfault to differentiate the source of a MAR entry.- Added
logs.extra_attributes
option to configure extra log attributes to keep in the log file (similar tofluent-bit.extra_attributes
which still works but will be deprecated)
Changed
- The
LogCollector
has gone through a refactor to make the concurrency methods more consistent with the rest of the code base. - Moved recovery of logs in the
logs
directory into theLogCollector
thread. This prevents a case wherememfaultd
could be slow to start when there is a large number of MAR entries on disk, and depending on systemd configuration, could be considered crashed and restarted before booting completely.
Fixed
- Passing a
null
to disable a feature there was a case where the config merging logic could fail. This would result in a case where a subset of configs were not possible. Fixed this logic to allow these valid use cases.
CLI
We did not publish a new version of the memfault-cli in February 2025.