CloudCoverage
Is the code your team is shipping well covered?
Most coverage trend charts plot a Project’s total coverage over time. That’s valuable, but on a large project total coverage is a lagging metric: a real change in how a team tests takes a long time to make a meaningful mark on the total. Diff coverage — the coverage of the lines a change touches — is a leading one. If your team is covering the code it ships, diff coverage is high now, and total coverage trends upward over time.Every Project’s Trends page now includes a Diff Coverage chart, showing how well tested the code you merged was, week by week. Diff coverage is plotted as a line, with the executable lines changed in each period as bars behind it, so you can tell a meaningful week from a quiet one. Ranges run from 1 month to 3 years.There’s nothing to configure — the chart is built from the coverage you already upload on your default branch. See Diff Coverage Over Time for details.CloudPlugins
Build Secrets (beta)
Some linters need a credential to do their job: an API token to reach a private package registry, a license key for a commercial tool. Until now, there was no way to hand one to a cloud build without committing it to your repository.Build Secrets are encrypted environment variables you set per project. Open Project Settings → Secrets, add a name and a value, and it’s available to that project’s builds. Values are write-only — once saved, a secret is encrypted and can never be read back, only rotated or deleted. The list shows names and timestamps, and only project admins can see or change it.Adding a secret doesn’t hand it to every plugin. The Qlty CLI runs each plugin in a subprocess with a restricted environment and passes through only the variables that plugin’s definition names, so you opt each plugin in from yourqlty.toml:CLICloudCoverage
Selective Coverage on pull requests (beta)
Qlty has always supported partial test runs through tags. Publish your unit tests asunits and that suite is tracked on its own, because a tag runs a predictable set of tests each time and every report for it is comparable to the last.Test optimization tools break that assumption. To keep pull request builds fast on a large codebase, they choose a different subset of tests for every build based on what the change touched. Each report covers a unique slice of the codebase, comparable to nothing before it, and to a coverage tool it looks like a sudden, dramatic drop. The coverage such a run reports would be misleading, so our recommendation has been not to publish it at all.Selective Coverage makes those runs usable by overlaying the selected report on the pull request’s diff. Add --selection to qlty coverage publish in the builds that run a dynamically selected subset of your tests:qltysh/qlty-action v2.3.0, or CircleCI orb qltysh/qlty-orb 0.1.2 — or newer. Publish full-suite coverage on your default branch to keep totals and baselines accurate. See Selective Coverage for details.CLICloudCoveragePlugins
Seat-based licensing
Qlty Cloud now licenses Workspaces by seats instead of active contributors. A new Seat Management settings page lets admins assign seats to contributors and see how many are in use. See Seats for details.Verified seat assignment
When you assign a seat on the Seat Management page, Qlty now verifies the GitHub username exists before granting the seat. A confirmation dialog shows the account’s avatar, name, and whether they belong to your GitHub organization, so you can catch typos and confirm you’re assigning the right person. Non-existent accounts are rejected before any seat is used.Search when adding projects
The Add Projects page now has a search box that filters across all accessible repositories server-side, so you no longer have to page through every repo to find one in a large Workspace.--skip-source-fetch for qlty coverage publish
qlty coverage publish now accepts --skip-source-fetch, matching qlty check and qlty fmt. When set, the command skips fetching remote sources and falls back to the default configuration if a source is not cached locally. See coverage publish for details.VB.NET maintainability analysis
The Qlty CLI now analyzes.vb files for maintainability — complexity, duplication, and code smells — with VB.NET’s case-insensitive member semantics handled correctly.Scala maintainability analysis
The Qlty CLI now analyzes Scala (including Scala 3) source files for maintainability — complexity, duplication, and code smells.Knip honors .qlty/configs/
Fixed Knip not picking up a configuration file placed under .qlty/configs/ in nested-package layouts. Qlty now passes the config path to Knip explicitly.RuboCop AllCops: Exclude now respected
Qlty now passes --force-exclusion to RuboCop, so AllCops: Exclude patterns in your .rubocop.yml are honored even though Qlty invokes RuboCop with explicit file targets.editorconfig-checker findings no longer dropped
Fixed a bug whereeditorconfig-checker results were silently discarded when the tool reported a -1 line number for an issue it couldn’t locate. All findings are now reported.CLICoverage
Verified CLI downloads in GitHub Actions
The Qlty GitHub Actions now verify the Qlty CLI’s Sigstore attestation before running it. Each action checks the downloaded archive against its signed provenance using the GitHub CLI, giving your workflows tamper-evident assurance that the binary came from Qlty. Verification is automatic and uses your existing${{ github.token }}.See Integrity Verification for details.More coverage formats in the GitHub Action
The Qlty coverage GitHub Action now acceptsdotcover and xccov-json as format values, so you can upload JetBrains dotCover and Xcode xccov JSON reports directly from your workflow without converting them first.See Generating Coverage Data for details.Node 24 runtime for GitHub Actions
The Qlty GitHub Actions now run on the Node 24 runtime, clearing the deprecation warning GitHub showed for the older Node 20 runtime and keeping the actions on a supported runtime ahead of GitHub’s automatic migration.Windows support for the fmt action
The Qltyfmt GitHub Action now runs on Windows runners in addition to Linux and macOS, so Windows-based CI pipelines can auto-format code with Qlty.CLICloudCoverage
C and C++ language support
Qlty now provides maintainability analysis for C and C++. This includes complexity, duplication, and code smells, available in both the Qlty CLI and Qlty Cloud. See C / C++ for details.Travis CI push branch detection
Travis CI users no longer need to set the branch name manually when uploading coverage. The Qlty CLI now detects the branch automatically on Travis push builds, the same way it already does for other CI providers.Plugins
editorconfig-checker plugin
We’ve added a plugin for editorconfig-checker, which verifies that your codebase follows the rules defined in.editorconfig.Plugins
Plugins
golangci-lint v2 support
The Qlty plugin for golangci-lint now supports the v2 output format in addition to v1, so you can upgrade golangci-lint without losing report parsing.CLICoverage
Client-side coverage summing
The Qlty CLI can now sum multiple coverage reports on the client before upload, complementing our existing server-side coverage merging. This is useful in CI workflows that already collect multiple coverage files on a single machine.Cloud
Resync renamed repositories
When a GitHub repository is renamed, you can now click a Resync button on the Add Project page to update Qlty’s reference to the new repository name, keeping the Project’s existing history and settings instead of having to re-add it from scratch.CLIPlugins
Python 3.13+ support
The Qlty CLI now supports multiple Python runtime releases, enabling Python 3.13 and newer for plugins that require recent Python versions.CLI
On-demand source fetching
You now have precise control over when private sources are loaded — useful in offline or air-gapped environments, and for pre-fetching sources once in CI before running multiple analyses. A newqlty sources fetch command fetches the sources defined in qlty.toml without running analysis, and a new --skip-source-fetch flag tells qlty check and qlty fmt to use what’s already on disk.CLI
Cloud
Improved SAML re-authentication
When a user accessing a Workspace with SAML enabled needs to re-authenticate, Qlty Cloud now surfaces a clearer re-authentication page with explicit instructions, rather than a generic error.CloudCoverage
Always-available PR Coverage tab
The Pull Request Coverage tab now renders even when a base coverage report is missing, so reviewers always have a coverage view to work from. When there is no base report, diff coverage is displayed as “N/A” rather than blocking the page.CloudCoverage
Better missing coverage data messaging
When a Project is missing expected coverage data, the Coverage page now displays a clearer message explaining what’s missing and how to resolve it.CLI
HTTPS required for all outgoing requests
The Qlty CLI now requires HTTPS for all outgoing HTTP requests, including source fetching and tool downloads. All network activity from the CLI is encrypted in transit.Coverage
Jenkins CI auto-detection
We now support automatic detection of build metadata from Jenkins. Uploading coverage from a Jenkins build only requires the path to the coverage data file. See setting up coverage with Jenkins for the full walkthrough.CloudCoverage
Coverage page redesign
A clearer view of how a pull request moves your coverage. The Project Coverage page has been rebuilt from the ground up, with:- Improved stats cards
- A Files Changed tab with rendered file diffs
- A Components tab showing per-Component coverage for the pull request
- A collapsible sidebar with coverage comparison details
Coverage
Coverage summary comment improvements
Coverage summary comments on pull requests have been redesigned. The new comment includes:- An updated rating display
- A Modified Components section showing which Components changed in the pull request
- An AI prompt section with a ready-to-paste prompt for your AI coding agent to write the missing tests
- The Qlty header image and clearer formatting
CLICoverage
More coverage formats supported
The Qlty CLI now ingests two more coverage report variants without any conversion step:- Apple’s
xccov-jsonformat produced byxccovfrom Xcode coverage data - JaCoCo reports containing
<group>elements, the standard output for multi-module Maven and Gradle projects
CloudCoverage
Coverage Report page
Full visibility into how each commit’s coverage report was built — and a way to clean it up when something goes wrong. Qlty Cloud now includes a Coverage Report details page for each commit, showing summary metrics and every upload that contributed to the report. Project admins can also delete individual reports or uploads from Coverage Settings when a bad upload needs to be removed.Cloud
Maintainability shown as effort duration
Maintainability is now displayed as estimated remediation effort (e.g. “2h 30m”) in addition to issue counts, making it easier to compare projects and plan remediation work.Coverage
Bitrise CI auto-detection
We now support automatic detection of build metadata from Bitrise. Uploading coverage from a Bitrise build only requires the path to the coverage data file.CLI
Configuration typo warnings
The Qlty CLI now emits warnings when yourqlty.toml contains unexpected attributes, helping you catch typos and outdated configuration syntax before they silently change your analysis.Cloud
API rate limiting
Qlty API requests are now rate limited to protect service availability for all users. Clients that exceed the limit receive a429 Too Many Requests response with standard rate-limit headers, so your client can back off cleanly.CLICoverage
Automatic path fixing for coverage
qlty coverage publish now automatically detects and corrects common path mismatches between coverage reports and the repository, including paths produced inside Docker containers and CI runners. This works in addition to the explicit --add-prefix and --strip-prefix options. See Path Fixing for details.CLIPlugins
Install-only mode
qlty check now supports an --install-only flag that installs the plugins required by your configuration without running them. Use it to warm caches in CI so the analysis step runs faster on every build.CloudCoverage
Onboarding flow
We’ve shipped an updated onboarding flow for new users and new Workspaces, walking through GitHub installation, Project selection, and coverage setup.CLI
Coding with AI agents
We’ve published a new guide on coding with AI agents that documents recommended patterns for using the Qlty CLI with Claude Code, Cursor, GitHub Copilot, OpenAI Codex, and other agents that can run shell commands.CloudCoverage
Applications
For teams that ship a single product across several repositories, Applications give you one view of code quality at the product level. Group related Projects together at the Workspace level and see aggregated maintainability, duplication, security, and coverage metrics across all of them.Enable Applications from Settings > Features, then assign Projects from each Project’s Settings > General. See the Applications documentation for details.Churn view in Project Hotspots
The Project Hotspots page now includes a churn view that combines maintainability issues with file change frequency to surface the files most likely to benefit from refactoring.Cloud
Self-service Workspace deletion
Workspace Owners can now delete their own Workspace directly from Workspace Settings, without needing to contact support.Cloud
Improved Projects index
The Workspace Projects page now supports server-side sorting, a column picker, and shows the timestamp of the last build for each Project.Cloud
Components
Track per-team or per-service code quality without splitting your repo. Qlty Cloud now supports Components, which let you group files inside a Project (for example, by service, package, or directory) and view maintainability metrics for each group independently.Components are particularly useful for monorepos and modular codebases. Configure them from your Project’s settings.Cloud
Workspace Activation page
A new Activation page in Workspace Settings shows which Projects are activated, with sorting, filtering, and pagination — making it easier to manage Qlty across large organizations.Plugins
Cloud
Delegated billing
Delegated billing lets a single Workspace manage payment and subscription for one or more other Workspaces. This is useful for agencies, consultancies, and parent organizations that pay for multiple Workspaces.CLICoverage
JaCoCo source path override
Java and Kotlin projects with non-standard source layouts can now point JaCoCo coverage uploads at the right directories by setting theJACOCO_SOURCE_PATH environment variable before running qlty coverage publish.Cloud
Workspace Manager permissions
A new Workspace Manager role lets you delegate workspace-level administration to specific users without granting them GitHub Organization Owner permissions. See User Permissions for the full permissions matrix.CLI
GitHub Merge Queue support
The Qlty CLI now has initial support for GitHub Merge Queues. We also detect merge groups across any CI provider that listens to GitHub push events (#2320).Cloud
Analysis Minutes progress bar
Workspace billing pages now show an Analysis Minutes progress bar and a usage breakdown table so you can see at a glance how your build minutes are being consumed.CLICloudCoveragePlugins
Workspace pausing
You can now pause a Workspace from its settings page. While paused, Qlty stops running analysis and coverage reporting — useful while a repository is dormant or when you need to temporarily halt billable usage without deleting the Workspace.Default coverage validation
qlty coverage publish now validates coverage reports by default, catching path mismatches and malformed reports before they corrupt your metrics. If you need to temporarily disable validation while fixing a report, use --no-validate:zizmor plugin
We’ve added a plugin for zizmor, a security analyzer for GitHub Actions workflows.CLICoveragePlugins
Coverprofile parser
The Qlty CLI now parses Go’s nativecover.out (Coverprofile) format. You can upload Go coverage data without converting to another format first.Faster debugging of plugin install failures
When a plugin fails to install, the Qlty CLI now surfaces the installation log directly in the main build log and points you to the full debug log on disk. No more guessing why a CI build broke during plugin setup.Cloud
Project Hotspots
Qlty Cloud now includes a Hotspots page on every Project. Hotspots highlight the files most likely to need attention by combining maintainability, duplication, and (in later updates) churn data.Named API access tokens
API access tokens now have a name, description, and optional expiration date. You can manage your tokens from your user settings page. Existing tokens will continue to work — you can add metadata to them or rotate them at any time.CloudCoverage
Project Trends
Qlty Cloud now includes a Trends tab on every Project. The Trends view visualizes how key quality metrics — including maintainability, duplication, and code coverage — change over time on your default branch.CloudCoverage
Qlty API (beta)
Pull Qlty data into your own tools. The Qlty API is now in beta, with endpoints for listing and reading Projects and for reading analysis Issues for a Project. Authenticate with a personal access token from your user settings to query any Workspace you can access. See the API Reference for details.Coverage Diff commit status setting
A new workspace-level setting controls whether Qlty posts a separate Coverage Diff commit status to GitHub (in addition to the existing Coverage status). Toggle it from Workspace Settings if your branch protection rules don’t expect this status.CLICoverage
Git-free coverage publishing
You can now publish coverage from environments that don’t have a Git working directory — for example, containers that only carry the test artifacts. Pass--override-commit-time to qlty coverage publish to skip Git detection.CLICoverage
CLI
Cloud
Qlty Cloud Enterprise plan
We’ve added a new Enterprise plan for Qlty Cloud, tailored for organizations with advanced needs. This plan includes everything in our Pro plan, plus more analysis minutes and additional features to enhance your experience:- Priority support with a SLA
- Named account manager available through a private Slack channel
- Consolidated billing for multiple GitHub organizations
- Payment via invoices (including ACH and wire transfer)
- Migration assistance
- Terms of Service customization
CLICloudCoverage
Server-side coverage merging
We’re proud to announce a long-requested feature: Server-side coverage merging!In testing workflows which involve multiple test suites, parallelization, or multiple programming languages it is common to produce multiple code coveragate data files. Previously, we only offered client-side coverage merging which required that all of the coverage data was available on the same filesystem and sent to the server as a single upload.In many scenarios, client-side merging was cumbersome and required uploading and downloading files from shared storage (like S3 or GitHub Actions artifacts). Also, visibility into the process was limited, resulting in a poor debugging experience if something went wrong.The addition of server-side merging significantly simplifies the set up of code coverage reporting in complex CI workflows, and enabled full visibility into the process from Qlty Cloud. To ensure accurate reporting, we delay posting coverage reports to GitHub until all of the coverage data is received.CloudCoveragePlugins
Qlty Cloud is out of beta
We’re excited to announce that we have completed our beta phase for Qlty Cloud and have advanced it to GA status!Thank you to everyone who provided feedback and helped us improve the product during the beta period. We are proud to have made significant improvements based on your input, including:- Server-side coverage merging
- OpenID Connect (OIDC) authentication for easier coverage setup
- Expanded support for programming languages like C# and Swift
- Additional plugins, bringing our total to 70+
- Significant performance improvements to the Qlty Cloud website
- Many bug fixes and improvements to the debugging experience
CloudPlugins
StringsLint plugin
We’ve added a plugin for StringsLint which is ensures that localized strings in a Swift project are complete and never unused.StringsLint runs on macOS and targets files with the extensions*.strings, *.stringsdict, *.swift, *.m, *.xib, and *.storyboard. You can enable it using the Qlty CI:StringsLint only runs on macOS and is not available on Qlty Cloud which runs on Linux.
SwiftFormat plugin
We’ve added a plugin for SwiftFormat, the official auto-formatter for Swift. This auto-formatter targets Swift files, runs on macOS, and can be enabled using the Qlty CI:SwiftFormat only runs on macOS and is not available on Qlty Cloud which runs on Linux.
Cloud
Cloud authentication improvements
We’ve significantly improved the latency of most web pages by using a short-lived caching strategy for our GitHub authorization checks. Navigating around the website should feel faster. (The exception is the Dashboard, which we will be optimizing soon.)Also, for organizations that use SAML on GitHub, we now detect when GitHub requires SAML re-authorization and use that information to render better error messages. Users accessing a GitHub organization with SAML enabled need to re-authorize occasionaly, and we now show a message with instructions on how to do that.CLIPlugins
Out-of-the-box linter configs
The Qlty CLI now provides out-of-the-box linter configurations for several popular linters. These linter configuration files are copied into your project when you runqlty init or qlty plugins enable PLUGIN.This allows you to quickly set up your project with sensible defaults without needing to create a configuration file manually. Once the configuration files are in place, you can customize them to fit your project’s needs.CLICloudPlugins
Swift maintainability analysis
Qlty now provides maintainability analysis for Swift. This includes duplication and complexity metrics as well as code smells. The maintainability analysis is available in the Qlty CLI and Qlty Cloud.ast-grep plugin
We’ve added a plugin for ast-grep (sg), a fast polyglot structural search and linting tool supporting 20+ languages. ast-grep offers a pattern language to support writing your own custom checks or adopting checks provided by the ast-grep community.CLICoverage
Improved coverage uploader output
We’ve updated the output fromqlty coverage publish to include more information to improve the setup an debugging experience.CLICloudCoveragePlugins
Package lockfiles
The Qlty CLI now uses package lockfiles (e.g.package-lock.json, yarn.lock, Gemfile.lock) when they are available and the package_file directive is specified in the qlty.toml configuration file. This ensures the exact same linter versions are used across all machines, including Qlty Cloud.V1 of Coverage GitHub Action
We’ve release v1.0.0 of our reusable GitHub Action for coverage uploading. We adhere to semantic versioning so going forward breaking changes will be represented with a bump in the major version.To use the latest version on the v1 line, pin your CI workflows to@v1 like this:CLICoverage
BuildKite support
We now support automatic detection of build metadata from BuildKite. Therefore, uploading code coverage data from BuildKite only requires executing the Qlty CLI with the path to the coverage data file.Coverage
OpenID Connect (OIDC)
We now support OpenID Connect (OIDC) authentication for code coverage uploads from GitHub Actions.OIDC allows us to authenticate the repository running a GitHub Actions workflow with a short-lived token. This enables coverage uploading without needing to manage a long-lived token, providing better security and easier coverage setup.Plugins
CLI
Support Linux Arm64 Musl
The Qlty CLI now supports Linux systems using Arm64 architecture with Musl. We’re now compiling binaries for these target systems with each release.To install the Qlty CLI on an Arm64 Linux system using Musl, use our installer:CLI
CLICloudCoverage
Code coverate tags (beta)
Qlty Cloud now offers support for Coverage Tags in beta. Coverage Tags are a powerful feature that allow you to group, upload, and report on coverage data with more granularity.Coverage Tags are particularly useful to track coverage by suite independently. For example, you can track unit test coverage separately from integration test coverage. They can also be used in monorepos to make it easy to upload and report on coverage by service.In addition to providing clear, independent reporting of coverage metrics, Coverage Tags also allow you to carry forward coverage data from previous runs. This means that you can maintain a complete picture of your code coverage over time, even if you only run a subset of all of your tests on each commit.To use Coverage Tags, you can add the--tag flag to the qlty coverage publish command. For example:Plugins
php-cs-fixer plugin plugin
We’ve added support for php-cs-fixer, a tool that fixes your PHP code to follow standards including the PHP coding standards as defined in the PSR-1, PSR-2, etc., or other community driven standards from organizations like Symfony.Plugins
Checkstyle plugin
Qlty now supports Checkstyle, a tool that helps programmers write Java code that adheres to a coding standard.Coverage
Improved coverage comments
We’ve made significant improvements to the code coverage summary comments from Qlty Could. The new comments include more information about the coverage impact of your pull request, including diff coverage and a breakdown of coverage changes by file.We’ve also added a “Help” section with definitions for the coverage metrics to help make it easier to interpret the results.CloudCoverage
Support for more SimpleCov formats
We have added support for additional SimpleCov formats to make it easier to get your code coverage data from SimpleCov ingested into Qlty Cloud. We now support the simplecov-json and simplecov-merged formats.CLI
Negated exclusion patterns
The Qlty CLI now supports negated exclusion patterns. Exclusion patterns are processed in order, matching the way that Git processes them. This means that if you have a negated pattern that matches a file, it will override any previous exclusion patterns that match the same file.You can use negated exclusion patterns in yourqlty.toml file by prefixing the pattern with an exclamation mark (!).CLICoverage
SempahoreCI support
We now support automatic detection of build metadata from SemaphoreCI. Therefore, uploading code coverage data from SemaphoreCI only requires executing the Qlty CLI with the path to the coverage data file.CloudCoverage
Coverage example repositories
We now provide code coverage example repositories for many of the programming languages we support. These repositories are designed to help you get started with Qlty Cloud and provide a reference for how to set up code coverage reporting in your own projects.You can find links to all of the example repositories in our documentation.CLI
Docker images for Qlty CLI
We now build and publish Docker images for the Qlty CLI. This distribution format is an alternative to our native binaries and enables the use of the Qlty CLI on operating systems that are not natively supported.The Docker images are available on GitHub Container Registry.CloudCoverage
Pull request coverage tab
Qlty Cloud has a new Coverage sub-tab on the Pull Request page. This tab provides a summary of the code coverage for the pull request, including a breakdown of coverage changes by file and their impact on your overall coverage. We also show the diff of the pull request with coverage annotations in the left gutter.CloudCoverage
Workspace-level coverage tokens
Qlty Cloud now offers Workspace-level coverage tokens in order to simplify the seet up of uploading code coverage data. This feature is particularly useful for organizations that have multiple repositories and want to use the same coverage token across all of them.CloudCoverage
Code coverage debugging information
We have significantly expanded the amount of debugging information available for code coverage uploads in the Qlty Cloud web app. Navigate the the “Code Covearge” section of Project Settings and you will be able to find a record of every code coverage upload, including the metadata and coverage metrics. We also provide a link to download the coverage information as a Zip file for easy inspeciton if something goes wrong.Cloud
SOC 2 Type II certification
Qlty Software Inc. is proud to announce that we have achieved SOC 2 Type II certification. You can find our full announcement on our blog.Additional information about our security and compliance program can be found in our Trust Center.CLICloud
C# maintainability analysis
Qlty now provides maintainability analysis for C#. This includes duplication and complexity metrics as well as code smells. The maintainability analysis is available in the Qlty CLI and Qlty Cloud.CLI