Changelog
All notable changes to the Java Version Manager for Windows will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.0.0] - 2026-09-07
This milestone 1.0.0 release marks the official general availability of the DiamTek Java Version Manager for Windows. It features a massive architectural overhaul of the entire engine, adding comprehensive ecosystem support, native automation integrations, full package manager distribution, and solving multiple Windows-specific system limitations.
Distribution & Packaging
- Windows Terminal Profile Integration: Automatically registers a dedicated “Java Version Manager” profile in Windows Terminal
settings.json(Release, Preview, and Unpackaged) pointing to high-resicon.png, withcloseOnExit: alwaysandcmd.exe /cexecution lifecycle so terminal tabs close cleanly upon exiting the JVM menu. - Start Menu & Taskbar Launchers: Generates Start Menu application shortcuts and dynamically synchronizes existing pinned taskbar shortcuts to launch the registered Windows Terminal profile when available, with a graceful
cmd.exe /cfallback for classic console hosts. - Dynamic File Size Estimation: Dynamically calculates recursive disk footprint across
%LOCALAPPDATA%\DiamTek\JVMand%USERPROFILE%\.jvm, enforcing a 1,024 KB floor inEstimatedSizeregistry key so Windows 11 Installed Apps displays accurate application sizes (1.00 MB+) instead of suppressing file size. - Comprehensive Lifecycle Uninstallation: Deepened
uninstall.ps1to scrub Windows Terminal profiles, resetdefaultProfileif targeted, remove pinned taskbar shortcuts, and eliminate temporary.jvm_session_targetandjvm_*artifacts. - Official Branding Suite: Integrated high-resolution 768x768 ARGB source branding (
assets/icon.png) and multi-resolution ICO (assets/icon.ico) with vertical baseline anchoring and 89% optical fill across installers, registry entries, and package manifests. - Package Manager Ecosystem: Full manifest support for Scoop (
jvm.json), Chocolatey (jvm.nuspec,chocolateyInstall.ps1,chocolateyUninstall.ps1), Winget (DiamTek.JVM.yaml), and an automated WiX Toolset v4 MSI build pipeline (build-msi.ps1). - Deep UAC Uninstaller Engine: Introduced
uninstall.ps1with automatic UAC administrator privilege escalation to completely scrub JVM, PATH entries, environment variables, AppData Ecosystem caches, and installed JDKs. - Uninstaller Directory Lock Staging: Uninstaller stages its script to
%TEMP%and pivots CMD working directory to%TEMP%before execution, releasing file and directory handles so the parent JVM directory can be fully wiped without file locks. - Uninstaller External Handoff Runner & Zero-Frame Decoupling: Engineered an external uninstaller handoff runner (
%TEMP%\jvm_uninstall_<rand>.bat) with a dedicated parameter-expansion subroutine (:ChainUninstallerRunner) and directgototransitions. By eliminating compound loop blocks and unrolling all activecmd.exesubroutine call frames before invoking the external runner,jvm.batis completely decoupled from disk before the uninstallation wipe executes, eliminating post-deletion file seek errors (The system cannot find the path specified.) and guaranteeing clean exit codes back to the host shell prompt. - Conditional JDK Directory Wipe Prompt: Uninstaller only prompts to delete
C:\Program Files\Javaif the directory actually exists on the filesystem, remaining completely silent when no JDK directory is present. - Single-Destination Target Architecture: Synchronized
TargetDirhandling so updating standalone or custom installations writes directly to the target location without creating duplicate parallel%LOCALAPPDATA%installations. - Resilient Companion Asset Retrieval: Hardened
LICENSE,README.md, anduninstall.ps1fetching with per-file exception boundaries, automaticHEADCDN fallback, and safe path comparisons, eliminating false-positive warnings andResolve-Pathexceptions. - Windows Integration: Automatically registers JVM into Windows Settings / Installed apps (
HKCU:\...\Uninstall\DiamTek.JVM) with native uninstallation support and creates a Start Menu uninstaller shortcut. - Terminal & CLI Uninstaller: Added a full system wipe option in the interactive Settings menu and CLI support via
jvm self-uninstall.
Architecture & Core Engines
- Enterprise Storage Migration: Migrated the entire storage architecture from the user profile (
%USERPROFILE%\.jvm) to%LOCALAPPDATA%\DiamTek\JVMfor strict enterprise-grade path compliance. - Directory Junction Architecture: Completely migrated the core routing architecture to use native Windows Directory Junctions (
%LOCALAPPDATA%\DiamTek\JVM\current). This enables 100% UAC-free, instantaneous version switching that dynamically syncs across all open terminal windows. - Dual-Architecture Engine: Built a Dual-Architecture toggle allowing users to seamlessly swap between the new “Symlink Mode” and the legacy “Registry Mode” directly from the Settings Menu.
- PowerShell Registry Wrappers: Re-engineered the legacy Registry Mode to utilize background PowerShell wrappers. This fixes a major historical bug where switching versions would fail silently for non-Admin standard users.
- Universal Candidate Engine: Built a universal payload engine capable of downloading, extracting, and symlinking binaries natively, powering both JDK installations and ecosystem tools.
- Smart Caching: Improved script navigation and execution speed via a smart caching
NEEDS_RESCANarchitecture that prevents redundant local directory polling. - ARM64 Native Support: Added ARM64/AArch64 hardware auto-detection, dynamically routing all vendor API queries to architecture-specific download endpoints.
Ecosystem & Third-Party Integrations
- JVM Ecosystem Parity: Natively support the broader JVM Ecosystem (Maven, Gradle, Kotlin, Scala, Groovy) with dynamic APIs for downloading, extracting, and routing toolchains.
- Interactive Ecosystem Auto-Updater: Engineered a vendor-selection menu that checks individual tools (or all at once) against GitHub/Apache APIs to resolve the absolute latest releases, and seamlessly prompts to upgrade out-of-date binaries.
.java-versionAuto-Switching: Added directory-based auto-switching using.java-versionfiles. Defaults to True Session Isolation (only changes the current terminal) with an explicit--globalCLI override flag. Support added for passing full CLI flags directly inside the.java-versionfile..sdkmanrcHijack Protocol: Built a native.sdkmanrcparser to dynamically hijack cross-platform SDKMAN workflows, providing seamless cross-compatibility for Windows developers working on Linux-first teams.
Security, Validation & Integrity
.NETCryptography SHA Validation: Implemented enterprise-grade SHA256 checksum verification for all JDK downloads using native.NETCryptography APIs to protect against corrupted payloads. Added dynamic SHA256/SHA512 validation with automatic SHA1 fallback for older legacy endpoints (like Maven).- One-Liner Installation Script: Introduced a bulletproof one-liner installation script (
install.ps1) for frictionless setup and automatic code sanitization across environments. - Self-Updater Sentinel Guard: Added a
rem END OF SCRIPTsentinel integrity check to the self-updater to automatically reject truncated or corrupted payload downloads. - 1024-Character PATH Fix: Fixed the notorious Windows
setx1024-character PATH truncation bug by completely replacing all environment variable updates with infinite-length.NETAPI calls. - Redundant Registry Backups: The
jvm clearand uninstallation commands now automatically backup bothHKCUandHKLMenvironment registry keys to%TEMP%before executing destructive scrubs. - Offline-Aware Error Handling: Added structured error handling across all network operations with clean
[ ERROR ]/[ DETAIL ]outputs instead of raw exception dumps.
CLI Automation & Parsing
- Native CLI Help Engine: Built-in formatted help screen (
jvm help,jvm --help,jvm -h,jvm /?) displaying the full command suite, arguments, ecosystem switches, maintenance utilities, and flag overrides. - Deep Uninstaller Command: Added
jvm self-uninstallto invoke the UAC-elevated deep uninstallation pipeline directly from any terminal. - Semantic CLI Routing: Added robust semantic routing commands (
jvm latest,jvm lts) and powerful flag overrides (--symlink,--legacy,--vendor,--latest,-y). - Semantic Self-Updater Engine: Built a seamless self-updater engine (
jvm version,jvm self-update) that securely compares build numbers using the native.NET[version]class before automatically downloading and atomic-swapping the core script. - External Process Handoff Engine: Self-update now decouples from
jvm.batby chaining execution into an external runner (%TEMP%\jvm_updater_*.bat) withoutcall. This allowscmd.exeto closejvm.bat’s file handle immediately, eliminating mid-stream byte-offset corruption,'file' is not recognizedsyntax errors, and duplicate installer invocation loops. - Dynamic GitHub CDN Cache Bypass: Resolves the exact commit SHA of
mainvia the GitHub API to bypass the 5-minute Fastly/Varnish edge caching onraw.githubusercontent.com, ensuring newly published releases are immediately discovered and fetched without propagation delays. - Dynamic Feature Resolvers: Built a dynamic
FetchLatestVersionsresolver that queries the Adoptium API at runtime to establish the true latest feature release and LTS version numbers, eliminating hardcoded version constants. - Self-Contained Update Checkers: Re-engineered the
UpdateCheckeras a fully self-contained inline PowerShell script generated at runtime for all six vendors, removing all external.ps1file dependencies.
UI & Developer Experience
- Unified Sub-Hubs: Consolidated the Main Menu into two unified “JDK Management” and “Ecosystem Management” sub-hubs, each mirroring the identical “Switch Active” / “Version Management” layout.
- Consistent Layouts: Enforced consistent, unified UI layouts (
--- Manage by Vendor/Tool ---and--- Actions ---) across all JDK and Ecosystem menus. - In-Memory Bubble Sort: Built an optimized, strictly in-memory Bubble Sort algorithm to organize JDKs visually by newest version in the UI.
- Vendor Grouping: Introduced dynamic Vendor grouping (Oracle, Adoptium, GraalVM, Corretto, Zulu, Microsoft) across all interactive menus.
- Code Page Preservation: Added native terminal code page preservation and restoration to seamlessly handle UTF-8 rendering (like the
©symbol) without permanently corrupting the user’s host environment. - Animated ANSI Progress Bar: Added a real-time, 30-character animated ANSI progress bar to
install.ps1with percentage indicators tracking environment initialization, release resolution, core engine fetch, encoding sanitization, companion assets, user PATH configuration, profile hook registration, and shortcut integration. - Zero-Flicker Background Requests: Configured
$ProgressPreference = 'SilentlyContinue'across all PowerShell hooks, inline web requests, and candidate resolvers, completely suppressing the top blue/cyan progress bar that previously flashed during silent background network queries. - Progress Bar Enhancements: Overhauled the Self-Updater to utilize the Universal Candidate Downloader engine to grant it native ANSI progress bars. Restored native extraction progress bars and forced a final 100% frame to fix a rounding edge case.
- UI Tag Formatting: Aligned all UI tags to a strict 10-character padded format (
[ OK ],[ ACTIVE ], etc.) for perfect visual alignment.
Bug Fixes & System Stability
- Keystroke Interception on Updater Handoff: Resolved a bug where the first user keystroke in
jvm.batwas ignored after returning from a self-update. This was caused by a backgroundstart /b timeoutdeletion thread competing for the console input buffer. Completely eliminated the background thread, allowing the interactive menu to respond instantaneously on the first keystroke while handling cleanup safely at batch startup. - Direct Target Directory Updates: Removed repository directory redirection heuristics (
$isDevRepo) ininstall.ps1, ensuring custom locations, standalone copies, and cloned workspaces update their runningjvm.batdirectly instead of silently redirecting into%LOCALAPPDATA%. - Commit SHA Handoff Forwarding: Forwarded the dynamically resolved GitHub commit SHA (
-Branch "!REMOTE_REF!") fromjvm.battoinstall.ps1to eliminate duplicate API calls, bypass Fastly CDN edge caching onHEAD/main, and guarantee newly installed scripts immediately reflect the latest build version. - Live Terminal Memory Collapse: Resolved a critical bug where running the uninstallation or switch commands could completely destroy all native Windows commands (
findstr,choice) in the active session. This occurred because the previous path-scrubber relied on batch string substitution (!PATH:string=!), which suffered catastrophic quote-collisions when evaluating complex paths containing double quotes or undefined variables. Completely replaced all batch substitution with safe, native PowerShell-notarray evaluations. - UTF-8 BOM Interpretation: Fixed critical Windows
cmd.exeUTF-8 BOM interpretation bugs and UNIX (LF) line-ending crashes (thechobug) by enforcing explicit CRLF encoding during downloads. - Double-Quote
PATHEncapsulation: Hardened allfor /fvariable export loops with double-quote encapsulation to preventcmd.exefrom misinterpretingPATHstrings containing embedded quotes as file lists. - Exclamation Mark Corruption: Fixed delayed expansion parsing bugs that corrupted custom paths containing exclamation marks (
!). - Oracle Update Crash: Fixed Oracle update checks crashing with
'$' is not recognizedby switching the PowerShell payload to pipe-safe string concatenation. - Forward Compatibility: Replaced deprecated
wmicenvironment queries with directreg querycalls for guaranteed forward compatibility with Windows 11. - Variable Slicing Errors: Hardened the Global Command installer and resolved subshell variable slicing errors.
- Cross-Architecture Registry Conflicts: Fixed conflicts between User and Machine environment variables causing ghost path artifacts.
- UAC Deadlocks: Fixed edge-case UAC elevation deadlocks during global registry writes.
- Directory Protection: Added a conditional
rmdirguard to prevent extracted files from being destroyed if a junction move failure occurs. - Navigation State Leaks: Patched a variable state-leak during cross-menu navigation and stabilized the back-navigation structural loop across all interactive UI hubs.
[0.5.0] - 2026-08-20
Added
- Global Command Installer: Built a new Global Command Installer to dynamically inject the JVM directory into the Windows User PATH.
- CLI Quick-Switching: Introduced CLI Quick-Switching (
jvm <version>) for silent, background Java swapping directly from the terminal. - Visual Countdown: Replaced standard script pauses with an interruptible visual auto-close countdown loop.
Changed
- UAC Elevation Refactor: Refactored the UAC elevation block to hardcode
powershell.exeabsolute paths, preventing crashes from corrupted environment variables. - UI Polish: Polished UI aesthetics with strict ANSI color hierarchy and muted absolute file paths.
[0.4.0] - 2026-08-20
Added
- Dynamic Scanner: Re-engineered the JDK discovery engine to dynamically scan developer toolkits (Scoop, Gradle, IntelliJ).
- Fast Parsing: Replaced hardcoded loops with fast release file parsing for instantaneous version resolution.
- Sub-menu Architecture: Completely overhauled the UI architecture with robust sub-menu navigation and input validation.
Changed
- ANSI Enhancements: Polished ANSI padding, visual alignments, and nested log formatting across all menus.
Fixed
- Variable Scope Crashes: Fixed critical variable scope bugs that caused silent crashes during path switching.
[0.3.0] - 2026-08-20
Changed
- Relicensed to AGPL-3.0: Relicensed the project from the MIT License to the GNU Affero General Public License v3.0 (AGPL-3.0).
- Documentation Updates: Added standard LICENSE file containing the full AGPL-3.0 text and updated
README.mdandjvm.batfile headers to reflect the new licensing and copyright.
[0.2.0] - 2026-06-01
Added
- Update Checker: Added Update Checker that compares local metadata against Oracle servers.
- Bulk Updates: Added Update All capability to bulk-scan and patch all installed JDKs.
- Automated Hot-swapping: Automated hot-swapping handles downloading, folder swapping, and
JAVA_HOMEpatching. - Safe Versioning: Added safe versioning logic to prevent accidental downgrades.
[0.1.1] - 2026-05-17
Changed
- UI Adjustment: Rename “Exit without changes” menu item to “Exit”.
Fixed
- PATH Corruption Bug: Fix PATH corruption causing silent crashes after version switch.
- Expansion Buffer: Add local delayed-expansion buffer to safely rebuild session PATH.
- System Variable Drops: Prevent
choicecommand failure from dropped system variables.
[0.1.0] - 2026-05-17
Added
- Initial Release: First stable release of the Java Version Manager for Windows.