Codacy Analysis CLI

Codacy Badge Codacy Badge CircleCI Docker Version Maven Central

Small command line interface to execute Codacy code analysis locally.

⚠️ This project is under development and not production ready


  • (P) Invoke a tool
    • (D) Local tool configuration file
    • (D) Remote Codacy patterns, ignored files and language extensions
    • ( ) Default settings
  • (P) Invoke multiple tools
    • (D) Using remote configurations
    • ( ) Using local configurations
  • (D) Invoke tools in parallel
  • (D) Post results to Codacy
  • (P) Exit with status
    • (D) Absolute issues value
    • ( ) Codacy quality settings

(D) - Done | (P) - Partially Done | ( ) - Not Started



  • Java 8+
  • Docker 17.09+


  • Java 8+
  • SBT 1.1.x
  • Scala 2.12.x
  • Docker 17.09+



brew tap codacy/tap
brew install codacy-analysis-cli


curl -L | tar xvz
cd codacy-analysis-cli-* && sudo make install



codacy-analysis-cli analyse \
  --tool <TOOL-SHORT-NAME> \
  --directory <SOURCE-CODE-PATH>


sbt "codacyAnalysisCli/runMain com.codacy.analysis.cli.Main analyse --tool <TOOL-SHORT-NAME> --directory <SOURCE-CODE-PATH>"


docker run \
  --rm=true \
  --volume /var/run/docker.sock:/var/run/docker.sock \
  --volume "$CODACY_CODE":"$CODACY_CODE" \
  --volume /tmp:/tmp \
  codacy/codacy-analysis-cli \
    analyse --tool <TOOL-SHORT-NAME>


The default format for the CLI output is text and is divided into 3 categories:


Issues reported by the tools that vary between 3 different levels (Error, Warning and Info). Example:

Found [Error] `Expected "#E1675A" to be "#e1675a" (color-hex-case)` in styles/variables.less:4 (Stylelint_color-hex-case)
Found [Warning] `'object short notation' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).` in scripts/main.js:28 (iterator)
Found [Info] `Missing semicolon.` in views/components/Progress.jsx:18 (asi)


The metrics data is printed for each file and contains 5 types of data:

  • LOC - Lines of Code
  • CLOC - Commented Lines of Code
  • CC - Cyclomatic Complexity
  • #methods - Number of methods
  • #classes - Number of classes


Found [Metrics] in generic/
  CC - 33
  LOC - 778
  CLOC - 864
  #methods - 3
  #classes - 1


Each clone found is printed with information about the total number of lines, number of tokens and all the occurrences (the lines where it starts and where it ends). Example:

Found [Clone] 7 duplicated lines with 10 tokens:
    l. 681 - 687
    l. 693 - 699
    l. 601 - 607
    l. 193 - 199

Exit Status Codes

  • 🎉 0: Success
  • 😵 1: Generic Error
  • 😴 2: Timeout
  • 😩 10: Failed Upload
  • 😕 11: Uncommited changes in project (with upload option selected)
  • 😮 12: The commit uuid passed by parameter does not match the current commit of the project's repository
  • 😠 13: Non-existent tool provided as input
  • 😰 100: Failed Analysis
  • 😦 101: Partially Failed Analysis
  • 👮 102: Max Allowed Issues Exceeded


Commands and Configuration

  • analyze - Run a Codacy analysis over a directory/files
    • --verbose - Run the tool with verbose output
    • --tool - Choose the tool to analyse the code (e.g. brakeman)
    • --directory - Choose the directory to be analysed
    • --codacy-api-base-url or env.CODACY_API_BASE_URL - Change the Codacy installation API URL to retrieve the configuration (e.g. Enterprise installation)
    • --output - Send the output results to a file
    • --format [default: text] - Change the output format (e.g. json)
    • --commit-uuid [default: latest commit of current git branch] - Set the commit UUID that will receive the results on Codacy
    • --upload [default: false] - Request to push results to Codacy
    • --parallel [default: 2] - Number of tools to run in parallel
    • --max-allowed-issues [default: 0] - Maximum number of issues allowed for the analysis to succeed
    • --fail-if-incomplete [default: false] - Fail the analysis if any tool fails to run
    • --allow-network [default: false] - Allow network access, so tools that need it can execute (e.g. findbugs)
    • --force-file-permissions [default: false] - Force files to be readable by changing the permissions before running the analysis
    • --tool-timeout [default: 15minutes] - Maximum time each tool has to execute (e.g. 15minutes, 1hour)
  • validate-configuration - Validate the Codacy configuration file
    • --directory - Choose the directory where to look for the Codacy configuration file

Environment Variables

  • CODACY_ANALYSIS_CLI_VERSION [default: stable] - Set an alternative version of the CLI to run. (e.g. latest, 0.1.0-alpha3.1350, ...)

Local configuration

To perform certain advanced configurations, Codacy allows to create a configuration file. Check our documentation for more details.

Remote configuration

To run locally the same analysis that Codacy does in your code you can request remotely the configuration.

Project Token

You can find the project token in:

  • Project -> Settings -> Integrations -> Add Integration -> Project API
codacy-analysis-cli analyse \
  --project-token <PROJECT-TOKEN> \
  --tool <TOOL-SHORT-NAME> \
  --directory <SOURCE-CODE-PATH>

In alternative to setting --project-token you can define CODACY_PROJECT_TOKEN in the environment.

API Token

You can find the project token in:

  • Account -> API Tokens

The username and project name can be retrieved from the URL in Codacy.

codacy-analysis-cli analyse \
  --api-token <PROJECT-TOKEN> \
  --username <USERNAME> \
  --project <PROJECT-NAME> \
  --tool <TOOL-SHORT-NAME> \
  --directory <SOURCE-CODE-PATH>

In alternative to setting --api-token you can define CODACY_API_TOKEN in the environment.



  • Code

    Note: - Scapegoat runs during compile in Test, to disable it, set NO_SCAPEGOAT.

      sbt compile
  • Tests

      sbt test:compile


sbt test

Format Code

sbt scalafmtCheck
sbt scalafmt

Dependency Updates

sbt dependencyUpdates

Static Analysis

sbt scapegoat
sbt scalafix sbtfix


sbt coverage test
sbt coverageReport
sbt coverageAggregate
sbt codacyCoverage


  • Local

      sbt 'set version in codacyAnalysisCli := "<VERSION>"' codacyAnalysisCli/docker:publishLocal
  • Release

      sbt 'set version in codacyAnalysisCli := "<VERSION>"' codacyAnalysisCli/docker:publish


  • Local

      sbt 'set version in codacyAnalysisCore := "<VERSION>"' codacyAnalysisCore/publishLocal
  • Release

      sbt 'set version in codacyAnalysisCore := "<VERSION>"' 'set pgpPassphrase := Some("<SONATYPE_GPG_PASSPHRASE>".toCharArray)' codacyAnalysisCore/publishSigned
      sbt 'set version in codacyAnalysisCore := "<VERSION>"' sonatypeRelease

What is Codacy

Codacy is an Automated Code Review Tool that monitors your technical debt, helps you improve your code quality, teaches best practices to your developers, and helps you save time in Code Reviews.

Among Codacy’s features

  • Identify new Static Analysis issues
  • Commit and Pull Request Analysis with GitHub, BitBucket/Stash, GitLab (and also direct git repositories)
  • Auto-comments on Commits and Pull Requests
  • Integrations with Slack, HipChat, Jira, YouTrack
  • Track issues in Code Style, Security, Error Proneness, Performance, Unused Code and other categories

Codacy also helps keep track of Code Coverage, Code Duplication, and Code Complexity.

Codacy supports PHP, Python, Ruby, Java, JavaScript, and Scala, among others.

Free for Open Source

Codacy is free for Open Source projects.