mozilla/pdf.js
36.7
Weak · 28 September 2026
166.7k
lines of production code
JavaScript
primary language
6
measurements over time
What this system is
This system is a comprehensive JavaScript-based PDF rendering and editing engine that parses, displays, and manipulates PDF documents within web browsers and Node.js environments. It provides a full-featured viewer with support for text, images, annotations, and interactive forms, alongside advanced capabilities for merging, reorganizing, and editing PDF content. The library includes specialized decoders for various image formats and compression methods, a sandboxed scripting engine for form calculations, and tools for metadata inspection and conversion.
How it got here
2011–2014 — Modernization and test expansion
22 changes.
This period focused on modernizing the PDF.js codebase by migrating to ES modules, upgrading build tooling to Node.js 22+, and standardizing repository configurations. Significant effort was dedicated to expanding and modernizing the test infrastructure, including extensive unit and PDF rendering tests, while also updating the core parsing engine and browser extensions for improved accuracy and compatibility.
2015–2023 — Modernization and form support
16 changes.
The project modernized its build infrastructure by migrating to ES modules and a Babel-based preprocessor, while updating examples and tooling to reflect these changes. Significant features were added to support complex PDF forms, including a QuickJS-based scripting sandbox and a new XFA rendering engine. The period also saw the introduction of an annotation editor layer and expanded test coverage for viewer stability and accessibility.
2024–2026 — PDF editing and rendering enhancements
17 changes.
This period focused on introducing core PDF editing capabilities, including document merging, page reorganization, and SVG-based annotation tools. Significant infrastructure work involved adding support for new image formats like JPEG 2000 and Brotli, while also overhauling the PostScript engine and color management systems for improved performance and accuracy.
Features
Add Brotli decompression support
The application now includes the Brotli library (decode.js) to support decompressing Brotli-encoded content. This change adds the necessary decoder implementation, along with its MIT license and README documentation, enabling the system to handle Brotli compression formats.
external/brotli · high confidence
Add OpenJPEG-based JPX decoder with WebAssembly support and fallback
The PDF viewer now includes a new decoder for JPEG 2000 (JPX) images, built from the OpenJPEG library compiled to WebAssembly via Emscripten. This adds \openjpeg.js\ and \openjpeg.wasm\ to the \external/openjpeg\ directory, enabling the rendering of JPX images that were previously unsupported. To ensure reliability in environments where WebAssembly may fail to load, a JavaScript fallback (\openjpeg\_nowasm\_fallback.js\) is provided. The component also includes the necessary BSD 2-clause license files for both the OpenJPEG library and the pdf.js integration.
external/openjpeg · high confidence
Add qcms color-management library and bindings
The external/qcms directory now includes the qcms color-management library, its JavaScript/WebAssembly bindings (qcms.js, qcms\_utils.js), and associated license files (LICENSE\_PDFJS\_QCMS, LICENSE\_QCMS) and build documentation (README.md). This adds the underlying infrastructure for ICC profile-based color conversion, enabling features such as accurate CMYK-to-RGB conversion and proper handling of image alpha channels during color transformation.
external/qcms · high confidence
Add script to detect unused localization IDs
A new Node.js script at external/check\_l10n/check\_l10n.mjs has been added to verify that every message ID defined in l10n/en-US/viewer.ftl is actually referenced in the web and src directories. The tool scans HTML, JS, and MJS files for static string matches and also identifies IDs constructed dynamically via template literals, reporting any unused IDs as errors.
_external/check\l10n · high confidence
Add standalone JPEG image decoder example
A new example demonstrating how to use the standalone \JpegImage\ decoder from \pdfjs-dist\ has been added to the \examples/image\_decoders\ directory. The \jpeg\_viewer.html\ and \jpeg\_viewer.mjs\ files show how to fetch a JPEG file, parse it using the standalone decoder, and render the resulting image data onto an HTML canvas.
_examples/image\decoders · high confidence
Added ICC profile and licensing documentation for CMYK-to-RGB conversion
The external/iccs directory now includes the CGATS001Compat-v2-micro ICC profile, which is used to convert colors from CMYK to RGB, along with its associated CC0 1.0 Universal license text and a README attributing the source to the Compact-ICC-Profiles repository. This addition ensures proper licensing compliance and provides the necessary color profile data for accurate color space conversion in the product.
external/iccs · high confidence
Added QuickJS sandbox documentation and generated build artifacts
This change introduces the \external/quickjs\ directory, adding a README that documents the build process for the \quickjs-eval.js\ sandbox file (which requires Docker and a specific build script) and clarifies its MIT licensing. It also includes the generated \quickjs-eval.js\ file itself, which serves as the JavaScript interface for the QuickJS WebAssembly sandbox used for executing untrusted JavaScript code.
external/quickjs · high confidence
Chromium extension preferences schema generation
The build process now generates a \preferences\_schema.json\ file for the Chromium extension. This is achieved by adding \external/chromium/prefs.mjs\, which defines the metadata, allowed values, and descriptions for viewer preferences (such as zoom levels, scroll modes, and theme settings) along with a list of deprecated keys, ensuring the extension's configuration options are properly validated and documented.
external/chromium · high confidence
Initial commit of locale files and localization documentation
This change introduces the \l10n\ directory, adding a README that explains the translation workflow (maintaining \en-US\ locally and importing other locales from Firefox) and populating the folder with initial \.ftl\ translation files for multiple languages, including Acholi, Afrikaans, Aragonese, Arabic, Asturian, Azerbaijani, Belarusian, and Bulgarian.
l10n · high confidence
Initial implementation of XFA form support
Introduces a new XFA rendering engine in the core library, enabling the parsing, layout, and display of XFA-based PDF forms. This change adds a complete set of modules including an XML parser, a FormCalc lexer and parser, a template and data binding system, and a layout engine that converts XFA structures into HTML for rendering. It also includes font handling, image support, and data serialization to allow users to view and interact with complex XFA forms that were previously unsupported.
src/core/xfa · high confidence
Introduce JavaScript sandbox for PDF form scripting
The \src/scripting\_api\ directory now contains the implementation of a JavaScript sandbox (based on QuickJS) that enables the execution of embedded PDF scripts. This change adds the core API objects (\app\, \doc\, \util\, \color\, \console\) and field handling logic required to support interactive PDF forms, including field calculations, event dispatching, and formatting.
_src/scripting\api · high confidence
Introduce PDF Editor for merging, reorganizing, and editing documents
The \src/core/editor\ directory now contains the core implementation for a new PDF editing capability, including \pdf\_editor.js\ for managing page operations, \pdf\_images.js\ for handling image resources, and \print\_appearances.js\ for processing print-to-PDF outputs. This change enables users to merge multiple PDFs, reorder or extract pages, and save annotations during reorganization, while also preserving complex document structures such as AcroForm fields, outlines, and named destinations.
src/core/editor · high confidence
New ESLint rule to prefer MathClamp over nested Math.min/max
A new ESLint plugin rule, \prefer-math-clamp\, has been added to automatically refactor code patterns like \Math.min(Math.max(A, B), C)\ into the more concise \MathClamp(A, B, C)\. The rule provides automatic fixes for the standard min-outer patterns but flags max-outer patterns (e.g., \Math.max(C, Math.min(A, B))\) as manual candidates, since they only equate to a clamp when specific ordering conditions are met.
_external/eslint\plugins · high confidence
New PDF annotation editor layer with text, ink, and highlight tools
The PDF viewer now includes a new annotation editor layer that allows users to add and edit FreeText, Ink, Highlight, Signature, and Stamp annotations directly within the document. This change introduces a new \AnnotationEditorLayer\ class to manage these editors, along with specific editor implementations (\FreeTextEditor\, \InkEditor\, \HighlightEditor\, etc.) and supporting UI components like a \ColorPicker\ and \AltText\ dialog. Users can now create, move, resize, and delete these annotations, with support for keyboard navigation, undo/redo, and accessibility features such as alt-text for images and screen reader announcements.
src/display/editor · high confidence
New PostScript lexer, parser, and optimized execution engines
The PostScript processing pipeline in \src/core/postscript\ has been rewritten with a new lexer (\lexer.js\) and parser (\ast.js\) that produce a structured Abstract Syntax Tree. This enables two new optimized execution backends: a JavaScript-based evaluator (\js\_evaluator.js\) that compiles the AST into a dense jump-table IR for faster interpretation, and a WebAssembly compiler (\wasm\_compiler.js\) that generates native Wasm code for even higher performance. These changes replace the previous interpretation method, providing a more robust and efficient way to handle PostScript Type 4 functions.
src/core/postscript · high confidence
New SVG-based drawing and signature editors
The editor now supports freehand drawing, highlighting, and handwritten signatures using a new SVG-based rendering layer. This change introduces dedicated drawer modules (contour, freedraw, highlight, inkdraw, outline, and signaturedraw) that handle path generation, contour extraction, and SVG path construction, replacing previous rendering approaches to improve drawing responsiveness and enable editable ink annotations.
src/display/editor/drawers · high confidence
New and updated Node.js examples for metadata inspection and PDF-to-PNG conversion
Added a new \pdf2png\ example demonstrating how to convert PDF pages to PNG images using the Node canvas library, including a README with setup instructions. Updated the \getinfo\ example to use ES modules and modern promise-based APIs for loading document metadata and text content. These changes reflect the shift to JavaScript modules and provide clearer, more up-to-date usage patterns for Node.js consumers.
examples/node · high confidence
New binary CMap compression tool and format specification
Added a new \external/cmapscompress\ module that introduces a binary format (bcmap) for packaging CMap data to optimize file size. This includes a new \README.md\ documenting the binary structure, a \parse.mjs\ module to convert Adobe CMap text into an intermediate representation, an \optimize.mjs\ module to merge and compress data blocks, and a \compress.mjs\ entry point that writes the final binary output. This tooling enables more efficient storage and transmission of CMap resources.
external/cmapscompress · high confidence
New component-based viewer examples for single-page and full PDF viewing
The \examples/components\ directory now includes new HTML and JavaScript module examples demonstrating how to integrate PDF.js as a built UI component. Specifically, \pageviewer\ and \singlepageviewer\ provide minimal implementations for viewing a single page, while \simpleviewer\ offers a full viewer with support for hyperlinks, text search, and PDF scripting (via a WASM sandbox). These examples use ES modules from \pdfjs-dist\ and require running \gulp dist-install\ to build the library before use.
examples/components · high confidence
New internal debugger tool for inspecting PDF rendering internals
An internal debugging interface is now available at /internal/debugger.html, providing a tree view of the PDF structure and a detailed rendering debugger. The debugger allows stepping through page rendering instructions, inspecting the CanvasRenderingContext2D graphics state (including save/restore stacks), viewing used fonts with download capabilities, and filtering or skipping specific drawing operations. It also supports navigating to specific page numbers or PDF object references directly.
web/internal · high confidence
New mobile-optimized PDF viewer example
Adds a new \examples/mobile-viewer\ directory containing a lightweight, mobile-focused PDF viewer implementation. This example demonstrates how to use the \pdfjs-dist\ library with a simplified UI optimized for touch devices, including a custom CSS layout and a streamlined JavaScript module (\viewer.mjs\) that handles document loading, progress indication, and basic navigation (previous/next page, zoom, page number input). It also includes updated documentation in \README.md\ explaining how to build and run the example using \gulp dist-install\ and \gulp server\.
examples/mobile-viewer · high confidence
New options page with settings sync and migration for Chromium extension
The Chromium extension now includes a dedicated options page that allows users to customize viewer preferences such as theme, scroll mode, and zoom settings. This update introduces support for syncing these settings across devices via Chrome's sync storage, automatically migrating existing local preferences to the new sync area. It also includes logic to migrate deprecated preference names (like \enableHandToolOnLoad\ and \showPreviousViewOnLoad\) to their new equivalents, ensuring a smooth transition for existing users.
extensions/chromium/options · high confidence
New per-test coverage search tool
Added \coverage\_search.mjs\ and \coverage\_format.mjs\ to the \external/ccov\ directory, introducing a new command-line utility that allows users to identify which tests cover specific source lines or functions. The tool downloads and caches a per-test coverage index from the \pdf.js.refs\ repository, supporting options to skip network downloads and specifying custom index paths, while \coverage\_format.mjs\ provides utilities for parsing and mapping coverage output formats.
external/ccov · high confidence
New text-only PDF example with SVG rendering
A new text-only example has been added to the examples folder, demonstrating how to extract text content from a PDF and render it as an SVG graphic. The example uses ES modules (importing pdfjs-dist via .mjs files) and displays the resulting SVG in a container on the page, providing a concrete reference for text-based PDF processing without full page rendering.
examples/text-only · high confidence
Stylelint plugin to detect unused CSS custom properties
A new Stylelint rule, pdfjs/no-unused-custom-properties, has been added to the build system to identify CSS custom properties that are defined but never referenced in the codebase. This linting task helps maintain cleaner stylesheets by flagging unused variables, with support for an ignore list to exclude specific properties from the check.
external/stylelint · high confidence
Architecture
Refactor shared utilities into dedicated ES modules
The shared utility codebase has been reorganized from a single monolithic file into a set of specialized ES modules (e.g., \message\_handler.js\, \image\_utils.js\, \css\_utils.js\, \math\_clamp.js\). This change improves code maintainability and allows the build system to include only the specific utilities required by different parts of the application, potentially reducing the final bundle size.
src/shared · high confidence
Behavioural changes
1 commit (0 fixes) modifying external/bcmaps
A change to existing behaviour in external/bcmaps — 1 commit, 170 files.
external/bcmaps · medium confidence · unverified
Add standard font licenses and documentation
The build now includes the license files for the bundled Liberation and Foxit standard fonts, along with a README detailing their origins and licensing terms (GPL v2 with exceptions for Liberation, BSD for Foxit). This ensures compliance with the open-source licenses governing these font assets used in PDF rendering.
_external/standard\fonts · high confidence
Chromium extension updated to Manifest V3 with PDF viewer improvements
The Chromium extension has been upgraded to Manifest V3, raising the minimum supported Chrome version to 103 and replacing the legacy webRequest API with declarativeNetRequest for more efficient PDF request handling. This update introduces an options page for user configuration, including an opt-out for telemetry, and improves PDF viewing by supporting local file access, preserving referer headers, and correctly rendering PDFs inside \<object\> and \<embed\> tags. The extension now uses a service worker for the background script and includes better handling of POST requests and Content-Disposition headers to ensure PDFs open in the viewer as intended.
extensions/chromium · high confidence
Core PDF parsing and rendering engine updates
The core PDF engine has been updated to improve rendering accuracy and performance. Key changes include fixing the handling of RGBA buffers in the CalRGB colorspace, correcting glyph mapping for TrueType fonts with only Differences entries, and resolving issues with non-standard annotation quadpoints. The engine now better handles corrupt or truncated JPEG images, supports larger images than canvas limits, and improves text selection for Type3 fonts. Additionally, performance optimizations have been applied to image mask rendering, CMap parsing, and stream handling, while various internal refactors modernize the codebase with ES6 classes and improved caching mechanisms.
src/core · high confidence
Improved preprocessor handling for CSS comments and nested directives
The build preprocessor now correctly processes conditional directives (such as \\#if\, \\#else\, and \\#endif\) within CSS files, ensuring that comments wrapping these directives are handled properly. This change extends the existing JavaScript preprocessor logic to CSS assets, allowing for consistent conditional compilation and nesting behavior across both file types. Additionally, the preprocessor now enforces stricter validation, providing clear error messages for malformed structures like unclosed \\#if\ blocks, \\#elif\ without \\#if\, and undefined variables.
external/builder/fixtures · high confidence
Improved text selection and rendering accuracy in the display layer
The display layer now handles text selection more accurately by distinguishing between real spaces and tracking spaces using font metrics, which prevents incorrect merging of spaces and fixes selection issues on HDPI screens. Additionally, rendering artifacts such as spurious white lines between tiled images are resolved by applying integer coordinates to image dimensions, and text spacing with vertical fonts is corrected to ensure proper glyph placement.
src/display · high confidence
Learning examples updated for ES modules and HiDPI support
The learning examples (helloworld, helloworld64, prevnext) have been rewritten to use ES modules (importing pdf.mjs) and the new GlobalWorkerOptions API, replacing the legacy global PDFJS object. They now require explicit workerSrc configuration, support HiDPI screens via devicePixelRatio, and include direction: ltr on canvases to fix text rendering. The base64 example also accepts string data for getDocument.
examples/learning · high confidence
Localization import script rewritten in ESM with automatic cleanup of unmaintained locales
The \external/importL10n/locales.mjs\ script has been converted to use ES modules and now uses the Fetch API to download localization files from Mozilla Central. A key behavioral change is that the script now automatically removes local locale directories that are no longer present in the upstream source, ensuring that only actively maintained translations are kept in the project.
external/importL10n · high confidence
PDF.js distribution updates: legacy build rename, module support, and documentation
The PDF.js distribution package has been updated to reflect modern JavaScript standards and improved clarity. The legacy build folder has been renamed from \-es5\ to \-legacy\ to better indicate its purpose for older environments lacking native Promise support. The main distribution now produces non-translated, non-polyfilled builds by default, supporting modern ECMAScript class features, while a separate \legacy/\ folder remains for browsers without basic Promise support. Additionally, TypeScript declaration files have been renamed from \.d.ts\ to \.d.mts\ to align with ES module conventions, and the webpack configuration has been updated to handle JavaScript module output correctly. Documentation files (README, CODE\_OF\_CONDUCT) have been added or updated to reflect these changes and provide guidance on supported environments.
external/dist · high confidence
PDF.js source files updated to Apache 2.0 license
The license headers in the PDF.js source files (including \src/license\_header.js\, \src/license\_header\_libre.js\, and the main entry points like \src/pdf.js\ and \src/pdf.worker.js\) have been updated to the Apache License, Version 2.0. This change affects the legal terms under which the PDF.js library is distributed and used.
src · high confidence
Rename fullscreen to presentation mode
The viewer's fullscreen capability has been renamed to presentation mode, updating the associated UI labels, CSS classes, and internal identifiers to reflect this change.
web · high confidence
Replace JBIG2 decoder with PDFium WebAssembly implementation
The JBIG2 decoding capability in the \external/jbig2\ module has been replaced with a JavaScript/WASM build of the PDFium decoder. This change introduces \jbig2.js\ and \jbig2.wasm\ as the primary decoding engine, removing the previous standalone implementation. Users will now rely on the PDFium backend for JBIG2 support, which is licensed under Apache-2.0, as reflected by the new \LICENSE\_JBIG2\ and \LICENSE\_PDFJS\_JBIG2\ files.
external/jbig2 · high confidence
Replace legacy build system with Babel-based preprocessor and ESM modules
The build system in external/builder has been rewritten to use ES modules and a new Babel plugin (babel-plugin-pdfjs-preprocessor.mjs) to replace the previous webpack+acorn transform. This change introduces a new preprocessor that handles conditional compilation (PDFJSDev), strips unused code, and manages import paths, while also removing support for require statements. The builder now uses standard ESM imports, improving compatibility with modern bundlers like Vite and ensuring that specific import expressions are left untouched by bundlers.
external/builder · high confidence
Standardized code style and repository configuration
The repository now enforces consistent coding styles and file handling through the introduction of \.editorconfig\, \.prettierrc\, \.stylelintrc\, and \eslint.config.mjs\. These configurations standardize indentation, line endings, and formatting for JavaScript, CSS, JSON, and HTML files, while \.gitattributes\ ensures consistent line endings across the codebase. Additionally, \.gitignore\ and \.prettierignore\ have been updated to exclude build artifacts and generated files, and \.mailmap\ is used to normalize contributor identity information.
(repo-wide) · high confidence
Updated Babel plugin fixtures to reflect new dead-code and static-block optimizations
The Babel plugin's test fixtures in external/builder/fixtures\_babel have been refreshed to verify the plugin's updated behavior. The new expected outputs confirm that the plugin now correctly removes empty class constructors and empty static blocks, evaluates PDF.js-specific build conditions (PDFJSDev.test/eval) at build time, and performs more aggressive dead-code elimination for unused functions and unreachable code paths.
_external/builder/fixtures\babel · high confidence
Updated webpack example to use ES modules and simplified worker configuration
The webpack example has been updated to use ES modules (main.mjs) and modern Webpack configuration. The entry point now imports from 'pdfjs-dist' directly, and the worker is configured via the entry point in webpack.config.js rather than requiring a separate worker-loader setup. The README has been updated to reflect these changes, including instructions for minification and the new zero-configuration worker loading method using 'pdfjs-dist/webpack.mjs'.
examples/webpack · high confidence
Test coverage
Added integration test for the simple viewer component; Added manual test corpus for Digital signature properties UI; Added reftest analyzer test resource files; Added tests for Chrome extension telemetry opt-out functionality; Added type-checking tests for legacy and modern PDF.js APIs; Expanded PDF test suite and test infrastructure; Expanded integration test coverage for PDF viewer features; Extensive unit test suite expansion and modernization; Font test suite and documentation; Statistical comparison tool ported to JavaScript.
Dependencies
Replace kleur dependency with Node.js util.styleText for colorization
The external color utility now uses Node.js's built-in \util.styleText\ instead of the external \kleur\ library. This change removes the dependency on \kleur\ and implements color output logic using native Node.js APIs, respecting environment variables like \NO\_COLOR\, \FORCE\_COLOR\, and \process.stdout.isTTY\ to determine whether to apply text formatting.
external · high confidence
Update build dependencies and enforce Node.js 22+ requirement
The project's development dependencies have been updated to their latest versions, including major upgrades to Babel (8.0.6), ESLint (10.11.0), TypeScript (6.0.3), and Puppeteer (25.11.0). To support these modern tooling versions, the minimum supported Node.js version has been raised to 22.22.3, 24.15.0, or 26.0. Additionally, a new webpack example has been added to demonstrate integration with the \pdfjs-dist\ package using Webpack 5.
(dependencies) · high confidence
Updated Puppeteer to version 23.1.1
The test infrastructure now uses Puppeteer version 23.1.1 for browser automation, ensuring compatibility with the latest browser driver protocols and test execution requirements.
test · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 37.
Lenses
- Code Health 32
- Architecture 81
- Maturity 69
- Readiness 43
- Security 70
- Accessibility 28
- Performance 60
Changes since last survey
- 300 commits — 270 feature/other, 30 fixes
By area
- (repo) — 145 commits
- src/core — 53 commits
- (root) — 19 commits
- .github/workflows — 17 commits
- test/integration — 17 commits
- src/display — 14 commits
- test/unit — 6 commits
- test/test.mjs — 5 commits
- test/pdfs — 4 commits
- web/app.js — 3 commits
- test/resources — 2 commits
- web/pdf_document_properties.js — 2 commits
- external/builder — 1 commit
- external/stylelint — 1 commit
- l10n/ach — 1 commit
- l10n/bqi — 1 commit
- l10n/ca — 1 commit
- l10n/es-ES — 1 commit
- l10n/eu — 1 commit
- src/scripting_api — 1 commit
Notable commits
- fix: Avoid a CPU DoS when auto-sizing text fields (bug 2069428)
- fix: Defer the Firefox features notification until after first-page rendering (bug 2072145)
- fix: Fix TextWidgetAnnotation not inheriting text alignment from AcroForm
- fix: Fix comment tooltip and highlight test races
- fix: Fix few intermittents in integration tests with Chrome
- fix: Fix four JSDoc param entries that do not match the signatures
- fix: Fix incorrect text stroke width caused by stale pixel-width cache
- fix: Fix intermittent failures in the PDFDocumentProperties tests (PR 21938 follow-up)
- fix: Fix the DirectWrite rendering mode used by the reference tests on Windows
- fix: Fix the adjacent-page reordering integration test
- fix: Fix the fill area computation for a rotated tiling pattern
- fix: Fix the magnifier of the reftest analyzer when the images are displayed scaled
- fix: Fix the vertical alignment of the views manager header
- fix: Fix two FreeText integration tests when running headed on a HiDPI screen
- fix: Merge pull request #21841 from Snuffleupagus/src-core-misc-fixes
- fix: Merge pull request #21847 from calixteman/fix-adjacent-page-reordering-test
- fix: Merge pull request #21886 from diogotcorreia/fix-quadding-acroforms
- fix: Merge pull request #21891 from NakuRei/fix-sampled-function-zero-width-domain
- fix: Merge pull request #21897 from calixteman/fix-integration-test-flakes
- fix: Merge pull request #21902 from calixteman/fix-intermittent-chrome
- …and 280 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
mozilla/pdf.js was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 28 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit d52fdf411a6e4d338180687456e0df019e28475e — the exact code this score is about.
- Scored under rubric-2026.09.16 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-2d9048c36d26.