13. Appendix: Course Software

You can choose either or both of the following options.

13.1. Cloud-based development environment

This option is recommended if you have any problems with your local setup or if you prefer a basic cloud-based setup.

13.1.1. Pros

  • consistent, cloud-based environment

  • out-of-the-box integration with GitHub

13.1.2. Cons

  • requires good network connection

  • might lack some code completion features

  • free plan might be underresourced (CPUs, RAM, disk space, etc.)

  • lack of integration with external GUI-based tools

  • won’t support GUI or mobile development out of the box

13.1.3. Zero-install option: Scastie

Scastie is an interactive playground for Scala with support for Scala 3 and sbt (Scala Build Tool) configuration. It allows you to save code snippets to your GitHub account, which you can access later. It is not suitable for working on full-fledged Scala projects, however.

To launch, visit https://scastie.scala-lang.org. Be sure to

  • choose target Scala 3 and the latest available Scala 3 LTS version (Scastie’s version list is updated regularly; always choose the most recent 3.x LTS entry)

  • add the following scalacOptions under build settings:

    "-Yexplicit-nulls",
    "-language:strictEquality"
    

13.2. Locally installed development environment

This option will give you an advanced development environment with code completion, type info, etc.

13.2.1. Pros

  • provides powerful capabilities, including code completion

  • does not require network connection once installed

13.2.2. Cons

  • might be slow on older machines

  • need to maintain on each machine you use

  • it can be challenging to match the versions of the various packages

13.2.3. Required packages

  • Java 21 or newer JDK (LTS release recommended)

  • Git distributed version control system (usually preinstalled on Mac OS and Linux)

    • recommended installation option on Windows: Use Git and optional UNIX tools from the Windows Command Prompt

    • optional on any platform, especially when not using IntelliJ IDEA: some GUI-based Git client

  • sbt Scala build tool

  • VisualVM visual heap profiling tool

  • Mac and Linux users are strongly encouraged to use SDKMAN! to manage their Java, sbt, VisualVM, and other command-line development tools.

  • Windows users are strongly encouraged to use WSL (Windows Subsystem for Linux) to run a Linux environment on their Windows machines and then install SDKMAN! and the other command-line tools there.

13.2.4. Choices of development environments

  • IntelliJ IDEA CE integrated development environment (recommended)

    • check specific prerequisite details for your platform

    • for the following steps, make sure you have no projects open and are looking at the welcome window as in the attached screenshot

    • Scala plugin installation (current IntelliJ IDEA): Go to File > Settings (Windows/Linux) or IntelliJ IDEA > Preferences (macOS), open the Plugins tab, search for “Scala” in the Marketplace, click Install, and restart IntelliJ IDEA. Alternatively, IntelliJ IDEA will automatically prompt you to install the Scala plugin when you first open a .scala or build.sbt file.

    • JDK configuration: IntelliJ IDEA > Configure > Project Defaults > Project Structure > Platform Settings > SDKs > + > JDK > navigate to the installation directory of your most recent JDK > OK

  • Visual Studio Code alternative based on your preference and/or experience

  • conventional text editor

    • Emacs

    • vim

    • etc.

13.3. sbt optional plugins

This section applies to all uses of sbt, whether cloud-based or on the local command line.

These are useful additional sbt plugins. You can install them per project or globally. Many of the example projects already come with one or more of these plugins (especially the first two).

13.4. GitHub

GitHub is a provider of hosted Git repositories, which emphasizes community and collaboration. For this reason, we use it to host our course examples.

  • Create a GitHub account if you don’t already have one.

  • Get the GitHub Student Developer Pack using your official @luc.edu address. This gives you access to GitHub Copilot (free for verified students), additional CI/CD minutes, and a range of third-party developer tools at no cost. See the current benefit list for up-to-date details, as benefits change regularly.

  • Find and follow a few practitioners you respect. For example, I follow these developers. You’ll probably recognize a number of them.

  • Review these notes to understand the community-based development process.

  • For credit toward class participation, create some meaningful GitHub issues and/or GitHub pull requests for one or more of our course examples. (Make sure to navigate to the original repos as these forks do not have their own issue trackers). These can be functional or nonfunctional enhancements, requests for clarification, etc.

  • To enhance your visibility in the professional community, start doing the same for some open-source projects you are interested in.

You may find both of these cheat sheets useful:

13.5. Remote participation

When class is held remotely (e.g., due to weather emergencies or other circumstances), participation will use the video conferencing tool specified on the course syllabus. Keep that tool updated for security and privacy reasons.

13.6. Troubleshooting

Common setup issues and their solutions:

sbt not found after reopening a Codespace

Codespace workspaces can lose installed packages between sessions. Reinstall with:

source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install sbt
sdk install java 21.0.2-tem  # or whichever version your project requires
Metals (VS Code Scala extension) not importing the project

Delete the Metals and Bloop caches and reimport:

rm -rf .metals/ .bloop/ project/project/ project/target/
# Then: VS Code command palette → Metals: Import build
Java version mismatch

Check that java -version matches the Java version expected by your build.sbt. If not:

sdk list java          # see available versions
sdk use java 21.0.2-tem
sbt downloads dependencies slowly on first run

This is normal: sbt resolves and downloads all project dependencies from Maven Central on the first build. Subsequent builds use a local cache (~/.ivy2 and ~/.sbt).