louislam/uptime-kuma
47.4
Weak · 25 September 2026
62.5k
lines of production code
JavaScript
with TypeScript
5
measurements over time
What this system is
This system is a self-hosted uptime monitoring service that tracks the availability and performance of various network resources, including HTTP endpoints, databases, message queues, and DNS records. It provides a web-based dashboard for configuring monitors, managing incidents, and scheduling maintenance, while offering public-facing status pages with customizable analytics and branding. The platform supports real-time alerts through a wide array of notification providers and ensures data integrity through automated retention policies and database maintenance jobs.
How it got here
2021 — v3.0 beta initialization and architecture
22 changes.
This period established the foundational architecture for the Uptime Kuma 3.0 beta, featuring a complete project initialization with modern tooling like Vite and Vue 3. It introduced a major backend overhaul, migrating to better-sqlite3 and Better Auth, while restructuring the frontend into a modular, component-based design with dedicated routing and layout systems.
2022–2024 — monitor expansion and auth migration
14 changes.
This period focused on significantly expanding the monitoring capabilities by introducing numerous new monitor types and a flexible condition system for validation rules. Concurrently, the project migrated its authentication infrastructure to Better-Auth, updating the database schema to support enhanced security features like 2FA and role-based access. The work was supported by comprehensive test coverage expansions, automated release pipelines, and various infrastructure improvements such as timezone handling and multi-architecture support.
2025–2026 — analytics integration and test expansion
6 changes.
This period focused on extending status page capabilities by adding support for multiple third-party analytics providers and enhancing Docker user experience with a warning for outdated tags. Significant effort was also directed toward improving test coverage, including new manual test infrastructure for Redis TLS and gRPC, as well as comprehensive unit tests for various backend monitor types and notification providers.
Features
Add PWA support with manifest, icons, and service worker
The application now supports installation as a Progressive Web App. A new manifest.json defines the app name, theme colors, and shortcuts to key pages (Dashboard, Add Monitor, etc.), while new PNG icons (192x192 and 512x512) and an SVG icon are provided for various display contexts. A service worker is introduced to handle cache management (clearing old caches) and enable push notifications, allowing users to receive monitoring alerts directly on their devices.
public · high confidence
Added push notification examples for multiple languages and environments
New example scripts have been added to the \extra/push-examples\ directory to help users set up periodic push notifications. The collection includes implementations in Bash (curl), C\#, Docker, Go, Java, JavaScript (fetch), PHP, PowerShell, Python, and TypeScript (fetch), along with a \.gitignore\ file and a README for the TypeScript example. These scripts demonstrate how to send periodic HTTP requests to a specified URL to trigger push alerts.
extra/push-examples · high confidence
Automated data retention and SQLite maintenance jobs
Two new background jobs have been introduced to manage database hygiene. The 'clear-old-data' job automatically purges expired records from the heartbeat and stat\_daily tables based on a configurable retention period (defaulting to 365 days), while the 'incremental-vacuum' job runs SQLite-specific optimization commands (incremental vacuum and WAL checkpoint) to reclaim disk space and improve performance.
server/jobs · high confidence
Automated release process with AI-generated changelogs
The release workflow in extra/release has been restructured into a modular, automated pipeline. It now includes a dedicated stage that generates release notes using an LLM to categorize changes (e.g., bug fixes, new features, security updates) and creates a draft GitHub Release. The process also automates the creation of release branches and pull requests, squash-merges them into master, builds the frontend distribution once, and pushes Docker images to both Docker Hub and GitHub Container Registry (ghcr.io). A new helper script optimizes dependency installation for the release environment by temporarily isolating only the required packages (dotenv, semver, tar).
extra/release · high confidence
Database schema updates for new monitor types and authentication migration
The database schema has been updated to support new monitor types (NTP, TLS, SFTP, RabbitMQ, SMTP, System Service, Globalping, and manual monitors) and enhanced existing ones (MQTT, SNMP, Ping, JSON Query, and GameDig). Key changes include adding columns for NTP thresholds, TLS alerts, SFTP authentication, RabbitMQ credentials, SMTP security, and Globalping location/protocol. The GameDig monitor type has been migrated from v4 to v5 game IDs. Authentication has been migrated to Better-Auth, introducing new tables for users, sessions, accounts, and verifications, along with support for 2FA, admin roles, and username-based login. Additionally, the schema now supports configurable response data storage, websocket subprotocols, domain expiry notifications, and maintenance window tracking.
_db/knex\migrations · high confidence
Expanded notification provider support and configuration options
The notification configuration interface now supports a significantly wider range of providers, including new integrations for 360messenger, 46elks, AlertNow, Alerta, AliyunSms, AmootSMS, Bale, Bark, BearSMS, Bitrix24, Brevo, CallMeBot, Cellsynt, ClickSendSMS, ClickUp, DingDing, and Discord. Existing providers have also received enhanced configuration options, such as Discord's ability to send to forum posts or threads, DingDing's mention capabilities, and Bark's API version selection. These changes allow users to monitor their systems using a broader variety of communication channels and customize how alerts are delivered.
src/components/notifications · high confidence
Frontend application shell and core configuration
The frontend application entry point has been established with a new Vue 3 app structure. This includes the main initialization script (main.js) which registers the router, internationalization (i18n), and UI mixins, as well as the root App component that handles locale setting and country flag emoji polyfilling. The change introduces a comprehensive routing configuration (router.js) defining paths for the dashboard, settings, status pages, and maintenance management. It also adds the core internationalization setup (i18n.js) with support for numerous languages and RTL direction handling, a centralized icon library (icon.js) using FontAwesome, and shared utility modules (util.ts, util-frontend.js) for timezone management, toast notifications, and common constants.
src · high confidence
Initial database schema definition for core monitoring entities
The database initialization script now explicitly defines the schema for core tables including user, monitor, heartbeat, incident, maintenance, and status\_page. This establishes the foundational data structure for user accounts, monitoring configurations, health check records, incident tracking, scheduled maintenance windows, and public status pages, ensuring these entities are created with appropriate constraints, indexes, and foreign key relationships during setup.
db · high confidence
New UI components for API keys, badges, and certificate details
This change introduces several new Vue components in the frontend to enhance the user interface for specific features. The API Key management now uses a dedicated dialog (APIKeyDialog.vue) that allows users to set custom names and expiry dates for keys. A new Badge Link Generator (BadgeLinkGeneratorDialog.vue) provides a UI for configuring and previewing status badges with various styles and parameters. Additionally, certificate monitoring details are now displayed using new CertificateInfo and CertificateInfoRow components, which present validity status, subject, issuer, and expiration information in a structured format.
src/components · high confidence
New and extracted monitor types with condition support
This change introduces a new Manual monitor type for static status control and extracts several existing monitor implementations into dedicated files (DNS, GameDig, Globalping, Group, gRPC, MongoDB, MQTT, MSSQL, MySQL, NTP, OracleDB). For the database monitors (MSSQL, MySQL, OracleDB) and DNS, this extraction enables the new 'Monitor Conditions' feature, allowing users to define specific validation rules against query results or DNS records rather than just checking connectivity.
server/monitor-types · high confidence
New notification providers added: 360messenger, 46elks, Alerta, AlertNow, AliyunSMS, Apprise, Bale, Bark, BearSMS, Bitrix24, Brevo, CallMeBot, Cellsynt, ClickSendSMS, ClickUp, DingDing, and Webpush
The server/notification-providers directory now includes a large set of new notification provider implementations, expanding the system's ability to send alerts via WhatsApp (360messenger), SMS (46elks, AliyunSMS, AmootSMS, Bale, BearSMS, Cellsynt, ClickSendSMS), webhooks (AlertNow, Apprise, Bitrix24, ClickUp, DingDing), push notifications (Bark, Webpush), email (Brevo), and other services (Alerta, CallMeBot). These additions provide users with significantly more options for receiving uptime and status alerts through their preferred communication channels.
server/notification-providers · high confidence
New utility classes and migration status server
Added three new utility modules in server/utils: ArrayWithKey, a key-value array structure supporting push, pop, shift, and last operations; LimitQueue, which extends ArrayWithKey to automatically remove the oldest element when a size limit is exceeded; and SimpleMigrationServer, a lightweight Express server that displays migration progress and provides a /migrate-status endpoint to keep Docker healthchecks happy during server migrations.
server/utils · high confidence
New utility scripts and test infrastructure in the extra directory
The extra directory now includes a suite of new utility scripts and test helpers. This adds a Go-based healthcheck tool (with a build script) to verify server availability, and a simple DNS server for testing DNS monitoring types. It also introduces scripts to manage Pull Request testing workflows (checkout, rebase, and Docker-based PR testing), automate demo server deployments, and download distribution artifacts. Maintenance and cleanup tools are added for resetting database migration states, removing 2FA, resetting passwords, and cleaning up Playwright test data. Additionally, validation scripts ensure correct formatting for language JSON files and Knex migration filenames, and a script is provided to download the latest Apprise package.
extra · high confidence
Project initialization with comprehensive tooling and documentation
The repository is initialized with a complete development and operational setup. This includes configuration files for ESLint, Prettier, Stylelint, and TypeScript to enforce code quality and formatting standards. The frontend build is configured via Vite with support for SCSS, RTL CSS, and compression. Essential project documentation such as the README, CONTRIBUTING guide, Code of Conduct, and Security policy are added, alongside a strict policy against AI-generated code submissions. Operational assets include a Docker Compose file, a PM2 ecosystem configuration, and a Playwright setup for end-to-end testing.
(repo-wide) · high confidence
Server-side API caching with client cache disabled
The server now uses a local in-memory cache for API responses, configured to prevent browsers from caching data by setting the 'cache-control' header to 'no-cache'. This ensures that while the server can serve repeated requests faster, clients always fetch fresh data from the server.
server/modules/apicache · high confidence
Support for multiple third-party analytics providers on status pages
Status pages can now be configured to inject tracking scripts from Google Analytics, Umami, Plausible, Matomo, and Rybbit. The server/analytics module provides the logic to validate the required configuration (IDs and script URLs) and generate the appropriate HTML script tags for each provider, allowing users to choose their preferred analytics solution.
server/analytics · high confidence
Warning displayed when using the outdated 'latest' Docker tag
Users running Uptime Kuma via the 'latest' or '1' Docker tags will now see an overlay warning on the setup page indicating that this version is outdated and no longer receives security or bug fixes. The warning encourages switching to a recommended tag and provides a link to documentation, with an option to acknowledge and dismiss the message to continue using the legacy version.
extra/docker-latest-warning · high confidence
Architecture
Introduce new Vue Router-based page architecture
The application's frontend navigation has been restructured to use Vue Router, replacing the previous view-switching mechanism with dedicated page components. This change introduces new entry points for core workflows, including AddStatusPage for creating status pages, Dashboard for the main monitoring overview, Details for individual monitor information, EditMaintenance for scheduling maintenance windows, and EditMonitor for configuring monitors. This architectural shift enables cleaner URL routing, distinct component lifecycles for each page, and improved state management for the user interface.
src/pages · high confidence
Introduction of dedicated model classes for core entities
The server model layer has been refactored to use dedicated classes for core entities, replacing the previous generic usage of the base BeanModel. New model files have been introduced for API keys, Docker hosts, domain expiry, groups, heartbeats, incidents, maintenance, monitors, proxies, remote browsers, status pages, tags, and users. This change centralizes entity-specific logic, such as JSON serialization, status resolution, and data validation, within these specific model classes, improving code organization and maintainability.
server/model · high confidence
Introduction of dedicated server routers for API, authentication, and status pages
The server routing logic has been reorganized into dedicated modules: \api-router.js\ now handles push monitor heartbeats, badge generation, and entry-page resolution; \better-auth-router.ts\ manages user setup and authentication via the better-auth library; and \status-page-router.js\ serves status page views, RSS feeds, manifest files, incident history, and overall status badges. This change centralizes request handling for these specific areas, improving code structure and maintainability.
server/routers · high confidence
Refactored server socket handlers into dedicated modules
The server's socket event handling logic has been reorganized from a monolithic structure into specific, dedicated handler files (e.g., api-key, cloudflared, status-page, maintenance). This change improves code maintainability and separation of concerns by isolating the logic for distinct features like API key management, Cloudflare tunnel control, and status page incidents into their own modules.
server/socket-handlers · high confidence
Behavioural changes
Add multi-architecture support for the uptime-kuma-push binary
The Dockerfile for the extra/uptime-kuma-push component has been updated to use a multi-arch Node base image, enabling the build process to correctly select and package the appropriate precompiled binary for linux/amd64, linux/arm64, and linux/arm/v7 platforms. This change ensures the push utility runs reliably across different CPU architectures without requiring manual binary selection.
extra/uptime-kuma-push · high confidence
Archived legacy database migration scripts
The \db/old\_migrations\ directory now contains a comprehensive collection of historical SQL patches that established the core database schema. These files document the evolution of the \monitor\, \status\_page\, \user\, and \notification\ tables, including the addition of support for 2FA, Docker integration, Kafka and MQTT monitoring, gRPC checks, proxy configurations, and maintenance windows. A new README explicitly directs users to create new migrations in \db/knex\_migrations/\ instead, ensuring that these legacy patches remain as historical records without interfering with current migration workflows.
_db/old\migrations · high confidence
Docker infrastructure restructured with Node.js 26 base and Let's Encrypt Gen Y root certificates
The Docker build system has been reorganized into modular components, introducing a new Go-based healthcheck builder and a Debian-based base image layer that upgrades the runtime to Node.js 26. This update includes the manual installation of Let's Encrypt Gen Y root certificates to ensure TLS connectivity on Debian Bookworm, integrates Cloudflare's package repository for the cloudflared binary, and embeds the nscd service for improved DNS caching. The main application image now builds on this slimmed-down base, which also installs Apprise via a dedicated deb package and configures sudo permissions for the node user to manage services.
docker · high confidence
Embed axios-ntlm 1.3.0 with secure random generation
The server now includes the axios-ntlm library (version 1.3.0) directly within the project, providing NTLM authentication support for HTTP requests. This update replaces the previous pseudo-random value generation in the hash module with \crypto.randomInt\, ensuring cryptographically secure random values are used during the NTLM handshake process.
server/modules/axios-ntlm · high confidence
Initial CSS architecture and dark mode support
The application's styling has been consolidated into a new SCSS structure under src/assets, introducing a dedicated vars.scss file that defines the core color palette and dark mode variables. This change brings native dark mode support to key UI components, including the multiselect dropdowns, the Vue datepicker, and general form elements, while also establishing a specific font stack for Persian (Farsi) localization.
src/assets · high confidence
Introduce dedicated layout components for application structure
The application now uses specific layout components to manage the user interface structure. A new \EmptyLayout.vue\ provides a minimal wrapper for routes that do not require the main navigation. The primary \Layout.vue\ component establishes the core shell, featuring a desktop header with navigation links (Dashboard, Status Pages, Settings, Help) and a user dropdown, a mobile-optimized header, and a bottom navigation bar for mobile devices. It also handles connection error messaging, version update notifications, and conditional rendering of the login dialog based on authentication state.
src/layouts · high confidence
Introduction of Better Auth authentication system
The server now utilizes the Better Auth library to manage user authentication, replacing the previous custom implementation. This change introduces a new authentication architecture in the server directory, featuring dedicated modules for handling user sessions, API key verification, and basic HTTP authentication. The system supports username-based login, integrates with rate limiting for both login and API attempts, and includes a migration path to transfer existing user credentials to the new schema. Additionally, it provides a legacy login function to ensure compatibility during the transition period.
server · high confidence
New frontend mixin architecture for core UI concerns
The application now uses a set of dedicated Vue mixins in src/mixins to handle specific frontend responsibilities, replacing or refactoring previous inline logic. The new datetime.js mixin centralizes date and time formatting using dayjs with support for user-selected or auto-detected timezones. The lang.js mixin manages dynamic language switching and locale updates. The mobile.js mixin handles responsive layout adjustments by detecting screen width. The public.js mixin provides shared data and computed properties for public-facing status pages. The socket.js mixin manages real-time WebSocket connections, event handling, and UI state synchronization. The theme.js mixin controls dark/light mode application, status page theming, and theme-color meta tag updates. This refactoring improves code organization and maintainability for these core UI features.
src/mixins · high confidence
Settings page restructured into modular components
The Settings page has been refactored from a single monolithic view into a set of distinct, component-based sections (API Keys, About, Appearance, Docker, General, Monitor History, Notifications, Proxies, Remote Browsers, Reverse Proxy, Security, and Tags). This change improves the organization and maintainability of the settings interface, allowing users to navigate specific configuration areas more clearly while preserving all existing functionality such as API key management, theme selection, proxy configuration, and notification settings.
src/components/settings · high confidence
Fixes
Add local timezone plugin to fix timezone handling
The application now includes a local copy of the dayjs timezone plugin (in both server and src modules) to resolve issue \#2318. This addition introduces \tz()\ and \offsetName()\ methods to dayjs instances, enabling correct conversion and display of times across different time zones, which was previously missing or broken.
server/modules/dayjs, src/modules/dayjs · high confidence
Fix default value support for TEXT columns in MariaDB
The MySQL2 dialect compiler now correctly generates SQL for setting default values on TEXT fields when using MariaDB. Previously, Knex could not set defaults for these columns; the new implementation wraps the default value in an expression syntax (e.g., \default (...)\) to comply with MariaDB 10.2+ requirements, ensuring schema migrations involving TEXT defaults succeed.
server/utils/knex · high confidence
Test coverage
Added E2E test utilities for screenshots and database snapshots; Added gRPC manual test infrastructure; Added manual test infrastructure for Redis TLS connectivity; Added test infrastructure for Radius and database mocking; Added tests for Indigo provider, NTLM hash utility, and error handling; Added tests for monitor condition expression evaluation and operators; Added unit tests for backend monitor types; Expanded E2E test coverage for core application features; Expanded backend test coverage for new monitor types and infrastructure.
Dependencies
Uptime Kuma 3.0.0 Beta: Major dependency overhaul and Node.js 26 upgrade
This release upgrades the application to version 3.0.0-beta.0, requiring Node.js 26.2.0 or later. The dependency tree has been significantly modernized: the database backend has migrated from node-sqlite3 to better-sqlite3, and authentication has switched from bcryptjs to better-auth. Frontend tooling has been updated to Vite 5.4.15 with Vue 3.4, and testing infrastructure now uses Playwright 1.61.1. Additionally, several new utility packages were added to the \extra/\ directory, including \docker-latest-warning\, \kuma-pr\, and \uptime-kuma-push\ for build and release automation.
(dependencies) · 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
Score
- CAI 37 → 47 (+10.1)
- Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 61 → 50 (-10.7)
- Architecture 69 → 67 (-2.1)
- Maturity 58 → 59 (+0.5)
- Readiness 12 → 41 (+29.6)
- Security 62 → 70 (+7.8)
- Accessibility 48 (new)
Resolved (154)
- (anonymous) (cognitive 17) (server/routers/api-router.js)
- (anonymous) (cognitive 17) (server/server.js)
- (anonymous) (cognitive 20) (server/routers/api-router.js)
- (anonymous) (cognitive 24) (server/socket-handlers/status-page-socket-handler.js)
- (anonymous) (cognitive 26) (server/routers/status-page-router.js)
- (anonymous) (cognitive 28) (server/setup-database.js)
- (anonymous) (cognitive 33) (server/server.js)
- (anonymous) (cyclomatic 18) (server/server.js)
- (anonymous) (cyclomatic 18) (server/setup-database.js)
- A Node.js test runner guide exists, but there is no mention of how tests are written or run in the context of a backend project. (test/backend-test/README.md)
- Boundary-crossing change coupling: 2025-12-29-0000-remove-line-notify.js ↔ NotificationDialog.vue (db/knex_migrations/2025-12-29-0000-remove-line-notify.js)
- Boundary-crossing change coupling: 2025-12-29-0000-remove-line-notify.js ↔ index.js (db/knex_migrations/2025-12-29-0000-remove-line-notify.js)
- Boundary-crossing change coupling: 2025-12-29-0000-remove-line-notify.js ↔ websocket-upgrade.js (db/knex_migrations/2025-12-29-0000-remove-line-notify.js)
- Boundary-crossing change coupling: ActionSelect.vue ↔ EditMonitor.vue (src/components/ActionSelect.vue)
- Boundary-crossing change coupling: monitor.js ↔ mssql.js (server/model/monitor.js)
- Boundary-crossing change coupling: resend.js ↔ NotificationDialog.vue (server/notification-providers/resend.js)
- Boundary-crossing change coupling: resend.js ↔ Resend.vue (server/notification-providers/resend.js)
- Boundary-crossing change coupling: resend.js ↔ index.js (server/notification-providers/resend.js)
- Change coupling: NotificationDialog.vue ↔ Resend.vue (src/components/NotificationDialog.vue)
- Change coupling: notification.js ↔ Resend.vue (server/notification.js)
- …and 134 more
New (225)
- (anonymous) (cognitive 127) (server/server.js)
- (anonymous) (cognitive 16) (src/modules/dayjs/plugin/timezone/index.js)
- (anonymous) (cognitive 18) (server/modules/dayjs/plugin/timezone.js)
- (anonymous) (cognitive 22) (server/routers/api-router.js)
- (anonymous) (cognitive 26) (server/routers/api-router.js)
- (anonymous) (cognitive 31) (server/routers/status-page-router.js)
- (anonymous) (cyclomatic 17) (src/modules/dayjs/plugin/timezone/index.js)
- (anonymous) (cyclomatic 20) (server/modules/dayjs/plugin/timezone.js)
- (anonymous) (cyclomatic 95) (server/server.js)
- AmootSMS.send (cognitive 28) (server/notification-providers/amootsms.js)
- AmootSMS.send (cyclomatic 26) (server/notification-providers/amootsms.js)
- Boundary-crossing change coupling: ntfy.js ↔ Ntfy.vue (server/notification-providers/ntfy.js)
- Boundary-crossing change coupling: smtp.js ↔ SMTP.vue (server/notification-providers/smtp.js)
- Change coupling: config.js ↔ api-router.js (server/config.js)
- Change coupling: notification.js ↔ index.js (server/notification.js)
- Change coupling: server.js ↔ General.vue (server/server.js)
- ClassTooLong: Database (server/database.js)
- ClassTooLong: Monitor (server/model/monitor.js)
- ClassTooLong: UptimeCalculator (server/uptime-calculator.js)
- Critical CVE: [GHSA redacted] (package-lock.json)
- …and 205 more
Changes since last survey
- 109 commits — 87 feature/other, 22 fixes
By area
- src/lang — 44 commits
- (root) — 17 commits
- (repo) — 11 commits
- extra/release — 8 commits
- src/components — 8 commits
- .github/workflows — 6 commits
- server/database.js — 2 commits
- server/modules — 2 commits
- src/pages — 2 commits
- test/backend-test — 2 commits
- db/knex_migrations — 1 commit
- extra/docker-latest-warning — 1 commit
- public/apple-touch-icon-precomposed.png — 1 commit
- server/better-auth.ts — 1 commit
- server/monitor-types — 1 commit
- server/radius-client.js — 1 commit
- test/e2e — 1 commit
Notable commits
- fix: Fix workflow and add warning to latest docker tag (#7849)
- fix: Revert "chore: update to 2.5.1" (#7748)
- fix: Revert "chore: update to 2.5.1" (#7750)
- fix: [autofix.ci] apply automated fixes
- fix: chore: fix duplicate workflow by using free model (#7765)
- fix: chore: fix flaky tests (#7778)
- fix: chore: fix flaky tests (#7802)
- fix: chore: fix release workflow (#7743)
- fix: fix(i18n): translate close button label in incident modal (#7856)
- fix: fix(radius): treat Access-Challenge as successful response (#7700) (#7702)
- fix: fix(real-browser): always close browser context (#7820)
- fix: fix: move afterCreate to initial mariadb pool config (#7718)
- fix: fix: Fix close-incorrect-issue script for @actions/github v9 exports (#7864)
- fix: fix: accepted status codes custom range discarded on tag creation (#7690)
- fix: fix: analytics_type's enum check was not removed, even the data type changed to string on SQLite (#7729)
- fix: fix: better auth register issue (#7855)
- fix: fix: bump jsonata to 2.2.2 (#7838)
- fix: fix: iOS PWA icon has black background (#7787)
- fix: fix: omit content headers from cached 304 responses (#7637)
- fix: fix: release with wrong version number (#7754)
- …and 89 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
louislam/uptime-kuma 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 25 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 b6adc19d00e4e6700f4b6ffc64a5c4e105e8004c — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-dd72cc24c749.