Skip to main content

exolot

Analyze code locally from the command line with the language server from SonarQube for IDE (formerly SonarLint). No SonarQube account or server needed.

exolot is an independent project. It is not affiliated with or endorsed by SonarSource. "SonarQube" and "SonarLint" are trademarks of SonarSource.

Why

The old sonarlint-cli was discontinued years ago. SonarSource's current SonarQube CLI needs a SonarQube Cloud or Server account, and its code analysis runs on the server. exolot fills the gap: account-free analysis that runs entirely on your own machine. It needs network access only to download the language server the first time (and see the note on C/C++ and C# below).

How it works

exolot downloads the SonarQube for IDE extension for VS Code (a .vsix file, which is a zip) from the sonarlint-vscode GitHub releases, checks its sha256 digest, and unpacks the language server, the language analyzers and the bundled Java runtime into a cache directory. It then runs the language server headlessly, opens each file you ask it to analyze, and prints the issues the server reports.

The idea comes from sonarqube.nvim, which does the same thing for Neovim.

Usage

uvx exolot                     # analyze the current directory
uvx exolot src/ tests/foo.py   # analyze specific files or directories
uvx exolot --format json .     # machine-readable output
uvx exolot install             # just download and unpack the server
uvx exolot cache-dir           # show where the server is cached

Directories are expanded with git ls-files when inside a git repository (so .gitignore is respected), and by walking the tree otherwise. Binary files and files over 2 MiB are skipped.

Exit status is 0 when no issues are found, 1 when issues are found, and 2 on errors.

Options

  • --server-version TAG picks a sonarlint-vscode release (default: the version exolot was tested with). Unknown versions are downloaded without digest verification, with a warning.
  • --platform PLATFORM overrides the detected VSIX platform (linux-x64, darwin-arm64, darwin-x64, win32-x64, or universal).
  • --java PATH uses a different Java executable.
  • --node PATH sets the Node.js used for JavaScript/TypeScript analysis (otherwise the server looks for node on the PATH).
  • --rules FILE reads rule settings from a JSON file, in the same format as VS Code's sonarlint.rules setting, e.g. {"python:S1764": {"level": "off"}}.
  • -v / --verbose shows the server's logs.

Platforms

Platform-specific builds with a bundled Java runtime exist for linux-x64, darwin-arm64, darwin-x64 and win32-x64. On other platforms (such as Linux on ARM) exolot uses the universal build, which needs Java 17 or later from JAVA_HOME, the PATH, or --java.

Notes

  • The language server keeps its own state in ~/.sonarlint, shared with any SonarQube for IDE installation you have.
  • Telemetry is disabled.
  • C/C++ and C# analyzers are not included in the VSIX; the server tries to download them from binaries.sonarsource.com when it starts.
  • Each run starts a fresh JVM and loads every analyzer, so even a single file takes around 15 seconds.
  • The bundled analyzers are licensed by SonarSource under their own terms. exolot downloads them from SonarSource's releases at run time and does not redistribute them.

Development

uv sync
uv run exolot --help
uv run pytest

Metadata

Release files for exolot 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for exolot 0.1.0
File Size Uploaded Provenance Actions
exolot-0.1.0.tar.gz 19.8 kB Without provenance Details for exolot-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for exolot 0.1.0
File Interpreter ABI Platform Actions
exolot-0.1.0-py3-none-any.whl Python 3 none any Details for exolot-0.1.0-py3-none-any.whl

Total release size: 36.0 kB

Release files / exolot-0.1.0.tar.gz

Download URL exolot-0.1.0.tar.gz
Size 19.8 kB
Tags Source
SHA-256 checksum
How to use checksums
8b20b6cc10c27fd22040b6e3ab7650722da41fbe9f34b51db4b561ebb141a016
BLAKE2b-256 checksum
How to use checksums
1f263cf2fb8eafc183bc08ccf1726b1774698fee3b6309eaf0f02f53a5748bb0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / exolot-0.1.0-py3-none-any.whl

Download URL exolot-0.1.0-py3-none-any.whl
Size 16.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b26a255dab5dcf7a3b1a0f8e355e94e484115ce79031ed11013e05597802c65d
BLAKE2b-256 checksum
How to use checksums
77dce39806747295ecb5382b4362aaa52fc62008e073a19a5e34970f575f9f4f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for exolot 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page