Fuchsia F29 release notes

Date: January 7, 2026

Version: F29

Audio

The following platform updates have been made for audio in Smart Displays:

  • Expanded AudioCore and Driver Inspect observability. Inspect data now includes RoleManager errors for better diagnostics of past failures, tracks min/max/sum/overrun/underrun metrics per ring buffer, and retains recent task records.

The following platform updates have been made for other products:

  • Enhanced Audio Device Registry (ADR) performance and reliability. The ADR thread now utilizes a scheduler profile to improve stream establishment performance under load. Additionally, ADR now supports topologies without ring buffers, retries on transient ring buffer creation failures, and correctly accounts for driver overallocation in ring buffer memory reporting.

  • Improved ffx audio tooling capabilities. The ffx audio device play command now uses scheduler profiles and larger ring buffers to enable glitch-free playback validation. The tool also now displays the ADR token_id in device lists and includes a fix for calculation underflows.

  • Updated Signal Processing topology rules. The SDK now allows DAI_INTERCONNECT elements to be self-referential within a topology, enabling support for standalone DAI configurations.

Bluetooth

The following updates have been made for Bluetooth:

  • Expanded Hands-Free Profile (HFP) features and stability. Added support for the "Query Current Calls" (AT+CLCC) procedure and handling for HF-initiated call transfers. Improved interoperability by parsing non-standard iOS response fields and enhanced connection stability with SCO setup retries, disconnection tracking fixes, and race condition handling during codec updates.

  • Implemented A2DP offload support and assembly configuration. Enabled A2DP hardware offload capabilities (preferring 44.1kHz), allowing audio encoding to be handled by the controller or audio subsystem. Migrated A2DP configuration to platform assembly, added capabilities to override vendor versions for specific products, and cleaned up source builders.

  • Added support for LE Audio Isochronous (ISO) channels. Updated the UART driver to support ISO data channels and implemented Core Host support for Connected Isochronous Groups (CIG) and Streams (CIS). This lays the foundation for Low Energy Audio features.

  • Introduced Periodic Advertising Synchronization support. Added Host-side support for synchronizing to periodic advertising trains, including new FIDL interfaces (SyncToPeriodicAdvertising) and internal management classes to handle synchronization requests and scanning.

  • Enhanced Bluetooth command-line tools. Added ffx bluetooth controller list and show commands for better device management. Updated bt-le-central with support for Volume Control Service (VCS) and Published Audio Capabilities Service (PACS), and introduced a new bt-broadcast-assistant tool for controlling LE Audio broadcasts.

  • Updated Broadcom firmware and initialization logic. Upgraded SYN4381 firmware to version 1195.1225. Added safety checks to prevent driver initialization if the MAC address cannot be read, and fixed Android vendor extension advertising behavior.

  • Refined Fast Pair configuration routing. Switched to using a dedicated configuration capability for the Fast Pair Provider to determine availability, replacing package resolution logic to reduce errors and simplify system routing.

  • Expanded Pandora test interface capabilities. Added numerous affordances to the Pandora test framework including GATT service registration, pairing event queueing, discovery control, connectability settings, and improved advertising timeout handling.

Build

The following updates have been made for Build:

  • Experimental Bazel support in fx build. An experimental feature was added to fx build to invoke Bazel directly for host targets. This introduces three build modes—GN (default), Bazel, and Fint—and adds argument validation and invocation logging.

  • Removal of macOS host build support. Support for building Fuchsia with macOS as the host OS has been removed from the build rules, IDK, and configuration files.

  • New root location for build logs. All build logs are now stored in out/.build_logs to improve organization and debugging. A new command, fx build-logs, was added to manage this directory structure.

  • Build performance optimizations. Implemented xattr hashing for RBE downloads and local actions to skip unnecessary re-hashing, and added edge weight hints to Ninja to optimize the scheduling of long-running actions.

  • On-demand GSYM symbol generation. Updated export_last_build_debug_symbols to support generating GSYM symbols on demand using the --with-gsym-symbols flag.

  • Automatic build resource profiling. The build system now collects CPU usage and network data at a 1Hz interval by default to assist in debugging slow build performance.

  • Enforced header structure for sdk_shared_library. Targets defined as sdk_shared_library are now required to place public headers in a strictly defined directory structure (typically under include/).

Cobalt

The following updates have been made for Cobalt:

  • Java metric ID type update The Java source generator now declares uint32 metric IDs as int instead of long. This aligns with the Cobalt logging API and removes the need for explicit casts in client code.

  • Event Logger validation update The Event Logger now accepts histograms containing zero counts for impossible buckets. This prevents the rejection of dense vectors generated by Samplers where impossible buckets are included with a zero count.

Component Framework

The following updates have been made for Component Framework:

  • Refactored Realm Builder's dictionary API to use DictionaryRef. This unifies the syntax for routing to and from dictionaries, aligning operations with CML patterns and improving intuitiveness.

  • Expanded Storage capabilities in Realm Builder and the SDK. The StorageAdmin protocol was graduated to fuchsia.component for SDK access, and a new AddStorage function was added to Realm Builder to allow programmatic storage routing and provisioning.

  • Enhanced ffx component explore tool discovery. The tool now utilizes the fuchsia.dash.launcher-tool-urls facet to automatically load component-specific tools into the PATH during exploration.

  • Improved cmc error reporting. The compiler now suppresses internal backtraces on failure and includes source file paths in merged outputs to facilitate easier debugging.

  • Fixed race conditions in fuchsia.component/Controller.Destroy. The operation now ensures the destruction task owns the responder, preventing premature success responses before the component is fully destroyed.

  • Improved service connection reliability. The service broker now handles transient instances using wait_for_first_instance and correctly transitions service directories to idle states.

  • Added rust bindings for fidl_next_services. Added functions to fuchsia_component for connecting to and serving services when using the fuchsia_next bindings.

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:

  • Async read cancellation logic in Rust drivers (fdf) was hardened against race conditions. The implementation now correctly handles read cancellations on both synchronized and unsynchronized dispatchers and ensures channels defer closing while an await is registered, preventing use-after-free or race scenarios.

  • Enhanced ffx driver node graph Updated ffx driver node graph to support filtering, service route visualization, driver host grouping, and interactive HTML graph generation.

  • Dictionary support in NodeAddArgs Added offers_dictionary to NodeAddArgs, enabling drivers to offer services to child nodes via a dictionary rather than the parent's outgoing directory.

  • Safe async cancellation in Rust bindings Implemented safe async cancellation for channel waits on dispatchers to prevent race conditions when dropping channels with pending callbacks.

  • Custom VMAR support in DriverStartArgs Added vmar to DriverStartArgs to allow passing non-root VMARs, and added a VMAR accessor to the driver component.

  • WaitForDriver method in node controller Added WaitForDriver to the node controller, allowing clients to wait for a driver to start on a node or composite parent.

  • Driver transport support in Rust bindings Implemented token transfer protocol and connection logic for the driver transport in Rust bindings.

  • Driver Manager updated to use transient collections. The interaction with the Component Framework has been refactored to use transient collections, alongside property storage optimizations to reduce memory usage.

  • MetadataServer library refactor Refactored MetadataServer to simplify initialization, deprecate older setters, support conditional metadata serving, and accept service directories for testing.

  • Driver logging improvements Added std::format-based logging APIs for driver manager, enabled PID printing in ffx driver (non-TTY), and improved sys_driver FIDL error logging.

  • Driver Runtime and Transport updates Added synchronous token transfer receivers, enforced dispatcher shutdown callbacks, optimized stall polling, and enabled early handle transfers in SDK C++ bindings.

  • Removal of deprecated APIs (pre-level 26) Removed APIs deprecated in SDK versions prior to 26 from audio driver interfaces and general driver SDKs.

FIDL

The following updates have been made for FIDL:

  • Introduced Bazel build rules for FIDL. Added the fidl_library, fidl_ir, and fidl_summary macros to the Bazel build system, enabling the definition of FIDL libraries, IR generation, and API summary creation directly within Bazel projects.

  • Enhanced Rust bindings ergonomics and features. Improved developer ergonomics by deriving default transports from protocol definitions, introducing Respond and RespondErr traits for simplified response handling, enabling WireVector encoding for arrays, and adding IntoNatural for better type conversion.

  • Improved Rust bindings validation and correctness. Strengthened runtime validation to ensure wire format correctness, including checks for struct padding, string and vector limits, and envelope flags. Also improved handling of unknown interactions and empty structs.

  • Specialized handle subtypes in Rust bindings. Updated Rust bindings to generate specific handle subtypes (e.g., zx::Channel) rather than generic zx::Handle types, improving compile-time type safety for FIDL protocols.

  • Refactored Rust bindings async and transport handling. Overhauled async infrastructure by introducing TwoWayFuture for splittable futures, streamlining connection closure handling, renaming internal client/server concepts to dispatchers, and adding executor traits for endpoint spawning.

  • C++ bindings cleanup and feature detection. Consolidated C++ feature detection into lib/fidl/cpp/features.h and removed reliance on std::aligned_storage to align with modern C++ standards.

  • Major ergonomic and type safety improvements were applied to FIDL Rust bindings. The IntoNatural trait was introduced for clearer type conversions, and response ergonomics were improved via Respond and RespondErr traits. Fuchsia handle subtypes are now handled more specifically. Senders and dispatchers were renamed and reorganized, and the Encodable and EncodeRef traits were removed, finalizing a move to a new encoding approach.

Feedback

The following updates have been made for Feedback:

  • Added tracking for shutdown actions. The LastRebootInfoProvider protocol now includes an action field to distinguish specific shutdown types (e.g., 'REBOOT' vs. 'POWEROFF'), supported by a migration to JSON storage and ShutdownWatcher persistence.
  • Optimized memory usage. Reduced memory footprint by shortening the lifespan of JSON serialization objects and forcibly purging Scudo memory when log streaming stops and the component idles.
  • Removed deprecated APIs. Removed the GetScreenshot protocol (deprecated in F26) and replaced the annotations field with annotations2, enforcing higher limits for clients.
  • Improved crash report upload logic. Successful eager uploads now signal network reachability, triggering immediate attempts to upload previously cached reports.
  • Refactored configuration and assembly. Migrated flash_ts_feedback_id_component_url to feedback_id_component_url, added missing i18n/forensics routes, and removed the DisableWaitForInitialInterest workaround.

Firmware

The following updates have been made for Firmware:

  • Boot test product bundles now include and correctly configure recovery (R slot) images. R slot images are now explicitly included in boot test bundles to support boards that require them. Additionally, these images now use the correct recovery board configuration rather than the standard configuration, ensuring valid image generation.

  • Routing logic for factory reset TEE protocols has been corrected. The tee protocols consumed by factory_reset now route to void on builds where tee_manager does not expose them, preventing routing errors during component initialization.

Graphics and GPU

The following updates have been made for Graphics and GPU:

  • Migrated the Goldfish Pipe driver to Driver Framework v2 (DFv2). This extensive update includes replacing ddk::IoBuffer with dma_buffer and fzl::OwnedVmoMapper, moving Bus protocol handling to the parent PipeDevice to better reflect hardware topology, and enforcing stricter separation of PipeChildDevice roles.
  • Replaced compile-time PAGE_SIZE constants with runtime determination. To align with RFC 0016 and support boot-time page size configuration, ZX_PAGE_SIZE and PAGE_SIZE constants have been removed from the SDK, Graphics, and UI components, requiring clients to query page size at runtime.
  • Added PowerMode and VsyncSource protocols to the UI stack. The PowerMode API replaces binary on/off switches with granular doze state information, while VsyncSource enables clients to subscribe directly to vertical sync signals from the display hardware.
  • Transitioned from Intel Vulkan ICD to Lavapipe on x64. The Intel Vulkan ICD has been removed to simplify maintenance, with the Lavapipe software rasterizer now handling Vulkan workloads on x64 configurations.
  • Enabled blob resource support in virtio-gpu. This enhancement allows the driver to perform scanouts directly from guest memory using blob resources, eliminating unnecessary copy operations when using Lavapipe framebuffers.
  • Updated ARM Mali drivers to version r54. This driver update brings support for Vulkan 1.4.
  • Improved stability and reset logic for msd-vsi-vip. Fixes include disabling the pulse eater during reset, ensuring proper wait times, and resolving hardware hangs observed during test cycles.

I18n

The following updates have been made for I18n:

  • Added Rust bindings for ICU 77.1. Updated rust_icu_sys to support the integration and rollout of ICU version 77.1.

IOT, Matter and Thread

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

  • Thread telemetry enhancements Expanded telemetry.fidl and Inspect to include extended_pan_id for network identification and multi_ail_detected to report connections to multiple Adjacent Infrastructure Links.

  • OpenThread Stack Upgrade Updated OpenThread libraries, RCP images, and Rust-C bindings to the October 1, 2025 version and implemented otPlatDnsIsUpstreamQueryAvailable for improved DNS resolver status tracking.

  • Advertising Proxy and Service Discovery Fixes Resolved issues where mDNS publish results were unreported, fixed UpdateId handling for service deletion, and corrected Border Agent TXT record formatting.

  • TREL and MeshCoP Prioritization Modified TREL address selection to favor Unique link local over Global Unicast Addresses (GUA) and updated MeshCoP to prioritize vendor TXT entries.

Netstack

The following updates have been made for Netstack:

  • Socket Diagnostics API and fuchsia.net.matchers Added the fuchsia.net.sockets FIDL library to provide socket diagnostics capabilities and introduced fuchsia.net.matchers to unify matcher types across packet filtering and diagnostic APIs.

  • Netstack3 TCP performance and RFC compliance improvements Implemented lazy allocation for TCP buffers to reduce memory footprint. Enhanced RFC compliance by enforcing a minimum MSS of 216, randomizing TCP timestamp offsets, unconditionally sending TCP options when space permits, and fixing SACK block handling during window updates.

  • Netlink stability and security hardening Hardened Netlink security by enforcing CAP_NET_ADMIN for NETLINK_ROUTE operations and validating buffer sizes for attributes like IFA_CACHEINFO. Improved stability and compatibility by deferring message parsing and fixing panics caused by unknown messages or route removal race conditions.

  • Routing and Interface management enhancements Updated netcfg to support interface-local route tables via Netlink and install rules for locally-provisioned devices. Removed the copy_routes_to_main_table workaround, fixed default_metric population in Netlink, and adjusted WLAN interface behavior to remain administratively up when disconnected.

  • DHCP client and Neighbor Discovery improvements Improved DHCP client robustness by allowing duplicate options and preventing panics on malformed DHCPRELEASE packets. Enhanced Neighbor Discovery by discarding invalid solicitations, handling advertisements missing link-layer addresses, and correctly managing the Override flag for advertisements and ARP replies.

  • Reachability calculation updates Refined reachability calculations to correctly distinguish between IPv4 and IPv6 protocol-specific routes for gateway and default route detection. Prevented spurious status updates after interface removal.

  • Security and Reliability fixes Enforced user_id validation for SO_REUSEPORT to restrict port reuse to sockets owned by the same user. Enabled MAC multicast filtering on Ethernet devices to drop unwanted frames early and fixed a crash in the ICMP echo error handler.

Platform Drivers

The following updates have been made for Platform Drivers:

  • The SDHCI driver has been migrated to the FIDL SDMMC protocol. This modernization updates the driver to use current FIDL standards, replacing legacy interfaces. Note that in-band interrupts are not currently supported in this mode.

  • SDHCI driver stability improvements for stop sequences and interrupts. The driver now prevents BTI errors by waiting for pending requests to finish during PrepareStop and avoids race conditions by prioritizing transfer complete interrupts over data timeouts.

  • Fixed a data stall in the USB CDC function driver. Pending transmission transactions are now correctly cancelled when the endpoint is disabled, preventing transactions from lingering indefinitely in the pending list.

  • Reliability improvements for usb_vsock regarding multiple producers and packet headers. Fixes include resolving hanging connections by correctly waking all interested wakers in multi-producer scenarios, and correcting payload length in pause packets to prevent header clobbering.

  • The DWC3 USB driver now robustly handles VBUS signals and core resets. The driver actively manages the VBUS valid signal on supported platforms and toggles the core reset during power-on to ensure correct initialization.

  • Added a new composite USB peripheral configuration. A new composite device profile supporting CDC, ADB, and Fastboot functionalities is now available.

  • GPIO and I2C core drivers now forward the PowerTokenService. This update facilitates better power management integration by forwarding the service from the parent implementation driver to children nodes.

Power Management

The following updates have been made for Power Management:

  • Battery Manager re-architecture and tooling The Battery Manager has been revived to bridge the driver via FIDL, providing a centralized point for battery information. This update introduces the batteryutil CLI tool, new FIDL APIs for charging control, and an average_current field in BatteryInfo. Behavioral changes include blocking suspension while the device is charging and scaling battery levels based on shutdown offsets.

  • Power Broker API consolidation The LevelControl API has been removed from the system and ElementSchema, requiring all integrations to migrate to ElementRunner. This simplifies the API surface for power element management. Additionally, a race condition regarding claim ordering for related claims has been resolved.

  • Observability and State Recorder SDK A new State Recorder library (C++ and Rust) has been moved to the SDK to standardize numeric and discrete power state recording. System suspension debugging is significantly improved by propagating wake reasons (including Koid) up the call stack, adding wake source reporting to fuchsia.hardware.power.suspend, and tracking long-held wake leases in Inspect data.

  • API deprecations and removals The ActivityGovernorListener interface has been removed, finalizing the migration to SuspendBlocker. Additionally, the fuchsia.power.systemmode FIDL library has been formally deprecated.

  • New Thermal Sensor Management API Implemented the fuchsia.thermal.SensorManager API in power-manager, allowing clients to discover thermal sensors and inject override temperatures for policy testing. Support for emul_temp was also added to thermal sysfs directories.

  • Kernel and Driver Power features Added configuration capabilities for Runtime Processor Power Management (RPPM) and routed them to base drivers. Universal Flash Storage (UFS) drivers were updated to use standard suspend/resume registration, removing legacy wake-on-request behavior.

  • Shutdown reason propagation Added a Shutdown method to the Admin protocol in shutdown-shim, enabling clients to specify distinct shutdown reasons and actions (e.g., reboot vs. poweroff). A fix was also deployed for critical-services stopping prematurely during the shutdown sequence.

  • Power CLI and Platform Configuration Introduced a new powerutil CLI tool and migrated ffx power to use its implementation. New platform configurations were added for fuchsia.power.cpu.BoostEnabled and Android power hints, while storage power management enablement was refactored to be board-specific.

  • Power management updates Added support for long wake lease thresholds in inspect data, defined pdev interfaces for clocks/PMIC and CPU OPPs, and improved suspend blocker logic.

Rust

The following updates have been made for Rust:

  • fuchsia-async added instrumentation hooks and optimized memory usage. Support for pluggable instrumentation hooks on macros and AtomicFuture allows for better diagnostics without overhead when disabled. Additionally, the library replaced crossbeam epoch-based deferred execution with a custom implementation to significantly reduce memory usage.

  • Legacy fuchsia-async task creation methods have been removed or internalized. This change finalizes the migration to the builder pattern for task creation and execution APIs, requiring updates to code still using the old methods.

  • Rust build workflows changed with the removal of fx rustfmt/fx rustdoc and enabled release symbols. The deprecated fx commands were removed in favor of standard toolchain workflows. Debug symbols are now retained in release binaries by default to facilitate better symbolification and debugging of release builds.

Software Delivery

The following updates have been made for Software Delivery:

  • Enhanced Android recovery and sideloading capabilities. The recovery system now supports reading manifest signatures and update URLs directly from ADB sideload, handling relative blob base URLs, and correctly mounting system blobs during updates.

  • Improved system update security and configuration. The system updater now verifies OTA manifest signatures using public keys configured via assembly, and supports an optional signature parameter for packageless updates.

  • Optimizations and diagnostics for Package Resolver. Pinned resolves are now allowed for base packages in pkg-cache to reduce memory usage. Additionally, successful resolves are now recorded in Inspect rather than system logs to reduce spam, and system-updater inspect now includes the in-progress update attempt ID.

  • Updates to Paver and Moonflower board support. Added support for merging "super" and "userdata" partitions, paving arbitrary partitions on Moonflower, and fixed critical A/B/R GUID synchronization bugs. Legacy A/B support for Moonflower has been removed, and error handling for partition table resets has been improved.

  • Configurable blob network timeouts. Blob network header and body timeouts in pkg-resolver can now be overridden via configuration capabilities, and the default timeout in recovery has been increased to improve reliability.

  • Update Notifier is now discoverable. fuchsia.update/Notifier is marked discoverable to allow its use with escrowable components, facilitating transfer to Component Manager upon exit.

  • Package manifest tooling improvements. Package manifests are now written in pretty-printed JSON for easier diffing, and a set_name API was added to fuchsia-pkg to allow dynamic name changes.

  • Support for anchored packages. Initial support for anchored packages has been added to package management libraries and assembly tools, using BTreeMaps to ensure deterministic serialization.

Starnix

The following updates have been made for Starnix:

  • Significant progress has been made on SELinux enforcement, implementing checks for Binder, Netlink, and filesystem permissions. This includes enforcing permissions for binder (call, transfer, impersonate), netlink extended permissions (nlmsg), ptrace, getcap/setcap, and various file/socket access checks (file_receive, socket_accept, getattr).

  • The SELinux audit framework has been implemented, including support for the audit_access pseudo-permission. This allows for suppressing audit log spam via dontaudit rules, hex-encoding of special characters in logs, and configuration via the kernel command line.

  • ARM unwinding improvements. Added support for ARM EHABI, ARM.extab, ARM.exidx, and sigreturn unwinding. Implemented handling for 32-bit/64-bit transition frames to support Starnix profiles.

  • PTRACE_POKEDATA and PTRACE_POKETEXT are now supported, allowing tracers to modify tracee memory. This enables Linux debuggers (like LLDB) to set software breakpoints in running programs within Starnix.

  • io_uring support has been expanded with recvmsg buffer selection and additional setup flags. IORING_OP_RECVMSG now supports IOSQE_BUFFER_SELECT, and stubs or implementations were added for IORING_SETUP_DEFER_TASKRUN, IORING_SETUP_SINGLE_ISSUER, and IORING_REGISTER_RING_FDS.

  • Implemented CLONE_PIDFD for clone()/clone3() and improved pidfd_open behavior. This adds the ability to receive a file descriptor representing the child process upon creation and fixes issues with pidfd_open handling of zombie processes.

  • The ffx starnix kill command has been added. This tool allows users to terminate processes within a Starnix container from the host.

  • Support for TFD_TIMER_CANCEL_ON_SET has been added to timerfd. This flag allows monitoring for discontinuous changes to the UTC timeline (e.g., via clock_settime).

  • The File Descriptor Table (FdTable) has been migrated to use Read-Copy-Update (RCU). This improves concurrency by allowing multiple threads to read file descriptors simultaneously without blocking.

  • Security for /proc/<pid>/mem has been improved by referencing the MemoryManager directly. This ensures the file descriptor is linked to the specific address space at the time of open, preventing unauthorized access after an exec() call changes the task's memory layout and credentials.

  • eBPF now supports LPM (Longest Prefix Match) Trie maps. This adds the BPF_MAP_TYPE_LPM_TRIE map type, commonly used for networking tasks.

  • Networking capabilities have been expanded with SO_BINDTODEVICE checks and runtime Generic Netlink support. This adds capability checks for socket device binding and allows adding Genetlink families at runtime.

  • The KGSL driver now supports 32-bit applications. This update improves compatibility for 32-bit Android graphics workloads.

  • Starnix Support features Timers now support TFD_TIMER_CANCEL_ON_SET to monitor UTC timeline changes. Debugging capabilities are enhanced by populating the faulting address in signal stack frames for ARM architectures and by adding logic to track the source of signals in debug/balanced builds.

  • Starnix VFS performance and memory usage have been optimized. The file descriptor table (FdTable) now uses Read-Copy-Update (RCU) synchronization for concurrent reads, and mount metadata strings now use FlyByteString to reduce memory overhead for heavy mount workloads.

Storage

The following updates have been made for Storage:

  • Driver-side decompression is now supported in the block server and used by Blobfs. This improves performance by avoiding the use of an external decompressor and enables potential future driver-based page request handling.

  • Fxfs dirty page cleaning under memory pressure is now more efficient. Fxfs now selectively flushes only files with dirty pages rather than checking metadata for all files when blocking ZX_PAGER_VMO_DIRTY requests during critical memory pressure.

  • Fxfs now supports atomic volume installation via a new VolumeInstaller protocol. This facilitates installing new system images at the filesystem level and allows replacing existing volumes atomically.

  • Read-only Ext4 filesystems now expose extended attributes. The APIs to list and query extended attributes were moved to the Directory interface to support this implementation in ext4readonly.

  • Keymint support has been added for data volume encryption. A new keymint policy allows fshost to seal the data volume's keys using Keymint and persist them to a key store, enabling TEE-backed key management where available.

  • Significant improvements have been made to the UFS driver. This includes implementing the fuchsia_hardware_ufs::Ufs protocol, adding support for sending SCSI commands to UFS devices, and optimizing power management by removing wake-on-request behavior in favor of standard suspend/resume hooks.

  • Fxfs security and cryptography capabilities have been enhanced. Changes include verifying the fsverity merkle tree root hash on open to prevent unauthorized modification, support for inline encryption where hardware allows, and support for lblk32 keys.

  • Blobfs has migrated to version 10 to support mixed merkle layouts. This introduces inode and superblock flags to determine merkle formats, facilitating migration between formats without requiring immediate disk layout changes.

  • SDMMC and RPMB driver reliability has been improved. Large RPMB writes are now broken into chunks according to device support, and eMMC initialization now falls back to High Speed or DDR52 modes if tuning fails, preventing boot failures on problematic hardware.

  • Several storage drivers have been migrated to Driver Framework v2 (DFv2). This modernization includes the nand, ram-nand, nandpart, and bootpart drivers.

Testing

The following updates have been made for Testing:

  • Expanded fx test flags and developer features. Added --[no-]fail-by-group to toggle retries for test groups, --previous failed-tests to generate commands for re-running failures, and a test_filters flag. The tool now automatically starts a package server when listing tests, supports searching remote builder tests, conditionally spawns debuggers with --use-existing-debugger, and refreshes package lists for device tests.

  • Added experimental ResultStore integration. Enabled streaming build results to ResultStore via fx resultstore, adding a ninja wrapper (rsninja.sh) and client tools (rsclient) to improve build data visualization.

  • Migrated Antlion to fuchsia.git. Moved the Antlion repository from //third_party/antlion to //src/testing/end_to_end/antlion to streamline developer workflows and improve test authoring velocity.

  • Updated Honeydew (Lacewing) APIs. Renamed the wlan affordance to wlan_core to distinguish it from policy APIs, added USB support for PowerBAT suspend/resume, introduced system interface querying, and enabled target names for local host-target interactions.

  • Refactored test output parsing infrastructure. Removed network conformance test parsing from the general parser, separated Rust and Go test parsing logic into distinct tools, and updated the test runner to strictly expect TestResult in the output summary schema.

  • Implemented mDNS resolver for host-target testing. Added a device resolver utilizing botanist's mDNS packet inspector to track targets without relying on ffx for resolution.

  • Updated sockscripter utility. Added a log-error command to read SO_ERROR socket options and enabled configuration of the send buffer length.

  • Expanded tefmocheck log analysis. Added support for detecting failure patterns based on the proximity of log lines, enabling test skipping in nearby checks, and detecting ADB server restarts.

  • Removed get-ssh-address from fxtest. Deprecated and removed the get-ssh-address subcommand; users must now use ffx -t target target list --format addresses.

  • Introduced edge-triggered audio capture support. A new capture method has been implemented in the audio_recording component, allowing clients to queue future captures and eagerly stop recording when silence is detected, improving reliability and speed over fixed-duration recording.

Timekeeping

The following updates have been made for Timekeeping:

  • Added support for UTC-based wake alarms. The Timekeeping subsystem and Wake Alarms Manager now support scheduling alarms on the UTC timeline, enabling real-time clock functionality for Starnix. This introduces SetAndWaitUtc, a FIDL method using a hanging-get pattern to satisfy container power management requirements.

  • Hardened alarm scheduling and duration logic. Fixed multiple edge cases in alarm management to ensure reliability: zero-tick wake alarms are now padded to 1 tick to guarantee protocol execution, negative durations default to the minimal time unit, rescheduling logic now correctly cancels obsolete timers, and TimerNode comparison logic was corrected.

  • Prevented erroneous UTC updates near backstop. The system now validates UTC updates against the build backstop time, rejecting any values within one hour of the backstop to prevent invalid system time caused by failed Real Time Clock (RTC) hardware.

  • Enforced non-zero rates in Zircon clock transformations. The transform_clock function and ClockTransformation methods now assert and panic if a zero rate is provided, ensuring invalid clock rate configurations are caught immediately.

  • Named UTC clock handles. The UTC clock handle is now assigned the name utc-clock (and utc-clock-vendor) to assist with handle provenance tracking and debugging.

Tools

The following updates have been made for Tools:

ffx

The following updates have been made for ffx:

  • ffx trace has been re-architected to remove the trace daemon protocol. The tool now connects directly to the target (via SessionManagerProxy or ProvisionerProxy) instead of routing through the daemon. Support was also added for on-boot tracing configuration and decoding FIDL message bodies.

  • A new ffx target discover command and caching mechanism were introduced. This populates a discovery cache to avoid full network scans on every command invocation, allowing ffx to resolve targets almost instantly when the cache is valid.

  • Host-side USB driver support has been implemented in ffx. A new usb_driver command and associated daemon logic now handle the host-side USB connection, improving process isolation for long-running connections.

  • Support for MacOS has been removed from ffx and Zircon build rules. MacOS is no longer a supported host platform for these tools.

  • A new ffx target log-message command was added. Users can now write arbitrary messages to the device's log, useful for marking events during manual testing.

  • ffx driver now supports generating graphs with host/driver groupings. ffx driver node graph can now group nodes by driver hosts and components, optionally showing service routes.

  • ffx target get-ssh-address has been deprecated. Users should migrate to ffx target list --format addresses.

  • Remote Control service enhancements. The service now serves authorized_keys on port 9797, and supports serving FDomain over VSOCK.

fx

The following updates have been made for fx:

  • fx build now supports building Bazel targets directly. A new experimental mode allows invoking Bazel for host targets using --config=NAME, running alongside the existing GN build.

  • zxdb fixed a use-after-free crash in the unwinder callback. This resolves a race condition that caused intermittent SIGSEGV crashes in the DAP server during concurrent stackTrace requests.

zxdb

The following updates have been made for zxdb:

  • zxdb now supports recursive job-only filters. This enables the debugger to attach to all processes within a component realm (e.g., a test realm), allowing retrieval of backtraces for all components during timeouts or failures.

  • Significant memory optimizations were applied to zxdb symbol loading. The debugger now purges LLVM DWARF library caches post-indexing, reducing resident memory usage by approximately 50% for large debug symbols.

  • Stack trace display in zxdb and DAP has been improved. The debugger now elides less-relevant stack frames (such as Rust test assertions and async executor internals) to focus on user code and correctly reports frame counts to DAP clients like VS Code.

Tracing

The following updates have been made for Tracing:

  • Architecture update: Direct device connection and daemon removal. ffx trace now connects directly to the target device via TraceManager or SessionManager, bypassing the ffx daemon. This architecture change enables "truly idle" tracing, allowing sessions to persist without maintaining an active host connection.

  • Added On-Boot tracing capability. A new command enables writing trace configurations to the device, allowing trace_session_manager to automatically initiate tracing upon component startup. Data is retrieved via the ffx trace stop command.

  • Expanded kernel IPC tracing and FIDL decoding. The kernel now records initial channel message data (bytes and handles) under the kernel:ipc category. Additionally, ffx trace has been updated to decode these FIDL message bodies for deeper inspection.

  • Added event filtering to trace conversion tools. The trace2json tool and libraries now support regex-based event filtering via --pattern. The update ensures thread and kernel object metadata remains intact even when specific events are filtered out.

  • Added FXT support for Profiler-specific record types. The Fuchsia Trace Format (FXT) reader and serializer now support Module, Mmap, and Backtrace records, enabling efficient storage of profiler data.

  • Improved ffx trace usability and input validation. Enhancements include a download progress indicator, automatic stripping of smart quotes from arguments, and conflict prevention between --background and --output. The tool now also warns when requested categories are missing from the trace data.

  • Made kernel lock contention tracing universally available. The kernel:contention category is now available in all configurations and is no longer behind a build flag, making lock contention data accessible whenever tracing is enabled.

  • Enhanced tracing performance and metric collection. TraceFs now uses direct memory mapping to write events, reducing copy overhead. New metrics include GPU utilization, and Starnix thread IDs are now correctly mapped to Fuchsia koids for improved visualization in Perfetto.

UI

The following updates have been made for UI:

  • Introduced display::CoordinatorProxy to optimize display configuration. This new proxy layer minimizes FIDL calls to the display coordinator by caching results and filtering redundant state updates, reducing overhead and improving performance in Flatland and Scenic.
  • Implemented BlendMode::STRAIGHT_ALPHA in Flatland. This addition enables correct color composition for non-premultiplied pixel formats within the Flatland rendering engine.
  • Introduced the TrustedFlatlandFactory protocol. This new interface allows authorized clients to bypass standard Scenic overhead, offering optimized performance paths for specific trusted use cases.

Video

The following updates have been made for Video:

  • Runtime page size determination. Media and camera drivers now query page size at runtime instead of relying on the ZX_PAGE_SIZE compile-time constant, improving compatibility across different system configurations as per RFC 0016.

  • Migration to C++ MMIO SDK. Media and camera drivers now use //sdk/lib/driver/mmio/cpp for memory-mapped I/O, modernizing the codebase and replacing legacy implementations.

  • All video decoder internal buffers now allocated via sysmem. This mitigates physical fragmentation and higher rate of zx_vmo_create_contiguous not finding a long enough run of physical pages.

WLAN and Connectivity

The following updates have been made for WLAN and Connectivity:

  • Implementation of SAR and Transmission Power Control APIs. Support has been added for Specific Absorption Rate (SAR) and Transmission Power scenarios across the WLAN stack to ensure regulatory compliance and safe operation. This includes new FIDL APIs on WlanPhyImpl and DeviceMonitor, implementation in wlanix to dynamically control WifiChip power levels, and associated telemetry logging.

  • Enhanced Security Protocol Support (WPA3/SAE and WEP). Expanded security capabilities to support both modern and legacy standards. Functionality has been added to support SAE password setting and RSNXE parsing for WPA3 Hash-to-Element authentication. Additionally, wlanix now supports saving WEP credentials and setting WEP key indices.

  • WLAN Recovery and Reliability Improvements. Improved system stability and self-healing capabilities. The system now re-enables PHY reset recovery when typical operations fail and serves the supplicant by interface name to allow for process restarts. Furthermore, the chip is now explicitly powered down upon start failures, and active 5GHz scans are disabled for non-DFS devices to improve connection stability.

  • Roaming Logic and Metrics Enhancements. Optimized roaming behavior and observability. Roaming logic now penalizes BSSs with very high RSSI (>-30 dBm) to prevent radio saturation. Issues with roam success rate metrics and missing failed roam logs have been fixed to provide accurate performance data.

  • API and Protocol Updates. Introduced new APIs and updated protocol definitions for better standard compliance and control. A GetSignalReport API has been added, and ieee80211::StatusCode has been updated to a flexible type to support 802.11-2020. Additionally, SetScanMode and SetBtCoexistenceMode APIs have been plumbed through the stack.

  • Firmware, Telemetry, and Maintenance Updates. A collection of hardware support and internal improvements. The Broadcom SYN4381 firmware has been upgraded to 1195.1225, and support for the "00" (Worldwide) country code has been added. Internal changes include removing runtime usage of ZX_PAGE_SIZE per RFC 0016, fixing overflow errors during PHY resets, and adding telemetry for battery charge status and time-series signal reports.

  • Network Policy Deadlock Resolution. Resolved a race condition and deadlocks in network management. The directionality of DefaultNetwork dependencies has been reversed, making connections between netcfg and socket-proxy unidirectional to ensure reliable state transitions.

  • Refactoring of Windowed Stats traits. The TimeMatrix and Statistic traits have been refactored (renaming Interpolator to TimeMatrixTick, MatrixSampler to TimeMatrixFold) to simplify type bounds, improve semantic clarity, and support new interpolation kinds like NoSample.