Fuchsia F31 release notes

Date: July 22, 2026

Version: F31

Audio

The following updates have been made for Audio:

  • PacketStream API and Device Registry Support Introduced the fuchsia.audio.device.PacketStream API with top-level support in the Audio Device Registry and virtual audio driver to handle bitrate ranges.
  • Removal of Deprecated ActivityReporter APIs Removed deprecated ActivityReporter FIDL methods and data structures from audio services to prepare for the removal of the fuchsia.media/AudioRenderUsage enum.
  • Audio Driver Inspect Metrics Enhancement Enhanced driver diagnostics by tracking buffer episodes and calculating outstanding buffer counts, while optimizing output by omitting non-essential fields.
  • audio-driver-ctl Utility Improvements Upgraded the audio-driver-ctl tool to support 64-bit devfs entries and automatically select the first available audio device if none is explicitly specified.
  • Unique ID FIDL Definitions Added unique_id.fidl structures based on Zircon audio headers and renamed the BUILTIN_SPEAKERS property to BUILTIN_SPEAKER for correctness.
  • FDomain Library Additions Introduced an FDomain version of the Rust audio library and ffx_optional_moniker logic.

Bluetooth

The following updates have been made for Bluetooth:

Build

The following updates have been made for Build:

  • Bazel Migration for FIDL and IDK Transitioned numerous FIDL libraries to Bazel and expanded IDK Bazel rules to support static libraries and multi-architecture prebuilts. Additionally, host tool target names were simplified by dropping the _tool suffix.
  • Bazel Host Test Rules Introduced new rules (host_test, host_go_test, host_rust_test, host_py_test) for defining Bazel host tests. These wrappers ensure compatibility with Fuchsia test runners like fx test, simplifying the migration of existing tests to the Bazel graph.
  • Compiler and Linker Settings Updates Enabled the call graph section by default for Clang-built ELF targets and enforced TLSDESC for Rust and shared libraries under LTO. Drivers now dynamically link to libc++, significantly reducing binary size.
  • Troubleshooting and Error Reporting Enhancements Streamlined CI failure messages by parsing Ninja error logs in fint and bundled fxtdump by default for trace file inspection. An experimental buildminder TUI tool was also added to interactively monitor build events.

Component Framework

The following updates have been made for Component Framework:

  • Realm Builder subpackage shard available in the SDK. The realm_builder_subpackage.shard.cml shard is now exported, allowing developers to use the realm builder subpackage in their configurations.
  • Boot resolver support for subpackages. The boot resolver now supports resolving subpackages, allowing components with the fuchsia-boot scheme to utilize subpackaged children.
  • System-wide configuration for Scudo environment variables. Component manager now supports a scudo_options field to inject runtime settings, granting developers finer control over per-device memory allocator behaviors.
  • Platform and SDK now both use numbered handle to route log sink. The log sink, in most cases, is now routed via the PA_LOG_SINK handle instead of the namespace, which should improve component startup latency.
  • Component developer tools and CLI enhancements. The route command was added to the on-device component binary, ffx component show now lists the source files used to build the component, a bug in deleting items in sub-directories was fixed in ffx component storage delete, and ffx component doctor was refactored to show the contents of dictionaries.
  • Structured config serialization in Rust. The fuchsia-component Rust crate now supports serializing structured configs to improve driver component testing.
  • Session Framework API migrations and debugging updates. Session components were soft-migrated to ShutdownWatcherRegister, and a new debugging shortcut was added to trigger a crash report and reboot via 5 sequential side-button presses.

Diagnostics

The following updates have been made for Diagnostics:

Display

The following updates have been made for Display:

Driver Framework

The following updates have been made for Driver Framework:

FIDL

The following updates have been made for FIDL:

Feedback

The following updates have been made for Feedback:

  • Improved report upload reliability and snapshot management. Upload timeouts were increased to 3 minutes for slower connections, and Feedback now optimizes storage by retaining only the oldest and newest hourly snapshots while automatically cleaning up invalid entries.
  • Added new reboot and shutdown reason classifications. Feedback now tracks SUSPENSION_FAILURE and BATTERY_DRAINED events, and systematically logs shutdown actions to preserve graceful shutdown and Factory Data Reset (FDR) statuses across cold boots.
  • Enhanced runtime and uptime persistence for reliability. System uptime is now periodically persisted and saved atomically during shutdown, providing a reliable fallback if the kernel's reboot log is lost and preventing data corruption during abrupt power losses.
  • Improved component’s ability to restart. Feedback restarts on a main process crash and reboot log information is persisted to /tmp for easy extraction after the first start.
  • Expanded configuration coverage and diagnostic annotations. Feedback introduces a build.compilation_mode annotation for clearer diagnostics, migrates remote_device_id_provider to structured configuration, channels updates for external checkers, and preserves a minimal boot ID timeline to troubleshoot short boots.

Firmware

The following updates have been made for Firmware:

  • System Image Hash Protection The isolated pkg-cache now protects main product blobs from garbage collection using system.base_merkle for the system image hash.
  • Gigaboot Fastboot TCP6 Improvements The gigaboot fastboot TCP6 server now dynamically selects the active NIC by MAC address to improve network reliability.
  • Recovery Arguments Parsing Fix Recovery argument parsing now ignores empty values and the initial "recovery" string to prevent false unknown argument errors.
  • GBL Prebuilts and NUC Updates Updated GBL prebuilts and aligned the NUC target with new APIs to successfully restore fastboot functionality.
  • Android Recovery Feature Alignment Added the --prompt_and_wipe_data recovery argument to display a boot failure menu with retry and factory reset options.

Graphics and GPU

The following updates have been made for Graphics and GPU:

I18n

The following updates have been made for I18n:

  • ICU build configuration streamlined. The Bazel ICU repository was updated to read the generated icu_build_config.gni file directly, removing the previous reliance on shell scripts.

IOT, Matter and Thread

The following updates have been made for IOT, Matter and Thread:

  • Expanded Thread Telemetry and Diagnostics in Inspect Expanded OpenThread diagnostic data in Inspect and telemetry.fidl to include deep network event histories, active routing state, and node observability metrics. This provides developers with extensive visibility into Thread network behavior for easier debugging Thread in-field issues.
  • Thread Multicast Forwarding Support Update the implementation to support multicast forwarding between Wi-Fi and Thread networks. This enables seamless multicast communication and device discovery across network boundaries.
  • Thread Prefix Delegation (PD) Stability Fix Fixed a crash in the Thread Prefix Delegation client caused by Wi-Fi interfaces toggling offline and online. This ensures stable prefix solicitation and proper session cleanup during network connectivity changes.
  • DNS Resolution Fix for IPv6 Link-Local RDNSS Resolved DNS query transmission failures by correctly appending scope IDs to upstream DNS server addresses when using IPv6 link-local RDNSS. This restores reliable DNS resolution for IPv6 link-local networks.
  • Thread 1.4 Upgrade with Network Diagnostics TLVs Enabled Upgraded the OpenThread stack to version 1.4 and enabled dynamic Network Diagnostics Vendor TLVs. This accurately populates the vendor software version to improve network diagnostics and telemetry logging.
  • mDNS Service Publication Reliability Improvements Eliminated race conditions in the meshcop mDNS publication system by introducing stateful republication with retry mechanisms. This guarantees dependable mDNS service propagation and discovery for Thread devices.
  • OpenThread update Updated OpenThread to the upstream commit from March 23, 2026.

Kernel

The following updates have been made for Kernel:

  • Restartable Sequences (RSEQ) support Added the zx_thread_set_rseq system call across x86, arm64, and riscv64 architectures. Preempted threads in an rseq critical section now correctly restart via the abort handler.
  • Critical deadline scheduler profiles Added a "critical" flag to deadline profiles, prioritizing them over normal deadline profiles during CPU oversubscription.

Netstack

The following updates have been made for Netstack:

Platform Drivers

The following updates have been made for Platform Drivers:

  • Input Device Telemetry Enhancement. Added device telemetry strings (manufacturer, product, serial) to fuchsia.input.report.DeviceDescriptor to improve input device identification capabilities.
  • USB Stack FIDL Migration and DFv2 Updates. Migrated the USB stack to DFv2 and replaced Banjo protocols with the new UsbFunction FIDL interface. This includes asynchronous teardowns for USB functions to eliminate reconfiguration race conditions.
  • USB Policy and Starnix Integration. Added a USB Policy component and Starnix module to track USB device states. This properly exposes USB status changes to Android applications via sysfs nodes.
  • Peripheral Driver Enhancements. Introduced a dw-spi driver with active power domain support and released a vreg-ctl CLI tool for advanced voltage regulator interactions. Additionally, enabled encrypted IO requests in SDHCI and optimized I2C core requests to run asynchronously.

Power Management

The following updates have been made for Power Management:

  • Introduced direct Lease API and ElementControl features: Added a direct LeaseToken API to open leases without an associated element, and an initial_lease_token for instant lease acquisition upon creation. Additionally, ElementControl.AddDependency now allows safely adding dependencies to existing elements without disrupting ongoing leases.
  • Streamlined power framework APIs and removed opportunistic dependencies: Removed opportunistic dependency mechanisms by standardizing all dependencies and eliminating the DependencyType enum. Migrated leasing APIs to Topology.Lease (retiring LeaseHelper and Lessor.Lease), replaced GetApplicationActivityLease with GetWakeLease, and introduced AcquireLongWakeLease.
  • Improved System Activity Governor (SAG) suspend transitions: SAG now uses the TerminalStateWatcher API to explicitly block suspensions during shutdown, mexec, or reboot processes. Suspend logic was also improved to drop pending blockers on channel close and request a CPU boost when suspending to improve resume performance.
  • Redesigned battery calculations and introduced CPU energy tracking: Overhauled battery calculations (spoofing, splicing, and Time-to-Full) for more accurate charging estimates, and renamed remaining_capacity_uah to remaining_charge_uah in FIDL. Added a CpuStatsRecorder in CpuManager to expose CPU load and energy usage metrics via Inspect.
  • Added Wake Lock monitoring and enhanced suspend driver APIs: Starnix now tracks active time for wake sources to provide observability into long-running wake locks. Additionally, introduced DeviceDidNotSuspendError to easily detect suspension failures, and required drivers to explicitly initialize their suspend behaviors instead of using defaults.
  • Improved battery UX and Diagnostics: Fixed abrupt UI battery level jumps when depleted devices begin charging, and added a CrashReporter feature for critically low battery events. Inspect now records both raw and processed battery levels to improve diagnostic capabilities.
  • System Activity Governor (SAG) Stability Improvements. Improved power management robustness by preventing suspension during shutdown and reboot transitions. SAG now automatically files crash reports for stuck suspend blockers or repeated suspend failures.

Rust

The following updates have been made for Rust:

Software Delivery

The following updates have been made for Software Delivery:

  • Storage-host migration completed: The Paver and storage dependencies have fully migrated to the modern storage-host architecture, enabling the complete removal of all legacy non-storage-host codepaths and tests.
  • Removed obsolete WriteVolumes interface: The WriteVolumes interface and associated PayloadStream protocol have been removed from the Paver API as they are no longer used on current devices.
  • Fuchsia URL types refactored for subpackages: Introduced specific boot URL types and separated package and component URLs to enable subpackage resolution support in the boot resolver.
  • Packageless updates use signed manifests: Packageless updates have migrated to use a signed protobuf manifest format instead of the previous legacy OTA manifest format.
  • Config capabilities migration for system updater: Migrated concurrent_package_resolves and concurrent_blob_fetches settings to config capabilities to simplify update configuration management.
  • Support for scoped IPv6 addresses in updater: The system updater was migrated from url::Url to http::Uri to properly parse and handle scoped IPv6 addresses.
  • System Image OTA Recovery fallback: The package cache now ensures OTAs can still proceed in recovery mode even if the system image is broken by only failing if it is explicitly required.
  • Sandboxed HTTP connections for Package Resolver: The package resolver TUF client and auto client now use fuchsia.net.http/Loader.Fetch for HTTP connections, providing better network isolation and sandboxing.
  • FDomain support added to update extensions: Introduced FDomain support across the package update FIDL extensions, mock installers, and server sockets.
  • Marked serve-archive as experimental: The ffx repository serve-archive command has been renamed to kebab-case and marked as experimental.
  • System Image Hash Protection The isolated pkg-cache now protects main product blobs from garbage collection using system.base_merkle for the system image hash.

Starnix

The following updates have been made for Starnix:

Storage

The following updates have been made for Storage:

Testing

The following updates have been made for Testing:

  • fx test Developer Experience Enhancements fxtest now automatically starts headless emulators for device tests if no device is connected, and adds --show-affected-tests and --run-affected-tests flags to easily test local changes. System logs are now included in test output. It also improves execution safety by failing early if --e2e is omitted for end-to-end tests, while expanding test enumeration support for Python, Mobly, and Bazel host tests.
  • Honeydew and Lacewing Architecture Changes The Mobly-based testing framework migrated to an asynchronous architecture, introducing AsyncFuchsiaBaseTest and requiring async functions for control flows. To prevent API misuse in end-to-end tests, the FuchsiaDevice abstract base class was renamed to DeviceKnobs, and test skips are now accurately reported as test failures.
  • Coverage & ResultDB Insight Updates Developers can now export raw JSON coverage data using --export-json in ffx coverage and --json-output-path in fx coverage. ResultDB visibility is also improved by elevating embedded failure reasons to the top-level test and populating DisplayName metadata, reducing the need for deep log analysis.
  • Performance & Test CLI Tooling New CLI tools streamline local workflows, introducing fx test-category to query directory metadata and test_filterer to dynamically build filtered task requests for presubmit retries. Additionally, the perfcompare script open-sourced its workflow helpers for downloading and extracting performance metrics.

Timekeeping

The following updates have been made for Timekeeping:

  • Added a Shutdown method to the PullSource FIDL protocol. This allows Timekeeper to request that a time source escrows its Inspect data before stopping.
  • Fixed a system-wide hang during Starnix HrTimerManager startup. Initialization failures are now logged and cleanly signaled, preventing the timer subsystem from indefinitely blocking commands.
  • Improved Starnix clock operation performance by approximately 3x. Starnix now uses memory-mapped clocks for standard UTC lookups to significantly reduce CPU usage.
  • Added support for periodic Real-Time Clock (RTC) updates and experimental initialization strategies. Timekeeper now maintains up-to-date RTC readings and can optionally accept suboptimal UTC values.
  • Fixed an issue with incorrect timeline initialization references. The RTC reading is now unconditionally refreshed to prevent using an outdated uptime reference during system startup.
  • Enabled Rust Next bindings for the clock implementation. This modernizes clock components and allows clockimpl to be used with the newest Rust bindings in vendor trees, alongside a migration of the Amlogic RTC driver to Rust.

Toolchain

The following updates have been made for Toolchain:

  • Fixed fx roll-compiler behavior: Updated the script to correctly include the linux-arm64 Clang toolchain, which was previously omitted.
  • Improved Bazel and Clang toolchain integration: Enhanced the Bazel fuchsia_clang_ext module to support CIPD ensure files and aligned Bazel Clang warnings with GN for consistency.
  • Switched to prebuilt Go toolchain for NS2: Updated the build process to strictly use the Fuchsia-enabled prebuilt Go toolchain provided by the roller.

Tools

The following updates have been made for Tools:

  • V2 Bisection Engine and Automation Promoted the experimental v2 bisection engine to default, introducing a --script flag for automated validation testing at each step. Also added support for passing PIBs and BIB sets directly into ffx product-bundle create.
  • Check-Licenses Tool V2 Overhaul Refactored the check-licenses CLI into a modular streaming pipeline with isolated subcommands. This overhaul significantly improves memory usage, concurrency safety, and maintainability while adding a new metrics framework.

fx

ffx

  • FFX and Fuchsia Controller FDomain Migration Ported numerous ffx plugins and fuchsia-controller to use FDomain as the underlying transport. This migration improves internal architecture and stability across core tools.
  • Emulator (ffx emu) Improvements Emulator processes now run as daemonized sessions to survive terminal closures. Additionally, x64 inputs enforce VirtIO, arm64 QEMU boots securely, and ffx emu show supports a new --instance flag.
  • FFX Driver Diagnostics and Topology Added ffx driver doctor to diagnose binding issues and split verbose driver lists into dedicated show commands. Driver tools now expose the full topological path and include commands for managing composite devices.
  • FFX Component and Repository Improvements Running ffx component run now automatically starts an ephemeral package server if needed. Added ffx repository serve-archive to easily serve package archives (.far) via a foreground server.
  • Enhanced ffx log output formatting and stability. The command now honors the log_cmd.color configuration, disables colors in strict mode, and cleanly terminates on closed output streams.
  • FFX Plugin Short Names FFX now supports abbreviated subcommand names (e.g., ffx t l for ffx target list, ffx c s for ffx component show). This drastically improves CLI ergonomics and overall developer speed.
  • Added syslog capture support for fx test and ffx test. A new --capture-syslog flag captures system logs during test execution (enabled by default for fx test).

zxdb

Tracing

The following updates have been made for Tracing:

  • Trace data transfer compression Added zstd compression support during trace data transfers, improving average download speeds by 2.6x and reducing transferred data size by 5.3x.
  • Manual buffer flush API Added the RequestBufferFlush method to the TraceController FIDL and new flushing APIs to NEXT to allow clients to stream smaller chunks of data more consistently.
  • Trace Provider V2 Protocol Introduced the Provider V2 protocol and a registration API for negotiating shared memory versions, allowing trace sessions to support V1 and V2 providers simultaneously.
  • Abort running trace sessions Added an --abort option to ffx trace stop to forcefully terminate a running session without saving results, ensuring clean internal teardown.
  • Tracefs performance improvements Improved tracefs performance by striping events across all CPUs, significantly improving average read and write times.
  • Normalized CPU usage metrics Added parsing and structures to calculate normalized CPU utilization by tracking Dynamic Voltage and Frequency Scaling (DVFS) processing rates in trace performance metrics.
  • LargeBlob parsing fix Fixed an issue in the FXT parser where LargeBlob 32-bit size fields were erroneously truncated, which previously caused large profiler stack dumps to fail.
  • Trace session lifecycle and termination reliability Improved trace session termination reliability by preventing async loop shutdown races and dropping state consistently on disconnections to avoid hanging sessions.
  • Category tracking enhancements Enabled the kernel:power category by default to track variable CPU speeds, and fixed event counting and false positive warnings for starnix categories.
  • Memory pressure tracing Enabled tracing for the pressure_signaler component to correctly emit the memory_pressure counter.
  • On-boot Starnix trace connections Implemented retry logic for the Perfetto consumer thread to handle cases where a trace session is started before Starnix has fully booted.

UI

The following updates have been made for UI:

Video

The following updates have been made for Video:

  • Opened CodecFactory and StreamProcessor protocols. Marked protocols as open and added handle_unknown_method support to ensure backward compatibility.
  • Removed default values from TimelineFunction FIDL. Removed @allow_deprecated_struct_defaults from fuchsia.media.TimelineFunction to support Python FIDL bindings and media end-to-end tests.
  • Media session support for minimal configurations. Made fuchsia.media.UsageReporter optional so media_session can function in minimal configurations without requiring fullstack audio.

WLAN and Connectivity

The following updates have been made for WLAN and Connectivity: