Quality gates for new code. No lines‑of‑code licence.

Qualor is an open-source, self-hosted SonarQube alternative for GitLab and GitHub. It runs the analyzers you already trust, follows every issue across commits, and fails the merge request that makes the code worse.

!128Add CSV export to invoices
feature/invoice-export into mainMerged
qualor/acme-billingFailed: new_issues 2 > 0, new_coverage 71.4 < 80
  1. ESLint
  2. OpenGrep
  3. Gitleaks
  4. Trivy
  5. Coverage (LCOV)
  6. Quality gate
Qualor commented on 3f9c2a71be04

Qualor: quality gate failed

ConditionValueThresholdStatus
new_issues2> 0failed
new_coverage71.4< 80failed
  • Highsrc/invoices/export.ts:88SQL built from request input
  • Mediumsrc/invoices/csv.ts:41Cognitive complexity 21 is over 15
Lines 12 to 19 of src/invoices/csv.ts have no test.

Try it: fix an issue, mark one as a false positive, or add tests.

An interactive example of Qualor on a merge request: a pipeline runs the analyzers, the quality gate fails, and you can fix issues, mark false positives or add tests until the gate passes.

One line in your pipeline.

The scanner runs in CI, collects results from every analyzer as SARIF, works out which lines the merge request changed, and sends one compact report to your server. It waits for the verdict and fails the job when the gate fails.

On GitLab, findings also show in the merge request widget and the security tab through the Code Quality and SAST reports. The CI/CD component is in the GitLab CI/CD catalog.

include:
  - component: gitlab.com/qualor/qualor/qualor@1
    inputs: { image-tag: "1" }

What Qualor does

It judges only the code you changed

Old issues stay visible, but they never block a merge. The gate looks at new code: new issues, coverage of new lines, duplication in new lines. Small changes don't fail on coverage percentages.

Your analyzers, one list

No rule engine of our own. Qualor runs proven open-source tools and merges what they find. The same finding from two tools shows once.

  • ESLintTypeScript, JavaScript
  • PMDJava
  • SpotBugsJava bytecode
  • OpenGrepSecurity patterns, 30+ languages
  • GitleaksCommitted secrets
  • TrivyVulnerable dependencies
  • Your SARIFAny tool, --sarif

Issues that survive a refactor

Each issue gets a fingerprint from its rule, file and surrounding code, not its line number. Move the code and the issue keeps its history and its status.

It answers where you review

A summary comment and a status per project on GitLab merge requests and GitHub pull requests, with new issues marked on the lines that caused them: inline discussions on GitLab, check-run annotations on GitHub. Fix an issue, or mark it a false positive, and its mark goes away.

Coverage, duplication, complexity

Imports LCOV, Cobertura and JaCoCo. Measures cognitive complexity with tree-sitter and finds copy-pasted code. Keeps the history of every branch and merge request.

Triage unblocks the merge

Mark a finding as a false positive or won't fix, and the gate is judged again at once. No new pipeline needed.

Mediumsrc/invoices/csv.ts:41Cognitive complexity 21 is over 15
Issue status
Quality gateFailed: new_issues 1 > 0Passed, judged again, no pipeline

An assistant that runs on your terms.

Ask Qualor to explain an issue, to judge whether a finding is a false positive, or to suggest a fix and post it to the merge request. You bring the model: any OpenAI-compatible endpoint, Anthropic, or a local model through Ollama or vLLM.

  • Off until you configure a provider.
  • Your key, your model, your network.
  • Every suggestion is a proposal in the review, never a silent commit.
Suggested fixsrc/invoices/export.ts:88

The query is built from req.query.status. Pass it as a parameter instead.

- db.query(`SELECT * FROM invoices WHERE status = '$${status}'`)
+ db.query("SELECT * FROM invoices WHERE status = $1", [status])
Model: local, llama via OllamaApply suggestion
Scattered dots gathered by fine lines into one clean circle

Leave SonarQube in one command.

Point Qualor at your SonarQube server. It brings over your quality profiles, your quality gates and the status of every issue, so the false positives and won't-fix decisions your team already made stay made.

qualor import sonarqube \
  --url https://sonar.example.com \
  --token $SONAR_TOKEN

How Qualor compares with SonarQube

Analyse ten million lines. Pay nothing for them.

The community edition is MIT licensed with no limit on lines of code, users or projects. When the organisation needs single sign-on, provisioning, roles and an audit trail, the enterprise edition adds them to the same server.

1.2 millionLicence cost for those lines: 0
A tape measure unrolling across the page without end

Community

Free, MIT licence

Everything on this page. Unlimited lines of code, users and projects, up to three organisations.

Get started

Enterprise

Commercial licence, never priced by lines of code

SSO, SCIM, roles, audit log, portfolio reports, compliance exports and priority support.

Running in minutes

The server is one container plus PostgreSQL 16. Use Docker Compose on a single machine, or the Helm chart on Kubernetes.

  1. Start the server

    git clone https://github.com/qualor-dev/qualor.git && cd qualor
    cp deploy/.env.example deploy/.env    # set the three secrets
    docker compose -f deploy/docker-compose.yml up -d
  2. Create a project and a token

    Sign in as admin, create a project, then an access token with the Upload analyses scope.

  3. Add the scanner to CI

    Set QUALOR_URL and QUALOR_TOKEN as CI variables and add the snippet above. For review comments, connect GitLab, or create a GitHub App, add it in Settings and install it on the repository.

A single server drawn in outline, with lines passing through it

Questions

Is Qualor free?

Yes. The community edition is MIT licensed, with no limit on lines of code, users or projects. The only cap is three organisations per server. SSO, SCIM, roles, the audit log and portfolio reports are in the enterprise edition.

Can Qualor replace SonarQube?

For what most teams use SonarQube for, yes: issues, coverage, duplication, complexity, quality gates on new code, and merge request decoration. Qualor has no rule engine of its own; it runs proven open-source analyzers and unifies their results. It does not aim for rule-by-rule parity.

Which languages does it support?

Whatever its analyzers cover: TypeScript and JavaScript with ESLint, Java with PMD and SpotBugs, more than 30 languages through OpenGrep security rules, secrets in any file with Gitleaks, and dependencies with Trivy. Any other tool that writes SARIF plugs in with --sarif.

Does my code leave my network?

No. Qualor has no telemetry and makes no calls except to your Qualor server and your GitLab or GitHub. The LLM assistant is off until you configure it, and it can run on a local model through Ollama or vLLM.

How do I move from SonarQube?

Run qualor import sonarqube with your SonarQube URL and a token. It brings over quality profiles, quality gates and issue statuses, so false positives and won't-fix decisions stay made.

Does it work with GitHub?

Yes. GitLab is supported through merge request comments, inline discussions, commit statuses and GitLab's Code Quality and SAST reports. GitHub.com and GitHub Enterprise Server are supported through a GitHub App you create and install: a check run per project with annotations on the changed lines, and one summary comment on the pull request, edited in place. The check run's Re-run button asks Qualor to post again.

How do I run it?

The server is one container plus PostgreSQL 16. Use the Docker Compose file for a single machine or the Helm chart for Kubernetes. The scanner is one container image, or a single static binary, in your CI.