Skip to main content

Linux SDK 0.2.0

Memfault extends its features on embedded Linux toward basic fleet operations. You can now measure basic fleet-wide health metrics by tracking reboots and their cause at scale. Similar to Memfault’s MCU and Android SDKs, there is now a dedicated Memfault Linux SDK 0.2.0 with source code including examples. The SDK repository comes with Docker images including QEMU support to simplify the first steps.

Documentation, Repository, and Project Wizard for Linux

As part of the SDK, a new on-device agent memfaultd orchestrates the configuration of related components such as SWUpdate for OTA. It will act as a minimal yet central component in future releases for features such as metrics and crash reporting.

There is also a new Getting Started section that guides users through the setup with Yocto, and the reference documentation covers more details.

Normalized Charts

Memfault’s charts can now be normalized to convert absolute values such as “number of incidents”, sums, and counts to corresponding relative values “per 1,000 devices". This helps in understanding real trends when you are looking at values over time or when comparing values between populations of different sizes.


This feature also works with custom metric charts for any custom metric. It is particularly helpful to measure the success of an ongoing OTA update by comparing devices from large production cohort “Default” against those from a smaller test cohort “Beta”. Chart normalization is also generally useful when the population size changes over time (e.g. new devices being activated continuously).

Notification Targets

Memfault improved its notification system and how notifications will be sent on Alerts. For each individual Alert, you can now decide which team members, external systems, or groups thereof should receive an email. All members of @team-maintenance may want to receive notifications about devices with an abnormal battery discharge rate while a spike in connectivity issues on the “Beta” cohort may only be relevant in the #beta-release Slack channel.


At Settings → Notifications, there are extensive options to customize the @userhandle for any team member to connect Memfault to dedicated Slack channels or any other external system (e.g. PagerDuty, Opsgenie) by registering external email addresses. Any combination of these User Handles and External Targets can be added to a Notification Group and used to control how to notify per Alert.

Memfault OTA for Embedded Linux

Memfault’s over-the-air update service is now available on Embedded Linux with SWUpdate via the hawkBit DDI. This makes all Memfault OTA management and hosting features such as cohorts, staged rollouts, full vs. delta releases, and a scalable global CDN available to Linux devices that utilize one of the most popular update agents. Memfault also added support for forced (non-interactive) updates – invaluable for delivering security updates to embedded IoT devices.

Memfault ❤️ Linux.png

To communicate with SWUpdate clients, Memfault acts as a hawkBit update server. It implements the Direct Device Integration API enabling other on-device agents such as RAUC (via hawkBit client) to deliver and install software remotely as well.

More Documentation

Memfault’s documentation at received a new landing page and various other additions.

Updated Docs

The updated landing page outlines content across MCU, Android, and Linux. It also links to additional learning resources such as video content and source code examples. Other improvements include the new page Introduction to Memfault, more information on Memfault’s Linux Support, and many smaller new sections such as a comparison between Android Bug Reports and Caliper.

Improvements on Charts

Memfault surfaces relevant insights about your fleet via charts. They receive updates regularly to be more comprehensive and useful.

Improved Charts

The dashboard chart “Active Devices” was redesigned to be a bar chart to communicate its underlying data more clearly: “Devices that communicated with Memfault in a given time period”. Tooltips on several charts better highlight the numerical values their lines and bars represent. The chart “Reboot Reasons” also allows for drill-down on any day by clicking on the respective labels.

Memfault organizes your data around the concept of devices. An investigative search for matching devices is a key activity when analyzing data around device attributes and time-series metrics. Memfault’s device search also acts as a hub when clicking on details on charts, OTA management, or as part of crash analysis. It allows you to precisely describe a population of devices before performing follow-up tasks such as assigning them to a specific Cohort or describing a new Device Set.


We made significant improvements to the device search! Most fields now accept multiple values (”OR”) and can be repeated where applicable (”AND”). You can search for device attributes and time-series data at the same time and it is even possible to search for historical data across different time ranges at once.


When combined, you can now conveniently describe (and store as Device Set) populations such as

  • “Devices on v1.2 that were charged >90% earlier this week but rebooted due to low power yesterday” – to validate presumed bug fixes via operational data, or
  • “Devices with attributes was_reworked: true, shipment_state: "back to us" and assignee: "John"” – to use custom device attributes for inventory management

Android SDK Bort 4.0

Memfault’s AOSP SDK “Bort” received a major update 4.0 with many improvements such as additional support for Android 12 and multi-user compatibility.

We added support for Custom Metrics so that devices can report product-specific numerical values, strings, and state transitions on regular intervals. Together with a growing set of built-in Metrics, this leads to a powerful combination of per-device debugging (e.g. correlation of CPU activity and battery voltage) and fleet-wide insights (e.g. “how many devices exceed 80% of their storage” or “What is the average battery discharge rate?”). The reported values contribute to the recently introduced Time-Series Metrics and Device Attributes.

Visualized Metrics per Device on its Timeline

Another rather advanced feature enables devices without direct Internet connection to report crashes and metrics to Memfault. Data is packaged as .mar (Memfault Archive) files and vendors may upload them at a later time or upon request (e.g. downloaded periodically via USB or in a local network by an auxiliary device). This allows vendors to use Memfault in scenarios with strict security requirements.

Dashboard changes to charts

Memfault’s Dashboard provides an overview of your fleet at a glance. We have updated the charts “Active Devices” (more sources used as signal) and “Software Versions” (only active devices considered) to better compare apples to apples.

Dashboard showing Acive Devices and Version distribution

The visible time range for “Software Versions” can now be changed from “2 months” all the way down to just “24 hours”. Since the same chart is now being used on the Cohort details page, it not only allows you to see long-term trends, but also acts as timely signal to observe the effect of an ongoing OTA software rollout.

The charts “Seen Devices” and “Received Events” have been removed.

Improved OTA with Version Matrix and Delta Releases

Memfault steps up OTA observability and release management. Use the new Version Matrix (Fleet → Cohorts → Cohort Details) to learn about the version distribution of your devices (rows) and which version your devices will be updated to via OTA (columns).

Version Matrix as part of Cohort details page

Changes to your software rollout (including percentages for staged rollouts) are reflected in the matrix immediately. This is especially helpful when using the newly introduced Delta Releases that describe a path between specific versions. Every software version, OTA release, and number in the matrix is clickable to get to more details if needed.

Creating a new Delta Release

Even complex and unusual scenarios are visible at a glance: devices with no compatible OTA payload, devices with a higher version than the cohort’s target release, must-pass-through releases and their effect, as well as many other edge cases are represented with data that is always live.

Version Matrix with two Delta Releases, one of them staged

The Version Matrix gives you confidence both while preparing your software rollout and during the ongoing rollout, and it still helps you understand the version distribution of your fleet when no further updates are planned.

Device Sets

You can now observe the development of your device fleet even better via fully customizable Device Sets (Fleet→Device Sets). Based on your project-specific Device Attributes and Time-Series Metrics each set describes devices that match unique criteria such as “devices that exceeded 40MB of daily network traffic” or “devices in the UK”.

You can create a Device Set from any existing device search and use them to track key performance indicators over time.

Various Charts based on Device Sets

Issue Charts

The new chart type Issue Chart complements the custom Metrics Chart (Dashboards→Metrics) and plots the number of occurrences of a specific group of issues over time. When combined with the recently introduced Chart Comparison Mode, Issue Charts allow for sophisticated tracking of ongoing software updates to answer the relevant question “does my software update fix the bugs it claims to fix?”

Dialog to create a new Issue Chart

Comparison Mode for Metric Charts

Since the introduction of Custom Metrics, Memfault provided various ways to define charts for plotting fleet-wide aggregations (sum, count, min, max, mean). These charts are often used to visualize trends over time (e.g. "hours between recharge") or to detect anomalies (e.g. "attempt until successful connect") for a subset of the fleet. The controls in the top-right corner allow for ad-hoc filtering by cohort and/or software version.

Chart Comparison Mode for Metrics

With the advent of the Chart Comparison Mode, users can now apply up to 4 such filters simultaneously to plot the resulting data series side-by-side inside each custom chart.

Use this feature to visually compare your beta cohort against the production fleet or to see at a glance if there are any regressions for key metrics between the last software versions.

Linked Devices

Sometimes, products span across multiple devices: Each pair of wireless earplugs has a left and right version, for each smart home installation there may be multiple components in a network, or some related device information lives outside of Memfault, and your workflow benefits from quick navigation to another software system.

Dynamic links for quick navigation between related devices

Memfault's Linked Devices provide convenient navigation in these scenarios. It builds these connections by looking at Device Attributes that can be edited in the UI, updated via API, or sent from devices at any time.

MCU Heap Visualization

Memfault can now track and visualize heap allocations with any coredump on a growing number of MCU Architectures starting with ARM Cortex-M, nRF Connect SDK, ESP32 ESP-IDF, ESP8266, and Dialog DA1469x.

Interactive Heap Visualization for MCU

This optional debugging feature tags all heap allocations with their respective size, address, and location of code that allocated it. Use it to understand memory distribution, heap fragmentation, or to find memory leaks in an out-of-memory situation in the field.

Managing Rate Limits

Memfault's frontend is now more upfront with the visualization of quotas and rate limits that may affect large projects.

Quota page on project settings

When managing Timeseries Metrics and Device Attributes, Memfault informs about the number of remaining metrics for fleet-wide analytics. The dedicated page at Settings→Quotas presents an overview.

Compact Logs in Memfault's Firmware SDK

Memfault's Firmware SDK now includes support for what we are calling "Compact Logs". It is similar to Zephyr's dictionary-based-logging and a few other implementations in other RTOS's, but we think we've hit the perfect balance of performance, features, ease-of-use, and size compression.

Let's walk through a quick example of what compact logs are. Here is a log line that a user of the Memfault SDK could write:

MEMFAULT_TRACE_EVENT_WITH_LOG("QSPI Flash Erase Failure: error code: 0x%x", 0x5);

With a generic formatted string implementation such as printf, we would need to include the entire string contents in our log buffer or storage. In total, this requires 41 bytes.

00000000: 5153 5049 2046 6c61 7368 2045 7261 7365  QSPI Flash Erase
00000010: 2046 6169 6c75 7265 3a20 6572 726f 7220 Failure: error
00000020: 636f 6465 3a20 3078 35 code: 0x5

Once developers run out of firmware code space, a common pattern is to start shortening log lines or removing them entirely. We believe this is a bad practice! We should be able to keep our useful log lines and make the messages as long as necessary!

This is why we created compact logs. With compact logs, every log "string" is placed in a special section in the ELF file and we just need to reference each log line with an index, or ID.

For a compact log, we just need to encode an integer ID for the string portion and the arguments to be serialized. In this example, this information requires just 5 bytes.

00000000: 8218 8805                                ....

In this example, we can reduce the storage occupied by 88%! For a firmware that contains 100-1000 log lines, these savings are dramatic.

Check out our documentation for more information on how to enable compact logs in your firmware.

Along with compact logs, we've been busy adding more ways to filter and slice the data in our application and building up some exciting features related to Custom Events and State. More news to come next month.