
Google has officially begun deploying its in-house font rendering engine, Skrifa, as a replacement for the FreeType library in the Chrome browser for processing web fonts. This new mechanism, written in the Rust programming language, offers a more secure alternative to the previous solution by mitigating vulnerabilities that persisted even after repeated updates.
Chrome originally relied on FreeType to load and render fonts across Android, ChromeOS, and Linux. However, FreeType’s architecture is rooted in the C programming language, rendering it susceptible to memory management flaws.
Despite years of optimization and continuous contributions from Google’s developers, recurring bugs—including buffer overflows, incorrect data types, and improper memory handling—continued to surface in production releases. Addressing such vulnerabilities consumes roughly a quarter of a developer’s working hours.
Researchers attribute the majority of these issues to inherent characteristics of C: manual memory management, implicit macros, outdated type practices, and the complexity of testing new features. Fonts, as a file format, are intricate containers of interdependent tables—ranging from visual glyph descriptions to bytecode-driven microprograms governing display behavior. Simple random byte mutations, typical of conventional fuzzing techniques, prove largely ineffective, as most malformed inputs are discarded early in the processing pipeline.
Skrifa, part of the Fontations library, was designed with these limitations in mind. Leveraging Rust’s strong memory safety guarantees, it is inherently protected against buffer overflows and other common bugs. To optimize performance, Skrifa employs strictly typed, zero-copy file parsing via the bytemuck library, which has undergone extensive formal verification.
Beyond security, the development team prioritized visual fidelity. The migration from FreeType is intended to be imperceptible to users. To ensure this, tools like fauntlet were developed to compare the output of both libraries across tens of thousands of fonts. Rendering results are also validated pixel-by-pixel using the Skia engine, across various anti-aliasing and hinting configurations.
Fuzz testing for Skrifa has been active since June 2024 and has uncovered 39 bugs—none of which were deemed security-critical. All identified issues led either to visual anomalies or controlled crashes with no risk to users.
The transition to Skrifa began with Chrome 128, where it was applied to rarely used font formats. As of Chrome 133, released in February 2025, Skrifa now processes all web fonts on Linux, Android, and ChromeOS, and functions as a fallback renderer on Windows and macOS when system fonts are unsupported.
Looking ahead, Google intends to extend Skrifa’s role to encompass system font rendering, starting with Linux and ChromeOS, followed by Android. The company emphasizes that security remains a paramount concern, and the adoption of Rust has significantly reduced the number of vulnerabilities while enabling faster, more reliable updates—without compromising quality or performance.