Fuchsia F27 release notes

Date: July 15, 2025

Version: F27

The following changes have been implemented:

A11y

The following updates have been made for A11y:

  • Improved A11yManager modularity by making the ColorConverter protocol connection conditional on the AttachA11yView flag.

Audio

The following updates have been made for Audio:

  • Improved the Audio Device Registry (ADR) to gracefully handle Composite device removals, preventing potential crashes. A new platform configuration flag has also been introduced to control the eager startup of the ADR service.
  • Enhanced audio drivers for improved stability and identification. AML-G12 drivers now expose manufacturer and product properties, use the SDK platform-device library, and no longer crash if Stop is called before Start. The intel-hda driver now correctly handles the creation of a second ring buffer.
  • Updated the virtual audio driver to offer the Composite FIDL protocol directly, deprecating CompositeConnector. The modern, non-legacy virtual audio driver is now included in development builds, verified by tests, and has partial support for position notifications.
  • Significantly enhanced the audio_driver_tests suite with comprehensive negative testing, fixes for race conditions, and a 25% reduction in execution time. The suite is now split into basic, admin, and realtime packages for more targeted testing.
  • Expanded service routing for audio capabilities to aid migration away from devfs. The StreamConfigConnectorService has been split into distinct Input and Output services.

Bluetooth

The following updates have been made for Bluetooth:

  • Allow multiple LE advertisements with the same local address
  • Introduced a way to configure the SCO index for offloaded audio and updated the test harness to offer this capability.
  • Introduced and implemented the fuchsia.bluetooth.sys.Access.SetConnectionPolicy FIDL API, allowing applications to control the BR/EDR connectability of the Bluetooth stack.
  • Refactored the Hands-Free Profile (HFP) configuration schema to explicitly enable Audio Gateway (AG) and Hands-Free (HF) roles with specific features, completing the migration from the deprecated bluetooth.hfp.enabled field.
  • Modernized MAC address handling, the bt-hci driver now retrieves the MAC address using the modern driver metadata library, and bt-transport-uart forwards it using fdf_metadata::MetadataServer, replacing legacy methods.
  • Removed legacy HLCPP support from fuchsia.hardware.bluetooth and the unused fuchsia.hardware.bt.hci and fuchsia.hardware.bt.vendor Banjo libraries, completing the migration to modern FIDL and C++ bindings.
  • Added SuspendEnabled and SystemActivityGovernor capabilities to bt-init's component manifest (CML) and its integration test harness.
  • Bluetooth components can now be started with an optional config capability, allowing for more flexible system configurations.
  • Added new FIDL interfaces to support Connected Isochronous Groups (CIG) management.
  • Increased the timeout for bt-gap to find the bt-host component from 5 to 100 seconds to enhance robustness.
  • Introduced the ConnectionReceiver2 FIDL, which supports wake lease handshakes and flow control for new Bluetooth connections.
  • Replaced Bluetooth devfs capability routing with modern service routes to simplify client upgrades.

Cobalt

The following updates have been made for Cobalt:

  • Improved data upload efficiency by moving system profiles to the envelope level, which significantly reduces uploaded bytes by de-duplicating system profiles across observation batches.
  • Fixed a build issue by adding a missing include to comply with include-what-you-use guidelines.
  • Allowed non-camel-case Rust enums in the source generator, ensuring that event codes with special characters can be used without causing build failures.
  • Completed migration to step_multiplier_float from the deprecated step_multiplier for integer histogram reports, including removing old field definitions and validations.

Component Framework

The following updates have been made for Component Framework:

  • Added a new method GetResolvedInfo to the fuchsia.component.Realm FIDL protocol, which allows for querying resolved component information.
  • Migrated the component model to the fuchsia.io2 library, replacing deprecated fuchsia.io functionality.
  • Included a persistent storage shard for Realm Builder, preserving component data across restarts, which is particularly useful for tests that require state persistence.
  • Enhanced component manifests and tools. This includes support for weak dictionaries in CML, services in dictionaries in cmc, and improved error messages and argument standardization in command-line tools.
  • Expanded support for config capabilities. Support has been added to built-in runners, and Component Manager now performs type checking for config capabilities during routing.
  • Improved performance and stability. Full Link-Time Optimization (LTO) is now enabled for Component Manager, reducing its binary size, and the service-broker now shuts down more promptly.

Build

The following updates have been made for Build:

  • Improved performance and developer experience. This includes caching Bazel query results, optimizing the 'balanced' compilation mode to use ThinLTO, and enhancing error reporting for DTC and fx build target names.
  • Refactored the Bazel integration workflow. The in-tree IDK repository is now generated at fx gen time, and the --config=no_sdk flag has been removed in favor of an explicit --config=host flag for host builds, fixing incremental build issues.

Diagnostics

The following updates have been made for Diagnostics:

Display

  • Expanded pixel format support. Magma and virtio-gpu now support R8G8B8A8 formats, increasing compatibility with more hardware and applications.

  • Improved graphics rendering and stability. A shutdown crash in the Intel display driver has been fixed.

Driver Framework

The following updates have been made for Driver Framework:

FIDL

The following updates have been made for FIDL:

  • Significant C++ build time reductions have been achieved by moving generated function bodies out of headers and decoupling wire and natural bindings, reducing redundant compilation work.
  • Improved ergonomics and performance for Rust wire bindings. Enhancements include support for encoding by value/reference, pre-decoded message buffers, and an escape hatch for non-blocking sends. Performance is boosted by optimized padding zeroing, and channel closure errors now explicitly include epitaphs.
  • Added support for zx::Counter to the Rust FIDL bindings.
  • Added a new static Python FIDL backend (fidlgen_python), and bindings are generated by default for all FIDL libraries. This initial version includes support for protocol methods, robust external type imports, required struct fields, and improved IDE discoverability.

GPU and Graphics

The following updates have been made for GPU and Graphics:

  • Significantly improved Magma's core. Semaphores now use zx::counter instead of zx::vmo for better performance and lower memory use. Additionally, context creation now supports priorities, buffer release is safer on connection shutdown, and a new C++ to C binding library is available.
  • Migrated graphics drivers from devfs to FIDL services. This system-wide effort modernizes graphics components, including the Mali driver and Magma integrations, improving security and the clarity of exposed capabilities. Legacy DFv1 libraries have also been removed.
  • Expanded pixel format support. Magma and virtio-gpu now support A2B10G10R10, P010, increasing compatibility with more hardware and applications.
  • Improved graphics rendering and stability. The Vulkan swapchain now correctly handles the alphaComposite mode, ensuring proper rendering of opaque surfaces.
  • Improved FIDL API and ABI for graphics services. The fuchsia.vulkan.loader/Loader protocol is now marked for ABI checking. The Magma service FIDL now more clearly exposes the CombinedDevice protocol, simplifying the client API.

IOT, Matter, and Thread

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

Kernel

The following updates have been made for Kernel:

  • Implemented the ZX_VM_FAULT_BEYOND_STREAM_SIZE flag for zx_vmar_map. This allows memory access beyond a VMO's content size to fault, improving compatibility with POSIX mmap semantics.
  • Added support for ktrace streaming. zx_ktrace_read now consumes the data it reads, enabling userspace to stream kernel trace data by invoking this syscall in a loop. As part of this cleanup, the unused zx_ktrace_write syscall was removed.

  • Added support for mappable kernel clocks. These clocks support efficient read access without entering the kernel in most circumstances. See RFC 0266 for details on the design.

Netstack

The following updates have been made for Nestack:

  • Netstack3 is planned to be enabled (via a feature flag) right after F27 rolls out to 100% and before F28 starts rolling out.
  • Introduced comprehensive support for TCP Selective Acknowledgement (SACK), including SACK-based loss recovery and congestion control updates, to significantly improve TCP performance over lossy networks.
  • Improved TCP ACK behavior by enabling delayed ACKs by default, introducing quickack periods, and ensuring more accurate window update calculations for better performance.
  • Enhanced TCP reliability and correctness by fixing several critical bugs, including an arithmetic overflow in CUBIC, a panic on out-of-order SACKs, incorrect RTT/RTO calculations, and improper retransmission timer re-arming.
  • Improved TCP's response to network conditions by dynamically adjusting the Maximum Segment Size (MSS) based on Path MTU updates and aligning ICMP error propagation with Linux behavior.
  • Fixed IP fragment reassembly by correcting the handling of out-of-order and duplicate fragments, and reduced the IPv4 reassembly timeout to 15s to align with RFC-791.
  • Prepared for IPv4 Duplicate Address Detection (DAD) by refactoring the DAD mechanism to be IP-agnostic and adding necessary configuration options.
  • Limited the Path MTU cache size using an LRU policy to mitigate a potential denial-of-service vulnerability from repeated PacketTooBig messages.
  • The netstack now sends ICMP Port Unreachable messages for datagrams sent to unbound UDP ports, with protection from existing ICMP rate limiting.
  • Introduced support for eBPF-based socket egress filters through the new fuchsia.net.filter.SocketControl FIDL protocol, enabling advanced packet filtering capabilities.
  • Enhanced network filtering with packet marking, allowing fuchsia.net.filter rules to mark packets and for these marks to be used in forwarding decisions.
  • Improved connection tracking to parse inner ICMP error packets, associating them with the originating connection to enable features like NAT for ICMP errors.
  • The fuchsia.netpol FIDL library has been renamed to fuchsia.net.policy for consistency with new API standards.
  • Strengthened NDP and MLD message validation to enforce that the hop-limit is correct as per RFCs, and ensured learned IPv6 parameters are reset when an interface is disabled.
  • Enhanced network observability with more granular counters, including per-device IP counters, per-socket UDP counters, and MLD Inspect counters.

Platform Drivers

The following updates have been made for Platform Drivers:

Power Management

The following updates have been made for Power Management:

Software Delivery

The following updates have been made for Software Delivery:

  • Added a health check protocol to the system-update-committer that fails commits that take longer than five minutes, improving overall update reliability.
  • Improved diagnostic logging for the system-update-checker to detect when the connection to the UpdateManager is lost.
  • Migrated the recovery component to use ArchiveReader and a new Open method, replacing the deprecated LogProcessor.

Starnix

The following updates have been made for Starnix:

  • Implemented a suite of security hooks for socket operations, enhancing security for creating, binding, connecting, listening on, and shutting down various socket types.
  • Added a comprehensive set of security hooks for BPF operations, covering bpf, bpf_map, bpf_prog, and the allocation of BPF resources, along with necessary capability checks.
  • Implemented new security hooks for various kernel operations, including for mmap to check memory mapping permissions, file_receive for receiving file descriptors, and task_setrlimit for setting resource limits.
  • Modernized SELinux exception and policy management, replacing file-based configurations with a flexible config capability, removing obsolete exceptions, and adding support for permissive subject domains.
  • Updated SEStarnix to perform extended permission (xperm) checks for ioctl calls, using a new API, a performance cache, and expanded test coverage to enforce fine-grained controls.
  • Introduced support for "private" anonymous file system nodes, which bypass SELinux checks for internal file types like signalfd, eventfd, and sync_file to improve compatibility and performance.
  • Improved socket labeling and classification, ensuring sockets (TCP, UDP, raw IP) are assigned the correct security class and context upon creation.
  • Updated the fuchsia.starnix.binder FIDL API to include a WriteBytes method, providing a more efficient way to perform small memory writes by avoiding VMO creation.
  • Added support in Starnix for File-Based Encryption (FBE) on Fxfs. This includes support for symbolic links and proper handling of encrypted paths. Encryption keys are now securely stored in /data, improving volume management and enabling reliable cold boot simulations.

Storage

The following updates have been made for Storage:

Testing

The following updates have been made for Testing:

Timekeeping

The following updates have been made for Timekeeping:

  • Introduced power management integration for Timekeeper, including a feature flag and logic to prevent premature clock updates before the clock is started.
  • Enhanced RTC reliability by disallowing negative boot timeline reference adjustments, which indicate an invalid state caused by a reset.
  • Enhanced Timekeeping observability and debuggability via Inspect by adding metrics for UTC adjustment successes/failures, logging last adjustment details, and exposing structured configuration data.
  • Improved Starnix UTC time accuracy and configurability by correcting the reference timeline to boot, implementing a proxy for external adjustments, and finalizing routing for settable UTC time.
  • Introduced a comprehensive external UTC time adjustment mechanism, including core decision logic, integration into the UTC control loop, asynchronous command handling, and configurable security-focused time window limits.
  • Enabled persistent storage for Timekeeper by adding a component instance ID and experimentally making the storage AIB available.
  • Improved alarm handling and RTC emulation by correcting timer index selection based on device properties and refining the use of always-on counters.

Tools

The following updates have been made for Tools:

fx

The following updates have been made for fx:

  • Improved the fx set command for better build directory management. It now defaults to --auto-dir to create product-specific build directories, with out/default becoming a convenient symlink. Several bugs have been fixed, including issues with the --dir and --fint-params-path flags, and the build directory is no longer stored in fx.config, preventing staleness issues.
  • Standardized and improved target selection flags. The fx -d flag is now deprecated in favor of fx -t or fx --target to align with ffx.
  • Added a warning to the fx build command to warn developers against using Ninja target names instead of GN labels. This change encourages proper build argument usage and helps prepare for future Bazel integration.
  • Enhanced build analytics from fx to report more context, such as whether a build was triggered by fx test or fx multi, and to include more build arguments from args.json.

ffx

The following updates have been made for ffx:

  • Removed the daemon-based package server from ffx. All associated commands (ffx repository add, list, remove, status, etc.) are also removed. Users should now use the standalone ffx repository server commands.
  • Improved networking and connectivity. ffx now correctly handles IPv6 addresses with scope IDs, provides more useful error messages for connection failures, and more robustly discovers and manages targets, especially over USB/VSOCK. Support for Overnet over VSOCK has also been added.
  • Added an opt-in Terminal User Interface (TUI) for ffx and fx commands to provide enhanced formatting. This can be enabled via the ffx.ui.mode configuration. The fx use command is the first to adopt this.
  • Updated ffx product and ffx package to be standalone executables, which are no longer bundled into the main ffx binary. This change improves build times.
  • Updated the ffx test run command to be more automation-friendly, supporting strict output requirements and machine-readable JSON.
  • Replaced the ffx inspect command's --component flag with --data for more intuitive querying.
  • Improved the ffx driver command with a new --unbound flag to list only unbound nodes and more accurate reporting of unbindable nodes.
  • Improved flashing speed and reliability. The ffx flash command is now significantly faster for large images due to an increased transfer buffer size. It can also now correctly handle large sparse images by automatically re-chunking them. A bug causing an "Unknown Ninja path" error in fx flash has also been fixed.
  • Updated the ffx trace command to better visualize FIDL IPC traces. It uses a two-pass approach to correctly render asynchronous two-way FIDL calls as single, continuous flows in Perfetto and sets event names to FIDL method names for easier debugging.

zxdb

The following updates have been made for zxdb:

  • Enabled host-side unwinding as the default in zxdb, leveraging full debugging information to provide higher-quality backtraces. A --force-remote-unwind option has been added to revert to the previous target-side behavior.

UI

The following updates have been made for UI:

  • Enabled direct-to-display in Flatland. This allows for more efficient rendering by directly displaying client images instead of composing them and includes critical fixes to the buffer collection import process.
  • Improved the input system and core UI stability. These changes fix an issue in Scenic's vsync interval computation to prevent crashes and add support for mouse devices.
  • Enhanced performance and configurability for UI services. Scenic and Scene Manager can now be configured with thread and memory profiles, allowing integrators to fine-tune resource allocation. Additionally, Scenic's frame prediction margin is now parameterizable.

WLAN and Connectivity

The following updates have been made for WLAN and Connectivity:

  • Introduced a new GetMacAddress FIDL method to wlanix for retrieving the device's MAC address.
  • The wlantool command-line utility can now connect to a network using a BSSID in addition to an SSID.
  • Refined the roaming algorithm to be more responsive and efficient. This includes making the scan backoff exponential, resetting the backoff more intelligently, and simplifying the stationary roam profile by removing SNR as a trigger.
  • Streamlined the core WLAN FIDL APIs by removing unused methods and migration flags, moving SoftMAC-specific types out of common libraries, and renaming stats-related APIs for clarity.
  • Enhanced driver telemetry by exposing new counters for WLAN preemptions, SDIO bus metrics, and firmware RX/TX errors to improve monitoring.
  • Resolved a stability issue by adjusting the maximum TX glom frames to prevent the batch size from exceeding protocol limits.