Installation
These instructions will install the coursier CLI cs itself, as well as a typical Scala development environment.
By default, they will install the following applications:
csitself, to further manage your Scala environmentscala-cli, a convenient tool to compile / run / package Scala codescala, the Scala REPLscalac, the Scala compilersbtandsbtn, the sbt build tooldammonite, an enhanced REPL for Scalascalafmt, the Scala code formatter
They will also install a JVM if none is found on the system.
If you want more control over what gets installed and how, please check out the Command-line options section.
After the setup, you can start using Scala, or install more applications with the install command.
Native launcher
Linux
On Linux, download the coursier installer with
# On x86-64 (aka AMD64)
curl -fL "https://github.com/coursier/launchers/raw/master/cs-x86_64-pc-linux.gz" | gzip -d > cs
# On ARM64
curl -fL "https://github.com/VirtusLab/coursier-m1/releases/latest/download/cs-aarch64-pc-linux.gz" | gzip -d > cs
Then, run it with
chmod +x cs
./cs setup
Other flavors of native Linux launchers are available, see below.
macOS
On macOS, download and run the coursier installer with
# On Apple Silicon (M1, M2, ...):
$ curl -fL https://github.com/coursier/coursier/releases/latest/download/cs-aarch64-apple-darwin.gz | gzip -d > cs
# Otherwise:
$ curl -fL https://github.com/coursier/launchers/raw/master/cs-x86_64-apple-darwin.gz | gzip -d > cs
$ chmod +x cs
$ ./cs setup
macOS - brew based installation
Alternatively, the coursier launcher can be installed via homebrew with
$ brew install coursier/formulas/coursier
$ cs setup
Windows
For ARM64 Windows users, please follow JAR-based launcher section. The Windows installer currently only installs x86_64 build of Coursier.
On Windows, download and execute the Windows installer.
If you prefer a command line-based install, or if you would like to customize the setup options, use:
# PowerShell
Invoke-WebRequest -Uri "https://github.com/coursier/launchers/raw/master/cs-x86_64-pc-win32.zip" -OutFile "cs-x86_64-pc-win32.zip"
Expand-Archive -Path "cs-x86_64-pc-win32.zip" -DestinationPath .
Rename-Item -Path "cs-x86_64-pc-win32.exe" -NewName "cs.exe"
Remove-Item -Path "cs-x86_64-pc-win32.zip"
.\cs setup
:: CMD
curl -fLo cs-x86_64-pc-win32.zip https://github.com/coursier/launchers/raw/master/cs-x86_64-pc-win32.zip
tar -xf cs-x86_64-pc-win32.zip
move cs-x86_64-pc-win32.exe cs.exe
.\cs setup
Check your setup
Check your setup with
$ scala -version
Scala code runner version 2.13.7 -- Copyright 2002-2021, LAMP/EPFL and Lightbend, Inc.
If that does not work, you may need to log out and log back in (or reboot) in order for the changes to take effect.
JAR-based launcher
In case you run into any issue with the native launcher, a JAR-based launcher is available.
The commands below install the JAR-based launcher as
coursier, which can be substituted tocsin the various examples on this website.
Linux / macOS
Download and run the launcher with
$ curl -fLo coursier https://github.com/coursier/launchers/raw/master/coursier &&
chmod +x coursier &&
./coursier
Note that the JAR-based launcher requires Java 8 or later to run.
That is, a command like java -version should print a version >= 8.
The JAR-based launcher weights only about 25 kB and can be easily embedded as is in other projects. It downloads the artifacts required to launch coursier on the first run.
Alternatively, on macOS, the JAR-based launcher can be installed via homebrew with
$ brew install coursier/formulas/coursier
$ coursier
Windows
Install and run the JAR-based coursier launcher from the current directory at the Windows prompt, with
# CMD
> bitsadmin /transfer downloadCoursierCli https://github.com/coursier/launchers/raw/master/coursier "%cd%\coursier"
> bitsadmin /transfer downloadCoursierBat https://github.com/coursier/launchers/raw/master/coursier.bat "%cd%\coursier.bat"
# PowerShell
> Start-BitsTransfer -Source https://github.com/coursier/launchers/raw/master/coursier -Destination coursier
> Start-BitsTransfer -Source https://github.com/coursier/launchers/raw/master/coursier.bat -Destination coursier.bat
You can then run coursier from the same directory, like
> coursier resolve io.circe:circe-core_2.12:0.10.0
Arch Linux
Install it from AUR,
$ pacaur -S coursier
FreeBSD
Install it via pkg from the Ports Collection,
$ pkg install coursier
zsh completions
If you use ZSH, simple tab-completions are available by writing the coursier completion data into your completions directory. You can install the completions with:
mkdir -p ~/.zsh/completion
echo '#compdef _cs cs
function _cs {
eval "$(cs complete zsh-v1 $CURRENT $words[@])"
}' > ~/.zsh/completion/_cs
echo 'fpath=(~/.zsh/completion $fpath)' >> ~/.zshrc
echo 'autoload -Uz compinit ; compinit' >> ~/.zshrc
Launcher URLs
Latest launchers
| OS | URL |
|---|---|
| Linux | https://github.com/coursier/launchers/raw/master/cs-x86_64-pc-linux.gz |
| macOS | https://github.com/coursier/launchers/raw/master/cs-x86_64-apple-darwin.gz |
| Windows | https://github.com/coursier/launchers/raw/master/cs-x86_64-pc-win32.zip |
| Linux (ARM64) | https://github.com/coursier/launchers/raw/master/cs-aarch64-pc-linux.gz |
| Any (needs JVM) | https://github.com/coursier/coursier/raw/gh-pages/coursier (gh-pages branch of coursier repository rather than launchers repository) |
| Any (needs JVM) | https://github.com/coursier/launchers/raw/master/coursier (same launcher as above) |
Note that most launchers used to be available at short
git.ioURLs, and at long URLs without compression, that is not ending in.gznor.zip.These URLs are not updated anymore, and point at former coursier versions, as using compressed launchers allows to save space and bandwidth (for the long URLs), and as git.io is about to be deprecated.
Specific versions
To download specific versions of the launcher, download them from GitHub release assets:
| OS | URL | Since version |
|---|---|---|
| Linux | https://github.com/coursier/coursier/releases/download/v2.1.25-M15/cs-x86_64-pc-linux.gz | 2.0.16-158-gbdc8669f9 |
| macOS | https://github.com/coursier/coursier/releases/download/v2.1.25-M15/cs-x86_64-apple-darwin.gz | 2.0.16-158-gbdc8669f9 |
| Windows | https://github.com/coursier/coursier/releases/download/v2.1.25-M15/cs-x86_64-pc-win32.exe | 2.0.16-158-gbdc8669f9 |
| Linux (ARM64) | https://github.com/coursier/coursier/releases/download/v2.1.25-M15/cs-aarch64-pc-linux.gz | 2.0.16-158-gbdc8669f9 |
| Any (needs JVM) | https://github.com/coursier/coursier/releases/download/v2.1.25-M15/coursier | 1.1.0-M9 |
Former URLs, for information:
| OS | URL | Since version | Up to version |
|---|---|---|---|
| Linux | https://github.com/coursier/coursier/releases/download/v2.1.25-M15/cs-x86_64-pc-linux | 2.0.0-RC3-1 | 2.0.16 |
| macOS | https://github.com/coursier/coursier/releases/download/v2.1.25-M15/cs-x86_64-apple-darwin | 2.0.0-RC3-1 | 2.0.16 |
| Windows | https://github.com/coursier/coursier/releases/download/v2.1.25-M15/cs-x86_64-pc-win32.exe | 2.0.0-RC6 | 2.0.16 |
| Any (needs JVM) | https://github.com/coursier/coursier/raw/v1.1.0-M9/coursier | 1.1.0-M9 |
Command-line options
Interactive mode
Launched without options, setup checks that a JVM and the standard Scala CLI tools are
installed on your system, and updates your profile files (Linux / macOS) or user environment variables
(Windows).
It asks you to confirm prior to performing any of these actions.
To answer yes to all these questions beforehand, pass --yes or -y to setup:
$ cs setup --yes
Non-interactive mode
If you prefer the setup command not to update your profile files (~/.profile and the like),
pass --env to it, and call eval (from bash or zsh) on its output:
$ eval "$(cs setup --env)"
This updates JAVA_HOME and PATH for the duration of the current session.
Pass it a JVM id and a list of applications to
- use that JVM in the current session, and
- ensure some applications are installed, like
$ eval "$(cs setup --env --jvm 11 --apps sbt-launcher,ammonite)"
$ sbt
…
$ amm
…
$ java -version
openjdk version "11.0.6" 2020-01-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.6+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.6+10, mixed mode)
The setup command currently doesn't offer a way to revert the changes
it made to the environment variables of the current session. It's mostly
made to easily setup CI environments, rather than switch JVMs. If you're
interested in trying / switching JVM, see the
--env and --disable options of the
java command.
Overriding defaults
JVM
The JVM installed if none is found on your system
is the same as the java command, the latest AdoptOpenJDK 8 as of
writing this.
Pass --jvm to ignore the already installed jvm and install a custom one:
$ cs setup --jvm 11
JVM directory
JVMs are extracted in the JVM cache directory by default.
Pass a custom directory to extract JVM under with --jvm-dir:
$ eval "$(cs setup --jvm 11 --jvm-dir test-jvm)"
…
$ echo "$JAVA_HOME"
…/test-jvm/adopt@1.11.0-6
Applications
The setup command installs a number of standard Scala CLI applications by default.
Pass a custom list of applications to install instead with --apps.
$ cs setup --apps sbt-launcher,ammonite
--apps can be specified multiple times, and expects a ,-separared list of applications.
See the documentation of the install command for more details about
where these applications are defined, how to add your own, etc.
Application directory
Applications are installed in the installation directory of coursier by default.
Pass a custom directory to install applications in with --install-dir:
$ eval "$(cs setup --apps sbt-launcher,ammonite --install-dir tmp-install)"
…
$ tmp-install/sbt
…
$ tmp-install/amm
…
Profile files directory
Pass a custom directory that contains .profile / .bash_profile / .zprofile files with:
$ cs setup --user-home test-home
…
$ cat test-home/.profile
# >>> coursier install directory >>>
export PATH="$PATH:/Users/alex/Library/Application Support/Coursier/bin"
# <<< coursier install directory <<<
How it sets environment variables globally
Linux / macOS
The setup command updates the following files:
~/.profile(created if needed),~/.zprofileif zsh is the current shell (created if needed, respectsZDOTDIR),~/.bash_profile(only if it exists).
For example, if ~/.bash_profile doesn't exist and you're using zsh, both ~/.profile
and ~/.zprofile will be updated (and created if needed).
The sections the setup command adds to your profile files are clearly delimited, like
# >>> coursier install directory >>>
export PATH="$PATH:/Users/alex/Library/Application Support/Coursier/bin"
# <<< coursier install directory <<<
Windows
On Windows, the setup command updates the User environment variables.
Other native Linux launchers
Flavors of the native Linux launchers other than the default one are available. Note that these are only built for the x86-64 architecture for now (no ARM64).
Static launchers
These can run in environments where glibc is not available, such as Alpine docker images. These can be
downloaded from GitHub release assets, like the standard launchers. Their file names end with linux-static.
$ curl -fL "https://github.com/coursier/launchers/raw/master/cs-x86_64-pc-linux-static.gz" | gzip -d > cs
Mostly static launchers
These require glibc and libz, but do not need the C++ standard library. They are meant to be used from
so called "distroless" Docker images. These can be
downloaded from GitHub release assets, like the standard launchers. Their file names end with linux-mostly-static.
$ curl -fL "https://github.com/coursier/launchers/raw/master/cs-x86_64-pc-linux-mostly-static.gz" | gzip -d > cs
Container launchers
These are temporary. These are just like the standard launchers, but built without GraalVM container support
(using the -H:-UseContainerSupport option at build time). These are meant to workaround issues with
the GraalVM container support, if ever you run into them. These can be
downloaded from GitHub release assets, like the standard launchers. Their file names end with linux-container.
$ curl -fL "https://github.com/coursier/launchers/raw/master/cs-x86_64-pc-linux-container.gz" | gzip -d > cs