SDKMAN

SDKMAN! manages parallel versions of multiple Software Development Kits on Unix-based systems.

Note

SDKMAN! primarily serves the JVM ecosystem: Java, Gradle, Maven, Kotlin, Scala, and ~115 other candidates. Each candidate is treated as a package.

Caution

The sdk command is a shell function, not a standalone binary, so mpm detects SDKMAN by its init script (sdkman-init.sh) rather than a binary on PATH and wraps every invocation in bash -c 'source <init> && sdk <args>'.

Note

SDKMAN has no read-only “outdated” verb, so outdated pipes n into sdk upgrade to capture the candidate list without applying any upgrade.

Platforms

  • 🐧 Linux

  • 🍎 macOS

Operations

Operation

Supported

installed

outdated

search

install

upgrade

upgrade_all

remove

sync

cleanup

Ecosystem

  • Accepted purl types: pkg:sdkman

Usage

$ mpm --sdkman installed
$ mpm --sdkman upgrade --all
$ mpm install pkg:sdkman/hello
$ mpm --dry-run --sdkman upgrade --all

Every example above accepts --dry-run, which simulates the underlying manager calls without touching the system: the safe way to watch what mpm would do before trusting it.

Deselect the manager for a single run with --no-sdkman, disable it from your configuration, or tune its invocation attributes with per-manager overrides.

Command line

  • CLI names, in lookup order: sdkman-init.sh

  • Extra CLI search paths: /home/runner/.sdkman/bin

  • Environment forced on each call:

    • sdkman_auto_answer=true

    • sdkman_colour_enable=false

The version is probed by running:

$ sdkman-init.sh version
SDKMAN!
script: 5.18.2
native: 0.4.6

and extracted with:

r"script:\s+(?P<version>\S+)"

Privilege escalation

mpm runs this manager as the current user and never prepends sudo by default. Flip the policy for its privileged operations with --sudo or the per-manager sudo override.

See privilege escalation for the full policy.

Cooldown

State of SDKMAN’s release-age gating, from the cooldown support table:

  • Status: ❌ None

With --cooldown set, mpm skips this manager’s install and upgrade operations rather than run them unguarded (fail-closed); --allow-unsupported-managers opts back in.

Reference traces

Raw native outputs captured in the manager source: the reference mpm’s parsers were written against. If you know SDKMAN well and a transcript below looks wrong, or a newer release changed its output format, report it.

$ sdk current
Using:
groovy: 4.0.22
java: 21.0.4-tem
scala: 3.4.2