Skip to the content.

Java Version Manager Logo

Java Version Manager (JVM)

A lightweight, high-performance, color-coded Windows command-line utility designed to dynamically discover, download, and switch Java Development Kits (JDKs) and the entire JVM Ecosystem with native SDKMAN! parity.

CI Release Update Channels Security Tests CWE Coverage Security Audit Provenance License Platform

📥 Installation  •  🔄 Channels  •  🚀 Features  •  🏢 Enterprise  •  📚 Documentation  •  🛠️ Usage  •  📜 Version History  •  🤝 Community


📥 Installation

Choose your update channel and run the one-liner in Windows PowerShell (no Administrator privileges required):

🟢 Stable Channel (Official Releases — Recommended):

irm https://raw.githubusercontent.com/DiamTek/Java-Version-Manager-Windows/main/install.ps1 | iex

🟣 Nightly Channel (Cutting-Edge — Latest commits from main branch):

& ([scriptblock]::Create((irm https://raw.githubusercontent.com/DiamTek/Java-Version-Manager-Windows/main/install.ps1))) -Channel Nightly

Or via explicit Invoke-WebRequest:

Invoke-WebRequest -Uri "https://raw.githubusercontent.com/DiamTek/Java-Version-Manager-Windows/main/install.ps1" -OutFile "$env:TEMP\install.ps1"; & "$env:TEMP\install.ps1"

This instantly downloads the core engine, provisions %LOCALAPPDATA%\DiamTek\JVM, registers the Windows uninstaller, and updates your PowerShell Profile so the jvm command is available everywhere. You can switch channels at any time using jvm channel.

Tip: You can switch between channels at any time after installation via jvm channel [stable|nightly] or via Option 4 in the interactive Settings menu (jvm -> Settings).

Or via your favorite Package Manager:

Winget

winget install DiamTek.JVM

Scoop (Official Bucket)

scoop bucket add diamtek https://github.com/DiamTek/scoop-bucket
scoop install jvm

Chocolatey

choco install jvm-windows

Or inspect the Chocolatey Package Guide, WiX MSI Package Guide, or grab standalone MSI installers (x64 / arm64), portable .zip, or raw jvm.bat directly from Releases.

🗑️ Uninstallation

Easily remove JVM and all associated configurations:

🚀 Features

Windows Directory Junctions provide a significant performance and workflow benefit by swapping the active Java runtime without requiring Administrator privileges (UAC). By routing your User PATH to a single junction (%LOCALAPPDATA%\DiamTek\JVM\current), modern developer tooling (Gradle, Maven, IntelliJ IDEA, VS Code, Eclipse) resolves and follows the target runtime seamlessly without requiring terminal restarts.

However, certain legacy enterprise Java applications or custom classloaders perform strict canonical path resolution that may not follow Windows Directory Junctions. To ensure dependable compatibility across both modern development workflows and legacy enterprise environments, JVM implements a Dual-Architecture Core.

By navigating to the Settings menu, users can freely toggle between the two modes:

Mode Mechanism Privileges Required Target Environments
Symlink Mode (Default) Dynamically updates a junction pointer in your User PATH. Standard User (UAC-Free) Modern Build Tools & Standard Classloaders
Registry Mode (Legacy) Writes absolute paths directly into the Machine HKLM Registry. Administrator (Prompts UAC) Legacy Enterprise Apps & Strict Canonical Resolvers

[!WARNING] Architecture Conflicts: Windows evaluates Machine (HKLM) paths before User (HKCU) paths. If you use Registry Mode (which writes to the Machine level) and later switch back to Symlink Mode (which writes to the User level), the old Machine path would normally stubbornly override your new Symlink! To prevent this, toggling back to Symlink Mode inside the Settings Menu will now automatically scrub the legacy Machine pollution for you. (Note: If you manually bypass the menu using --legacy and --symlink CLI flags and experience an override, simply run jvm clear to wipe the slate).

You can even override your global setting dynamically on a per-command basis using the --symlink or --legacy CLI flags (e.g., jvm 21 --legacy).

🔄 Dual Update Channels (Stable vs Nightly)

DiamTek JVM features a built-in Dual Update Channel Engine that gives developers, DevOps engineers, and enterprise teams complete control over update cadences, release stability, and preview features.

🟢 Stable vs 🟣 Nightly at a Glance

Feature / Property 🟢 [Stable] Channel (Recommended) 🟣 [Nightly] Channel (Cutting-Edge)
Release Target Official, tagged GitHub releases (releases/latest) Tip of the repository’s main branch (HEAD)
ANSI Terminal Badge Green ([Stable]) across menus, cards, and CLI Bright Purple ([Nightly]) across menus, cards, and CLI
Release Cadence Thoroughly vetted milestones (v1.0.0, v1.1.0) Continuous — immediate access upon commit merge
Cryptographic Trust Validated against official SHA256SUMS.txt digests Tracked via Git Commit SHA & computed SHA-256 hash
Downgrade Safety Refuses to downgrade unreleased local development builds Refuses to downgrade local builds ahead of main
Offline / Rate-Limit Automated HTTP 302 web redirect fallback (no 403s) Direct Fastly CDN-backed raw endpoints (no 403s)
Ideal For Primary workstations, production fleets, CI/CD Contributors, beta testers, previewing new scrapers

🛠️ Switching & Managing Channels

🛡️ Security & Safe Update Architecture

  1. Cryptographic SHA-256 Verification: When updating on the [Stable] channel, JVM downloads SHA256SUMS.txt from the official release assets and verifies the SHA-256 hash of install.ps1 before execution. Any checksum mismatch immediately terminates the update to prevent supply chain tampering.
  2. Ahead-of-Remote Protection (Downgrade Prevention): JVM parses and compares both the Semantic Version (v!JVM_VERSION!) and Build Number (Build !JVM_BUILD!). If you are running an unreleased local build ahead of official releases or ahead of main, JVM alerts you with [ INFO ] and safely blocks accidental downgrades.
  3. Rate-Limit Safe Fallback: Unauthenticated GitHub API calls are capped at 60 requests/hour per IP. JVM incorporates an automated non-blocking fallback architecture (using Fastly CDN raw endpoints and GitHub web redirects) so update checks never crash with 403 Forbidden.

🏢 Enterprise & Corporate Deployment

DiamTek JVM is engineered for real-world enterprise IT environments, strict security compliance standards (SecOps/EDR), and frictionless cross-platform engineering team onboarding.

🔑 The Four Pillars of Corporate Adoption

  1. Zero Admin Rights Required (Zero IT Helpdesk Tickets)
    • The Enterprise Bottleneck: On locked-down corporate laptops, developers lack local administrator privileges (UAC). Traditional JDK installers write to C:\Program Files and machine-level registry keys, requiring IT helpdesk tickets for every routine Java or build tool update.
    • The JVM Solution: DiamTek JVM installs into user space (%LOCALAPPDATA%\DiamTek\JVM) and switches active versions using user-mode NTFS Directory Junctions (current). Version switching requires 0 UAC prompts, 0 admin credentials, and 0 IT tickets. Developers control their toolchains independently while corporate endpoint policies remain intact.
  2. Mixed-OS Team Onboarding (.sdkmanrc & .java-version Parity)
    • Cross-Platform Repositories: Modern engineering teams rarely use homogeneous operating systems. Repositories committed by macOS/Linux developers standardizing on SDKMAN! include .sdkmanrc or .java-version files.
    • Native Windows Parity: Windows engineers run jvm inside any repository, and the engine automatically parses the file, translates SDKMAN! vendor strings (-tem, -amzn, -graal, -sapm, -mandrel) to native Windows JDKs, and isolates required versions of Maven, Gradle, Kotlin, Scala, Groovy, Ant, sbt, JBang, Quarkus, Spring Boot, and Micronaut in active session memory. No WSL virtualization overhead, no Git Bash quirks, and zero cross-platform friction.
  3. Turnkey Fleet Management (Intune, MECM / SCCM, Group Policy)
    • Silent Enterprise Distribution: Shipped with pre-compiled, standalone WiX Toolset v4 MSIs (x64 and ARM64) embedding all cabinet payloads.
    • Unattended Rollout: Deploys silently via standard system management tools:
      msiexec /i jvm-windows-1.0.1-x64.msi /qn /norestart
      
    • Deterministic Fleet Telemetry: Built with strict standard exit codes (0 Success, 1 Abort/Error, 1602 Canceled, 1603 Fatal) and deterministic registry detection rules (HKCU\Software\DiamTek\JVM, DWORD installed=1) for Microsoft Intune / MECM application packaging.
  4. SecOps, EDR & Audit Compliance
    • Zero-File Elevation & Environment Saturation Immunity: Avoids temporary .bat or .ps1 staging files in %TEMP% during elevation handoffs. Resolves system directories and binaries strictly through immutable Win32 SpecialFolder APIs ([Environment]::GetFolderPath([Environment+SpecialFolder]::System)), protecting elevation boundaries against user-level $env:SystemRoot spoofing / saturation attacks (CWE-426) and minimizing false-positive Endpoint Detection and Response (EDR) behavioral alerts.
    • 327-Test Automated Security & Adversarial Suite (41 MITRE CWEs): Continuously validated by an automated test suite passing all 327 test cases (327 / 327 PASS) across 16 defensive suites and 41 MITRE CWE vulnerability classes (CWE-20 through CWE-918, including CWE-798), covering path traversal, command injection, SSRF/open-redirect vendor host allowlisting (both payload and checksum streams), Zip Bomb decompression bounds (CWE-409), XXE/DTD prohibition, CSPRNG temp file isolation, Nightly Git Blob SHA-1 verification, non-destructive junction unbinding, PowerShell ConstrainedLanguageMode early enforcement, atomic staged configuration file replacement (CWE-362), timestamped process identity locking, live process-kill recovery (taskkill /T), crash-safe directory junction pre-state restoration (CWE-460), cyclic directory junction immunity (CWE-674), configuration engine persistence (config.json), TOML metacharacter isolation, environment diffing, doctor self-healing, CMD AutoRun lifecycle, Content-Addressed Storage caching layout, air-gapped CAS installation, cache bundling, resumable HTTP range downloads, exponential retry backoff, mirror routing, exact semantic build tags, remote search, release comparison, variable ownership tracking, Multi-Phase Installation UI lifecycle stages, real-time speed/ETA meters, deep candidate analysis, environment explainer, built-in tutorial, smart contextual execution, toolchain conflict detection, cache stats and CAS deduplication, diagnostic environment and support bundles, self-update rollback engine, named environment profiles, toolchain snapshots, portable environment bundles, and air-gapped offline toolchain distributions.
    • Atomic Failure-Path Rollback & Deterministic Resource Hygiene: Zero dangling state across all failure, interrupt, and elevation-abort paths. If any operation aborts (UAC declined, network drop, corrupted stream, unverified checksum), previous junction targets (PREV_JUNCTION_TARGET), scripts (jvm.bat.bak), and registry entries are atomically restored (CWE-460), partial downloads and staged files are unlinked in finally blocks, Win32 registry handles and COM apartments are deterministically released (CWE-459), and all silent catch {} blocks are eliminated (CWE-390).
    • No 1024-Character PATH Truncation: Completely avoids legacy setx.exe buffer overruns by performing all environment modifications through infinite-length .NET environment APIs.
    • Cryptographic Provenance Attestation: Official release binaries are cryptographically signed and attested via GitHub Sigstore OIDC (actions/attest-build-provenance). SecOps teams can verify binary authenticity directly against the source Git commit SHA using gh attestation verify.
    • Corporate Proxy & CA Integration: Inherits system WinINet proxy settings, supports authenticated proxy variables (HTTP_PROXY, HTTPS_PROXY), and automatically trusts corporate root certificates (Zscaler, Netskope, Palo Alto) via the Windows Certificate Store.

⚡ Extreme Performance & Safety

Despite being over 500 KB in size, the jvm.bat engine is mathematically optimized to bypass the notorious bottlenecks and memory leaks of standard Windows Batch scripts:

📋 Prerequisites

Requirement Specification Notes
OS Windows 10 or Windows 11 Full support for x64 and native ARM64 detection.
Privileges Standard User UAC is bypassed by default via the Symlink Architecture. Admin is only required for legacy Registry Mode.
Dependencies None Runs purely on native CMD and PowerShell. No WSL, Cygwin, or MSYS2 required.

📚 Documentation

For deep technical details, CI/CD automation, and advanced usage, refer to the official documentation:

Document Description
Installation Guide PowerShell one-liners, Package Managers, MSI standalone installers, Enterprise Fleet Deployment (Intune/MECM), and WiX v4 build pipeline.
Usage Guide Semantic routing, .java-version isolation, BYO-JDK, and Ecosystem commands.
Architecture Technical deep-dive into Directory Junctions, UAC Process Isolation, and PowerShell Native execution.
SDKMAN! Comparison Why this is the premier native alternative to SDKMAN! for Windows.
FAQ Common questions about UAC-free zero-admin usage, enterprise proxies, global routing, and Windows Registry bridging.
Changelog Detailed chronological release history and bug fixes.
Support & Help Where to get help, ask questions, Discord community, and issue reporting channels.
Contributing Guide Development workflow, pull requests, issue templates, and coding standards.
Code of Conduct Standards, pledge, and reporting procedures for healthy community interaction.
Enterprise Deployment Machine-wide policy (policy.toml), GPO/Intune management, corporate proxy authentication, and air-gapped environments.
Hermetic Locking Reproducible builds, .jvm.lock v2 specification, freeze/thaw, and HMAC-SHA256 signatures (.jvm.lock.sig).
Network & Transit Corporate proxy discovery, NTLM/Kerberos passthrough, Windows Certificate Store PKI, and Content-Addressable Storage (CAS).
Shell Ergonomics PowerShell dynamic completions (Register-ArgumentCompleter), CMD DOSKEY macros (jvm aliases), and cross-shell synchronization.
Threat Matrix Complete 41-CWE architectural defense mapping, STRIDE threat modeling, and automated mutation testing.
Security Policy Comprehensive threat model, zero-file elevation, adversarial input sanitization, and disclosure procedures.
Chocolatey Packaging Chocolatey nuspec specification, package automation (build-choco.ps1), testing workflow, and CWE security matrix.
WiX MSI Packaging Dual-strategy WiX v4/v3 compiler (build-msi.ps1), custom action hooks, 21-point automated verification suite, and architecture.

🛠️ Usage

  1. Launch jvm.bat to open the interactive menu, or run it from any terminal.
  2. Navigate to Settings (Global Command & Setup) to install the jvm global command.
  3. Once installed globally, you can use the following commands from anywhere:

⚡ Quick-Switching (CLI)

Instantly update your JAVA_HOME and system PATH without opening menus. If there are duplicates, you will be prompted to pick a vendor.

Command Action / Description
jvm 21 Switch to JDK 21 globally.
jvm use 21 Switch to JDK 21 globally (SDKMAN/nvm compatible alias).
jvm default 21 Set default JDK 21 globally (SDKMAN alias).
jvm 21 --session Switch locally for the current terminal only (requires PowerShell Profile hook).
jvm 21 --symlink Force switch using Symlink Mode (UAC-Free) for this command.
jvm 21 --legacy Force switch using Registry Mode (Requests UAC) for this command (alias: --registry).
jvm 21 --vendor adoptium Override priority and explicitly switch to Adoptium’s JDK 21.
jvm latest Dynamically switch to the absolute highest installed JDK version.
jvm lts Dynamically switch to the highest installed LTS version.
jvm pin [version] Lock or inspect directory-level .java-version (jvm local).
jvm exec <ver> [--] <cmd> Execute command in ephemeral isolated JDK subshell without changing global state (jvm run).
jvm Silently parses .java-version and auto-switches locally (or opens UI if missing).
jvm --global Parses .java-version and forces the switch globally to your registry.

Note on .java-version: Your file can contain inline CLI flags (e.g., 21 --vendor adoptium --legacy). Make sure the version and flags are on a single line. Architecture flags (--legacy) only apply when using jvm --global.

📥 Installations

Command Action / Description
jvm install Opens the fully interactive Installation Wizard UI.
jvm install 21 Initiates the installation of JDK 21 (pauses to prompt for Vendor).
jvm install 21 --vendor oracle Bypasses all prompts to silently download and install Oracle JDK 21.
jvm install lts Prompts you to pick a supported LTS version (17, 21, 25), then prompts for Vendor.
jvm install lts --latest Locks onto the highest available LTS, but still pauses for Vendor prompt.
jvm install lts --latest --vendor oracle 100% automated headless installation of the newest Oracle LTS version.
jvm install 17 --vendor oracle -y Aggressively bypasses all safety warnings (caps, overwrites) for CI/CD automation.
jvm install 21 --skip-checksum Bypasses checksum verification if hash is unavailable or unresolvable.
jvm lock [candidate] [ver] Generates or updates reproducible .jvm.lock manifest (--check, --diff, --update).
jvm lock --check Audits workspace lockfile consistency and 3-state cryptographic signatures (verified, failed, not_verified).
jvm lock --sign / --verify Generates or cryptographically verifies HMAC-SHA256 signature on .jvm.lock.sig.
jvm freeze [--dry-run] Hermetically resolves authentic archive URLs and checksums for unpinned floating versions, preserving metadata.
jvm thaw Unpins exact coordinates in .jvm.lock back to floating major version ranges.
jvm install --locked Reproduces exact team runtime environment from .jvm.lock with strict SHA-256 validation (-l, --lock).
jvm verify [version/all] Audits cryptographic provenance, HTTPS origins, host trust, and digital signatures (supports --json).
jvm transaction [show/rollback] Displays atomic transaction journal or rolls back interrupted installations, restoring pre-state directory junctions and backups.
jvm policy [show/check] Displays active enterprise governance policy or audits workspace compliance against policy.toml.

📦 Ecosystem Build Tools (SDKMAN Parity)

JVM supports downloading, switching, and managing tools natively alongside Java. You can manage these via the command line or through the interactive Ecosystem Management sub-menu (Option 2 in the main UI). Supported candidates: Maven, Gradle, Kotlin, Scala, Groovy, Ant, sbt, JBang, Quarkus, Spring Boot CLI, and Micronaut.

Command Action / Description
jvm install maven [latest] Installs Maven directly from Apache (omitting version defaults to latest; e.g., jvm install quarkus).
jvm install gradle 8.9 Installs a specific version of Gradle.
jvm kotlin 2.0.20 Instantly switches your active KOTLIN_HOME (and PATH) to the specified version.
jvm ant 1.10.15 Switches active ANT_HOME (and PATH) to Apache Ant.
jvm sbt 1.10.2 Switches active SBT_HOME (and PATH) to Scala Build Tool.
jvm jbang 0.119.0 Switches active JBANG_HOME (and PATH) to JBang.
jvm quarkus 3.15.1 Switches active QUARKUS_HOME (and PATH) to Quarkus CLI.
jvm spring 3.3.4 Switches active SPRING_HOME (and PATH) to Spring Boot CLI.
jvm micronaut 4.6.3 Switches active MICRONAUT_HOME (and PATH) to Micronaut (mn).
jvm update maven Checks and updates Maven (or jvm maven update, jvm update ant, etc.).
jvm list Lists all Ecosystem tools and their currently [ACTIVE] versions at the bottom.
jvm uninstall groovy [version] Safely uninstalls the tool; auto-selects if one version is installed, or prompts with an interactive list if multiple.

🔄 Updates & Uninstalls

Command Action / Description
jvm update <version> Automatically checks and updates a specific installed JDK (e.g., jvm update 21).
jvm update --all Silently patches all installed JDKs and Ecosystem Tools to their newest releases.
jvm update --all --vendor oracle Silently checks and automatically patches only your Oracle JDKs.
jvm uninstall Displays an interactive numbered selection list of installed JDKs with paths, [ACTIVE] indicator, and Cancel option (aliases: jvm rm, jvm remove).
jvm uninstall --vendor <name> Displays interactive uninstallation list filtered to a specific vendor (e.g., jvm uninstall --vendor semeru).
jvm uninstall <version> Headless uninstallation for a specific JDK version (aliases: jvm rm <version>, jvm remove <version>).
jvm uninstall <version> --vendor oracle Automated uninstallation targeting Oracle (bypasses all prompts).
jvm (no args) Opens the interactive terminal dashboard (access interactive Uninstaller and Updater sub-menus).

🧹 Global Environment Management

Command Action / Description
jvm list Lists all installed JDKs (version, vendor, path), highlighting the [ACTIVE] one (alias: jvm ls).
jvm current Displays comprehensive status card: active JDK, switching mode, junction target, and tools (aliases: jvm info, jvm whoami, jvm env).
jvm status / jvm ecosystem Renders unified multi-toolchain status card for Java and all installed ecosystem tools (--json).
jvm current --short Emits bare version string without banners or decorative styling (script-friendly).
jvm current --numeric Emits bare integer major version number only (script-friendly).
jvm current --bin Emits bare filesystem path to the active java executable binary.
jvm which [candidate] Prints absolute filesystem path to active java.exe or ecosystem binary (alias: jvm path).
jvm why Explains how active Java was selected through a 7-tier resolution graph.
jvm explain [candidate] Performs 7-layer deep candidate architecture, storage, and security analysis.
jvm welcome / jvm tutorial Launches interactive tutorial walkthrough of version management and features.
jvm vendor Displays the verified distribution vendor of the active Java runtime.
jvm run <task> [args...] Contextual build/test execution dispatcher with toolchain conflict detection.
jvm doctor Deep diagnostic health audit and conflict scanner (permissions, junctions, PATH shadowing, hooks; alias: jvm check).
jvm doctor --report Generates an automated diagnostic issue bundle archive (jvm-issue-bundle.zip).
jvm report Generates a redacted diagnostic environment report (jvm-report.txt).
jvm support Generates a complete GitHub issue support bundle (jvm-support-bundle.zip).
jvm verify [version/all] Audits cryptographic provenance, HTTPS origins, host trust, and digital signatures.
jvm transaction [show/rollback] Displays atomic transaction journal or rolls back failed/aborted installations (aliases: jvm txn, jvm rollback, jvm rb).
jvm hook [action] Manage PowerShell profile auto-sync wrapper hook (install, setup, status, check, remove, uninstall).
jvm aliases [--install] Displays or installs lightweight CMD DOSKEY macros (j21, j17, juse, jstat) for instant CMD switching.
jvm open [candidate] Instantly opens candidate (maven, gradle), installed JDK version (21), candidates, or root in File Explorer (alias: jvm home).
jvm clean Safely purges temporary installer caches and extraction artifacts to reclaim disk space (alias: jvm prune).
jvm clear Instantly wipes JAVA_HOME and purges Java from your PATH.
jvm env Displays current environment variables and status card (alias for jvm current).
jvm project Inspects root .jvm.toml / .jvmrc toolchain readiness, locks, and component readiness.
jvm config [get/set/reset] Unified configuration engine managing persistent global defaults in %LOCALAPPDATA%\DiamTek\JVM\config.json (supports mirrors).
jvm cache [list/size/clean/prune] Inspects inventory, measures byte volume, or purges CAS artifact store (cache\sha256\).
jvm cache stats Renders a detailed telemetry table of cached blobs, storage volume, and policies (--stats).
jvm cache dedupe Content-addressed deduplication scanning and hardlinking of duplicate blobs.
jvm cache export [--bundle <file>] Bundles central artifact cache into an offline .jvmcache zip container.
jvm cache import <bundle-path> Extracts and validates offline cache bundle into the local CAS hierarchy.
jvm profile [create/use/list/show/delete] Manages named workstation toolchain profiles (work, ci) with atomic multi-tool rollback.
jvm snapshot [create/restore/list/delete] Point-in-time state capture and restoration for active JDK and ecosystem tools.
jvm bundle [create/inspect/install/list] Exports/imports self-contained .jvmbundle runtime archives with magic byte & SHA-256 integrity.
jvm distro create [--out <dir>] Generates self-contained air-gapped distribution package for zero-network environments.
jvm search [candidate] <query> Remote metadata query engine across vendor catalogs (e.g., jvm search 21, jvm search gradle 8, --json).
jvm list-remote [candidate] Queries remote GA/LTS releases with exact semantic build strings and tags.
jvm info [version] Outputs architecture, VM type, release date, LTS status, and CVE security classification.
jvm compare <v1> <v2> Reports detailed feature deltas, multi-LTS milestone JEP chaining (8->11->17->21->25), and bytecode specs.
jvm update <version> --security Restricts automated patch updates strictly to explicit CVE security releases.
jvm env [--diff] Displays active environment or renders delta comparison between host registry and current shell state.
jvm doctor [--fix] [--dry-run] Deep diagnostic health audit with automated self-healing repairs for orphaned junctions and shadowed paths.
jvm link [path] [name] Manually links a custom JDK directory (or lists all registered custom links if run with no arguments).
jvm unlink <name> Removes a custom linked JDK.
jvm version Checks your current jvm.bat build number against GitHub for updates (--version, -v).
jvm channel [stable/nightly] View or switch active update channel ([Stable] green vs [Nightly] purple).
jvm self-update [ch] [-y] Automatically downloads and atomic-swaps the core script (stable/nightly, --channel, -c, -y/--yes; alias: jvm update self).
jvm self-update --history Displays timestamped version history of previous JVM engine installations.
jvm self-update --rollback Restores the previous JVM engine version from local backup.
jvm self-uninstall Launches the deep uninstaller with UAC elevation (full system wipe; alias: jvm uninstall-self).
jvm <command> --dry-run Simulates mutating operations (uninstall, clean, clear, update --all, self-update, doctor --fix) without modifying filesystem or registry.
jvm <command> --quiet (or -q) Suppresses decorative headers, banners, and interactive pauses for clean scripting.
jvm <command> --verbose Emits verbose diagnostic output, subshell telemetry, and network resolution logs.
jvm <command> --timings Appends native centisecond performance timing breakdown to console output ([ TIMINGS ]).
jvm <command> --json Emits pure, machine-readable JSON envelope (ok, command, candidate, resolved, changed) across CLI subcommands.
jvm <command> --offline Enforces air-gapped isolation; blocks mutating downloads while keeping local commands functional.
jvm <command> --no-lock Bypasses the concurrent process state lock (state.lock) in emergency recovery scenarios.
jvm <command> --no-color Suppresses ANSI color codes for clean redirection and CI/CD logs (also honors NO_COLOR env).
jvm help [subcommand] Displays full CLI reference or dedicated subcommand usage card (also: <subcommand> --help, -h, /?).
jvm <semantic-alias> Routes dynamically (e.g., jvm latest, jvm lts, jvm 21).

Pro Tip: Use jvm doctor for an instant system health and conflict check, jvm current for an active environment status card, jvm which to dynamically feed the active java.exe path into scripts/IDE configurations, and jvm clean to sweep orphaned download archives without touching installed runtimes.

🎨 Interface Guide

The utility uses native ANSI terminal color formatting to protect system stability:

🛡️ Safety Defaults

To prevent catastrophic accidental deletions on local filesystems, all critical prompts obey standard developer conventions:

📜 Version History

🤝 Community & Contributing

Contributions, issues, and feature requests are welcome!

Copyright (c) 2026 DiamTek / Alexéy Shishkin.

This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See the LICENSE file for details.

Third-Party Software & Trademarks