Skip to content
Choose a tag to compare


@alexarchambault alexarchambault released this
· 654 commits to master since this release
Choose a tag to compare


Drop support for legacy cache location ~/.coursier/cache

From version 2.0.0-RC6-14 up to 2.0.0-RC6-21, the coursier CLI prints a warning if the legacy cache location (pre Nov 2017),


is being used, pointing to cache-migration to help migrate to the new cache location.. Support for ~/.coursier/cache is now dropped altogether.

New configuration directory on macOS

The configuration directory changed from



~/Library/Application Support/Coursier

The latter is more correct per the Apple documentation, see the discussion here for more details.

The former location might be deprecated in a late future. Files there are still accepted for the time being.


Concurrency issues

  • Work around rare "Resource deadlock avoided" errors
  • Wait for concurrent downloads when downloading things from bootstraps, instead of loudly failing

Other issues

  • Don't crash if the cache directory is a symbolic link
  • Don't crash when printing zsh completions from the native launcher
  • Accept JDK archives not putting files under Contents/Home on macOS, so that cs java --jvm adopt:1.10.0-2 -version now works.
  • Fix handling of 1. prefix in JVM versions, which was faulty in some cases, so that cs java --jvm openjdk:10 -version now works, in particular.

New features

New get command

Prints the path of a file in the coursier cache, downloading it if necessary. Use like

$ cs get

Prefer local JVMs over latest ones from the JVM index

In the java and java-home commands, when passing short versions like adopt:11 or graalvm:20, if a valid JVM matching that version is already unpacked locally, it is used straightaway. In particular, if a newer matching version is available per the JVM index, the local one is still preferred. Pass --update to force using the latest matching version from the index (former behavior).

Less superfluous network requests with applications, and managed JVMs

In the java and java-home commands, if a valid JVM is available locally, it is used straightaway (see previous section), and no attempt is made to update the index. Previously, the index was updated if the last check was older than the TTL (24 hours by default). The index is now only checked when --update is passed.

When passing applications to the resolve, fetch, launch, or bootstrap commands, like cs launch scala, the TTL now defaults to Inf (infinite). That means that if all the necessary files to start an application are in the cache, it is launched straightaway, even if a newer version could have been downloaded. Pass an explicit TTL value to recover the former behavior, like cs launch scala --ttl 24h.