{"id":15017769,"url":"https://github.com/jetbrains/qodana-cli","last_synced_at":"2026-04-01T19:48:27.107Z","repository":{"id":37915362,"uuid":"441934534","full_name":"JetBrains/qodana-cli","owner":"JetBrains","description":"🔧 JetBrains Qodana’s official command line tool","archived":false,"fork":false,"pushed_at":"2025-05-12T20:23:40.000Z","size":3011,"stargazers_count":193,"open_issues_count":3,"forks_count":30,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-05-15T04:08:22.299Z","etag":null,"topics":["ci","cli","code-quality","code-review","code-scanning","devsecops","java","javascript","kotlin","php","python","qodana","sarif","sarif-report","static-code-analysis","typescript"],"latest_commit_sha":null,"homepage":"https://www.jetbrains.com/help/qodana/getting-started.html","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JetBrains.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-12-26T16:23:54.000Z","updated_at":"2025-05-12T09:30:28.000Z","dependencies_parsed_at":"2023-09-24T07:00:59.873Z","dependency_job_id":"31e57a6a-5cb3-4359-8d8d-7b853e14f29f","html_url":"https://github.com/JetBrains/qodana-cli","commit_stats":{"total_commits":811,"total_committers":12,"mean_commits":67.58333333333333,"dds":0.311960542540074,"last_synced_commit":"5a7ab37e5fa217e5754ca0cd20ec76a66acf8519"},"previous_names":["tiulpin/qodana"],"tags_count":100,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JetBrains%2Fqodana-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JetBrains%2Fqodana-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JetBrains%2Fqodana-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JetBrains%2Fqodana-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JetBrains","download_url":"https://codeload.github.com/JetBrains/qodana-cli/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254270658,"owners_count":22042860,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ci","cli","code-quality","code-review","code-scanning","devsecops","java","javascript","kotlin","php","python","qodana","sarif","sarif-report","static-code-analysis","typescript"],"created_at":"2024-09-24T19:50:58.124Z","updated_at":"2026-02-02T14:14:27.584Z","avatar_url":"https://github.com/JetBrains.png","language":"Go","readme":"# Qodana CLI [\u003cimg src=\"https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=304841\u0026theme=dark\u0026period=daily\" alt=\"\" align=\"right\" width=\"190\" height=\"41\"\u003e](https://www.producthunt.com/posts/jetbrains-qodana)\n\n[![JetBrains project](https://jb.gg/badges/official.svg)](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub)\n[![Qodana](https://github.com/JetBrains/qodana-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/JetBrains/qodana-cli/actions/workflows/ci.yml)\n[![GoReport](https://goreportcard.com/badge/github.com/JetBrains/qodana-cli)][gh:goreport]\n[![GitHub Discussions](https://img.shields.io/github/discussions/jetbrains/qodana)][jb:discussions]\n[![Twitter Follow](https://img.shields.io/badge/follow-%40Qodana-1DA1F2?logo=twitter\u0026style=social)][jb:twitter]\n\n`qodana` is a simple cross-platform command-line tool to run [Qodana linters](https://www.jetbrains.com/help/qodana/docker-images.html) anywhere with minimum effort required.\n\n#### tl;dr\n\n[Install](https://github.com/JetBrains/qodana-cli/releases/latest) and run:\n\n```console\nqodana scan --show-report\n```\n\nYou can also add the linter by its name with the `--linter` option (e.g. `--linter jetbrains/qodana-js`).\n\n\u003c!-- TOC --\u003e\n  * [Installation](#installation)\n      * [macOS and Linux](#macos-and-linux)\n      * [Windows](#windows)\n      * [Anywhere else](#anywhere-else)\n  * [Usage](#usage)\n    * [Prepare your project](#prepare-your-project)\n    * [Analyze your project](#analyze-your-project)\n    * [View the report](#view-the-report)\n  * [Configuration](#configuration)\n  * [Why](#why)\n\u003c!-- TOC --\u003e\n\n![qodana](https://user-images.githubusercontent.com/13538286/151153050-934c0f41-e059-480a-a89f-cd4b2ca7a930.gif)\n\n## Installation\n\n\u003e 💡 The Qodana CLI is distributed and run as a binary. The Qodana linters with inspections are [Docker Images](https://www.jetbrains.com/help/qodana/docker-images.html) or, starting from version `2023.2`, your local/downloaded by CLI IDE installations (experimental support).\n\u003e - To run Qodana with a container (the default mode in CLI), you must have Docker or Podman installed and running locally to support this: https://www.docker.com/get-started, and, if you are using Linux, you should be able to run Docker from the current (non-root) user (https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user)\n\u003e - To run Qodana without a container, you must have the IDE installed locally to provide the IDE installation path to the CLI or specify the product code, and CLI will try to download the IDE automatically (experimental support).\n\n#### macOS and Linux\n##### Install with [Homebrew](https://brew.sh) (recommended)\n```shell\nbrew install jetbrains/utils/qodana\n```\n##### Install with our installer\n```shell\ncurl -fsSL https://jb.gg/qodana-cli/install | bash\n```\nAlso, you can install `nightly` or any other version the following way:\n```\ncurl -fsSL https://jb.gg/qodana-cli/install | bash -s -- nightly\n```\n\n#### Windows\n##### Install with [Windows Package Manager](https://learn.microsoft.com/en-us/windows/package-manager/winget/) (recommended)\n```shell\nwinget install -e --id JetBrains.QodanaCLI\n```\n##### Install with [Chocolatey](https://chocolatey.org)\n```shell\nchoco install qodana\n```\n##### Install with [Scoop](https://scoop.sh)\n```shell\nscoop bucket add jetbrains https://github.com/JetBrains/scoop-utils\nscoop install qodana\n```\n\n#### Anywhere else\nAlternatively,\nyou can install the latest binary (or the apt/rpm/deb package)\nfrom [this page](https://github.com/JetBrains/qodana-cli/releases/latest).\n\n## Usage\n\nhttps://user-images.githubusercontent.com/13538286/233484685-b9225168-8379-41bf-b8c8-6149a324cea8.mp4\n\n🎥 The \"Get Started with Qodana CLI\" video is [also available on YouTube](https://www.youtube.com/watch?v=RV1MFnURMP8).\n\n### Prepare your project\n\nBefore you start using Qodana, you need to configure your project –\nchoose [a linter](https://www.jetbrains.com/help/qodana/linters.html) to use.\nIf you know what linter you want to use, you can skip this step.\n\nAlso, Qodana CLI can choose a linter for you. Just run the following command in your **project root**:\n\n```shell\nqodana init\n```\n\n### Analyze your project\n\nRight after you configured your project (or remember linter's name you want to run),\nyou can run Qodana inspections simply by invoking the following command in your project root:\n\n```shell\nqodana scan\n```\n\n- After the first Qodana run, the following runs will be faster because of the saved Qodana cache in your project (defaults to `./\u003cuserCacheDir\u003e/JetBrains/\u003clinter\u003e/cache`)\n- The latest Qodana report will be saved to `./\u003cuserCacheDir\u003e/JetBrains/\u003clinter\u003e/results` – you can find qodana.sarif.json and other Qodana artifacts (like logs) in this directory.\n\n### View the report\n\nAfter the analysis, the results are saved to `./\u003cuserCacheDir\u003e/JetBrains/\u003clinter\u003e/results` by default.\nInside the directory `./\u003cuserCacheDir\u003e/JetBrains/\u003clinter\u003e/results/report`, you can find a Qodana HTML report.\nTo view it in the browser, run the following command from your project root:\n\n```shell\nqodana show\n```\n\nYou can serve any Qodana HTML report regardless of the project if you provide the correct report path.\n\n## Configuration\n\nTo find more CLI options run `qodana ...` commands with the `--help` flag.\nIf you want to configure Qodana or a check inside Qodana,\nconsider\nusing [`qodana.yaml` ](https://www.jetbrains.com/help/qodana/qodana-yaml.html) to have the same configuration on any CI you use and your machine.\n\n\u003e In some flags help texts you can notice that the default path contains `\u003cuserCacheDir\u003e/JetBrains`. The `\u003cuserCacheDir\u003e` differs from the OS you are running Qodana with.\n\u003e - macOS: `~/Library/Caches/`\n\u003e - Linux: `~/.cache/`\n\u003e - Windows: `%LOCALAPPDATA%\\`\n\u003e Also, you can just run `qodana show -d` to open the directory with the latest Qodana report.\n\n## init\n\nConfigure a project for Qodana\n\n### Synopsis\n\nConfigure a project for Qodana: prepare Qodana configuration file by analyzing the project structure and generating a default configuration qodana.yaml file.\n\n```\nqodana init [flags]\n```\n\n### Options\n\n```\n      --config string        Set a custom configuration file instead of 'qodana.yaml'. Relative paths in the configuration will be based on the project directory.\n  -f, --force                Force initialization (overwrite existing valid qodana.yaml)\n  -h, --help                 help for init\n  -i, --project-dir string   Root directory of the project to configure (default \".\")\n```\n\n### Options inherited from parent commands\n\n```\n      --disable-update-checks   Disable check for updates\n      --log-level string        Set log-level for output (default \"error\")\n```\n\n## scan\n\nScan project with Qodana\n\n### Synopsis\n\nScan a project with Qodana. It runs one of Qodana's Docker images (https://www.jetbrains.com/help/qodana/docker-images.html) and reports the results.\n\nNote that most options can be configured via qodana.yaml (https://www.jetbrains.com/help/qodana/qodana-yaml.html) file.\nBut you can always override qodana.yaml options with the following command-line options.\n\n```\nqodana scan [flags]\n```\n\n### Options\n\n```\n  -l, --linter string             Defines the linter to be used for analysis. Default value is determined based on project files. \n                                  Available values: qodana-jvm-community, qodana-jvm, qodana-jvm-android, qodana-android, qodana-php, qodana-python-community, qodana-python, qodana-js, qodana-cdnet, qodana-dotnet, qodana-ruby, qodana-cpp, qodana-go, qodana-rust, qodana-clang. \n                                  !Legacy note!: Until version 2025.2 this parameter was used to define a docker image. This behavior is deprecated but supported for backward compatibility. Please use parameters --linter and --within-docker=true or --image instead.\n      --within-docker string      Defines if analysis is performed within a docker container or not. \n                                  Set to 'false' for performing analysis in native mode. Set to 'true' for performing analysis within a docker container. \n                                  The image for container creation will be chosen automatically based on the value of the --linter param (e.g. jetbrains/qodana-jvm for --linter=qodana-jvm). \n                                  Default value is defined dynamically depending on the current environment and project.\n      --image string              Defines an image to be used for analysis execution. \n                                  Sets --within-docker=true. Sets --linter to the one preinstalled within the image. \n                                  Available images are: jetbrains/qodana-jvm:2025.3-eap, jetbrains/qodana-dotnet:2025.3-eap, etc. Full list of images is available at https://hub.docker.com/u/jetbrains?search=qodana .\n  -i, --project-dir string        Root directory of the inspected project (default \".\")\n      --repository-root string    Path to the root of the Git repository. This directory must be the same as --project-dir or contain the project directory inside it.\n  -o, --results-dir string        Override directory to save Qodana inspection results to (default \u003cuserCacheDir\u003e/JetBrains/\u003clinter\u003e/results)\n      --cache-dir string          Override cache directory (default \u003cuserCacheDir\u003e/JetBrains/\u003clinter\u003e/cache)\n  -r, --report-dir string         Override directory to save Qodana HTML report to (default \u003cuserCacheDir\u003e/JetBrains/\u003clinter\u003e/results/report)\n      --print-problems            Print all found problems by Qodana in the CLI output\n      --code-climate              Generate a Code Climate report in SARIF format (compatible with GitLab code Quality), will be saved to the results directory (default true if Qodana is executed on GitLab CI)\n      --bitbucket-insights        Send the results BitBucket Code Insights, no additional configuration required if ran in BitBucket Pipelines (default true if Qodana is executed on BitBucket Pipelines)\n      --clear-cache               Clear the local Qodana cache before running the analysis\n  -w, --show-report               Serve HTML report on port\n      --port int                  Port to serve the report on (default 8080)\n      --config string             Set a custom configuration file instead of 'qodana.yaml'. Relative paths in the configuration will be based on the project directory.\n  -a, --analysis-id string        Unique report identifier (GUID) to be used by Qodana Cloud\n  -b, --baseline string           Provide the path to an existing SARIF report to be used in the baseline state calculation\n      --baseline-include-absent   Include in the output report the results from the baseline run that are absent in the current run\n      --full-history --commit     Go through the full commit history and run the analysis on each commit. If combined with --commit, analysis will be started from the given commit. Could take a long time.\n      --commit --full-history     Base changes commit to reset to, resets git and starts a diff run: analysis will be run only on changed files since the given commit. If combined with --full-history, full history analysis will be started from the given commit.\n      --fail-threshold string     Set the number of problems that will serve as a quality gate. If this number is reached, the inspection run is terminated with a non-zero exit code\n      --disable-sanity            Skip running the inspections configured by the sanity profile\n  -d, --only-directory string     Directory inside the project-dir directory must be inspected. If not specified, the whole project is inspected\n  -n, --profile-name string       Profile name defined in the project\n  -p, --profile-path string       Path to the profile file\n      --run-promo string          Set to 'true' to have the application run the inspections configured by the promo profile; set to 'false' otherwise (default: 'true' only if Qodana is executed with the default profile)\n      --script string             Override the run scenario (default \"default\")\n      --coverage-dir string       Directory with coverage data to process\n      --apply-fixes               Apply all available quick-fixes, including cleanup\n      --cleanup                   Run project cleanup\n      --property stringArray      Set a JVM property to be used while running Qodana using the --property property.name=value1,value2,...,valueN notation\n  -s, --save-report               Generate HTML report (default true)\n      --timeout int               Qodana analysis time limit in milliseconds. If reached, the analysis is terminated, process exits with code timeout-exit-code. Negative – no timeout (default -1)\n      --timeout-exit-code int     See timeout option (default 1)\n      --diff-start string         Commit to start a diff run from. Only files changed between --diff-start and --diff-end will be analysed.\n      --diff-end string           Commit to end a diff run on. Only files changed between --diff-start and --diff-end will be analysed.\n      --reverse                   Override the default run-scenario for diff runs to always use the reverse-scoped script\n      --no-statistics             [qodana-clang/qodana-dotnet] Disable sending anonymous statistics\n      --compile-commands string   [qodana-clang specific] Path to compile_commands.json. Should be relative to the project directory. (default \"./build/compile_commands.json\")\n      --clang-args string         [qodana-clang specific] Additional arguments for clang\n      --solution string           [qodana-cdnet specific] Relative path to solution file\n      --project string            [qodana-cdnet specific] Relative path to project file\n      --configuration string      [qodana-cdnet specific] Build configuration\n      --platform string           [qodana-cdnet specific] Build platform\n      --no-build                  [qodana-cdnet specific] Do not build the project before analysis\n  -e, --env stringArray           Only for container runs. Define additional environment variables for the Qodana container (you can use the flag multiple times). CLI is not reading full host environment variables and does not pass it to the Qodana container for security reasons\n  -v, --volume stringArray        Only for container runs. Define additional volumes for the Qodana container (you can use the flag multiple times)\n  -u, --user string               Only for container runs. Override user inside the Qodana container. Format: uid[:gid] (e.g. '0:0' for root, '$(id -u):$(id -g)' for current user). Default: current system user, or root in privileged images (default \"auto\")\n      --skip-pull                 Only for container runs. Skip pulling the latest Qodana container\n  -h, --help                      help for scan\n```\n\n### Options inherited from parent commands\n\n```\n      --disable-update-checks   Disable check for updates\n      --log-level string        Set log-level for output (default \"error\")\n```\n\n## show\n\nShow a Qodana report\n\n### Synopsis\n\nShow (serve) the latest Qodana report. Or open the results directory if the flag is set.\n\nDue to JavaScript security restrictions, the generated report cannot\nbe viewed via the file:// protocol (by double-clicking the index.html file).\nhttps://www.jetbrains.com/help/qodana/html-report.html\nThis command serves the Qodana report locally and opens a browser to it.\n\n```\nqodana show [flags]\n```\n\n### Options\n\n```\n      --config string        Set a custom configuration file instead of 'qodana.yaml'. Relative paths in the configuration will be based on the project directory.\n  -d, --dir-only             Open report directory only, don't serve it\n  -h, --help                 help for show\n  -l, --linter string        Override linter to use\n  -p, --port int             Specify port to serve report at (default 8080)\n  -i, --project-dir string   Root directory of the inspected project (default \".\")\n  -r, --report-dir string    Override directory to save Qodana HTML report to (default \u003cuserCacheDir\u003e/JetBrains/\u003clinter\u003e/results/report)\n  -o, --results-dir string   Override directory to save Qodana inspection results to (default \u003cuserCacheDir\u003e/JetBrains/\u003clinter\u003e/results)\n```\n\n### Options inherited from parent commands\n\n```\n      --disable-update-checks   Disable check for updates\n      --log-level string        Set log-level for output (default \"error\")\n```\n\n## send\n\nSend a Qodana report to Cloud\n\n### Synopsis\n\nSend the report (qodana.sarif.json and other analysis results) to Qodana Cloud. \n\nIf report directory is not specified, the latest report will be fetched from the default linter results location.\n\nIf you are using other Qodana Cloud instance than https://qodana.cloud/, override it by declaring the QODANA_ENDPOINT environment variable.\n\n```\nqodana send [flags]\n```\n\n### Options\n\n```\n  -a, --analysis-id string   Unique report identifier (GUID) to be used by Qodana Cloud\n      --config string        Set a custom configuration file instead of 'qodana.yaml'. Relative paths in the configuration will be based on the project directory.\n  -h, --help                 help for send\n  -l, --linter string        Override linter to use\n  -i, --project-dir string   Root directory of the inspected project (default \".\")\n  -r, --report-dir string    Override directory to save Qodana HTML report to (default \u003cuserCacheDir\u003e/JetBrains/\u003clinter\u003e/results/report)\n  -o, --results-dir string   Override directory to save Qodana inspection results to (default \u003cuserCacheDir\u003e/JetBrains/\u003clinter\u003e/results)\n```\n\n### Options inherited from parent commands\n\n```\n      --disable-update-checks   Disable check for updates\n      --log-level string        Set log-level for output (default \"error\")\n```\n\n## pull\n\nPull latest version of linter\n\n### Synopsis\n\nAn alternative to pull an image.\n\n```\nqodana pull [flags]\n```\n\n### Options\n\n```\n      --config string        Set a custom configuration file instead of 'qodana.yaml'. Relative paths in the configuration will be based on the project directory.\n  -h, --help                 help for pull\n      --image string         Image to pull\n  -l, --linter string        Override linter to use\n  -i, --project-dir string   Root directory of the inspected project (default \".\")\n```\n\n### Options inherited from parent commands\n\n```\n      --disable-update-checks   Disable check for updates\n      --log-level string        Set log-level for output (default \"error\")\n```\n\n## view\n\nView SARIF files in CLI\n\n### Synopsis\n\nPreview all problems found in SARIF files in CLI.\n\n```\nqodana view [flags]\n```\n\n### Options\n\n```\n  -h, --help                help for view\n  -f, --sarif-file string   Path to the SARIF file (default \"qodana.sarif.json\")\n```\n\n### Options inherited from parent commands\n\n```\n      --disable-update-checks   Disable check for updates\n      --log-level string        Set log-level for output (default \"error\")\n```\n\n## contributors\n\nCalculate active project contributors\n\n### Synopsis\n\nA command-line helper for Qodana pricing[1] to calculate active contributor(s)[2] in the given local repositories.\n\n[1] More information about available Qodana plans can be found at https://www.jetbrains.com/qodana/buy/\n\n```\nqodana contributors [flags]\n```\n\n### Options\n\n```\n  -d, --days int                  Number of days since when to calculate the number of active contributors (default 90)\n  -h, --help                      help for contributors\n  -o, --output string             Output format, can be tabular or json (default \"tabular\")\n  -i, --project-dir stringArray   Project directory, can be specified multiple times to check multiple projects, if not specified, current directory will be used\n```\n\n### Options inherited from parent commands\n\n```\n      --disable-update-checks   Disable check for updates\n      --log-level string        Set log-level for output (default \"error\")\n```\n\n## cloc\n\nCalculate lines of code for projects with boyter/scc\n\n### Synopsis\n\nA command-line helper for project statistics: languages, lines of code. Powered by boyter/scc. For contributors, use \"qodana contributors\" command.\n\n```\nqodana cloc [flags]\n```\n\n### Options\n\n```\n  -h, --help                      help for cloc\n  -o, --output string             Output format, can be [tabular, wide, json, csv, csv-stream, cloc-yaml, html, html-table, sql, sql-insert, openmetrics] (default \"tabular\")\n  -i, --project-dir stringArray   Project directory, can be specified multiple times to check multiple projects, if not specified, current directory will be used\n```\n\n### Options inherited from parent commands\n\n```\n      --disable-update-checks   Disable check for updates\n      --log-level string        Set log-level for output (default \"error\")\n```\n\n## Why\n\n![Comics by Irina Khromova](https://user-images.githubusercontent.com/13538286/151377284-28d845d3-a601-4512-9029-18f99d215ee1.png)\n\n\u003e 🖼 [Irina Khromova painted the illustration](https://www.instagram.com/irkin_sketch/)\n\nQodana linters are distributed via Docker images –\nwhich become handy for developers (us) and users to run code inspections in CI.\n\nBut to set up Qodana in CI, one wants to try it locally first,\nas there is some additional configuration tuning required that differs from project to project\n(and we try to be as much user-friendly as possible).\n\nIt's easy to try Qodana locally by running a _simple_ command:\n\n```shell\ndocker run --rm -p 8080:8080 -v \u003csource-directory\u003e/:/data/project/ -v \u003coutput-directory\u003e/:/data/results/ -v \u003ccaches-directory\u003e/:/data/cache/ jetbrains/qodana-\u003clinter\u003e --show-report\n```\n\n**And that's not so simple**: you have to provide a few absolute paths, forward some ports, add a few Docker options...\n\n- On Linux, you might want to set the proper permissions to the results produced after the container run – so you need to add an option like `-u $(id -u):$(id -g)`\n- On Windows and macOS, when there is the default Docker Desktop RAM limit (2GB), your run might fail because of OOM (and this often happens on big Gradle projects on Gradle sync), and the only workaround, for now, is increasing the memory – but to find that out, one needs to look that up in the docs.\n- That list could go on, but we've thought about these problems, experimented a bit, and created the CLI to simplify all of this.\n\n**Isn't that a bit overhead to write a tool that runs Docker containers when we have Docker CLI already?** Our CLI, like Docker CLI, operates with Docker daemon via Docker Engine API using the official Docker SDK, so actually, our tool is our own tailored Docker CLI at the moment.\n\n[gh:test]: https://github.com/JetBrains/qodana/actions/workflows/build-test.yml\n[gh:goreport]: https://goreportcard.com/report/github.com/JetBrains/qodana-cli\n[youtrack]: https://youtrack.jetbrains.com/issues/QD\n[youtrack-new-issue]: https://youtrack.jetbrains.com/newIssue?project=QD\u0026c=Platform%20GitHub%20Action\n[jb:confluence-on-gh]: https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub\n[jb:discussions]: https://jb.gg/qodana-discussions\n[jb:twitter]: https://twitter.com/Qodana\n[jb:docker]: https://hub.docker.com/r/jetbrains/qodana\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjetbrains%2Fqodana-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjetbrains%2Fqodana-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjetbrains%2Fqodana-cli/lists"}