UnoSDK is a native CLI tool for Windows that installs and manages multiple software development kits (SDKs) from various providers. Think of it as SDKMAN for Windows, built as a single .exe that runs directly in PowerShell or Command Prompt. Say goodbye to manual downloads, extractions, and environment variable configuration.
- Why UnoSDK?
- UnoSDK vs SDKMAN on Windows
- Features
- Supported SDKs
- Installation
- Usage
- Configuration
- Troubleshooting
- FAQ
- Contributing
- License
If you've used SDKMAN! on Linux or macOS and wished for the same experience on Windows, UnoSDK is for you. It gives you a native Windows workflow for managing multiple SDK versions, without bash, WSL, or manual PATH management.
SDKMAN is an excellent tool, but it is a set of bash scripts. On Windows it only runs inside a Unix-like layer such as WSL, Git Bash, Cygwin, or MSYS2. UnoSDK is a compiled Go binary built specifically for Windows.
| UnoSDK | SDKMAN on Windows | |
|---|---|---|
| Runs in | PowerShell and Command Prompt (native) | Needs WSL, Git Bash, Cygwin, or MSYS2 |
| Installation | One PowerShell command, or drop in a single .exe |
Requires a bash environment plus curl, zip, and unzip first |
| Environment variables | Sets Windows PATH / JAVA_HOME etc. for you |
Works inside the bash shell session; not wired into native Windows apps |
| Works with Windows tools | IDEs, Windows Terminal, PowerShell, cmd, CI agents, and services all see the same SDKs | SDKs installed in WSL live in the Linux filesystem and are not visible to Windows-native tools |
| SDKs available | Java, Node.js, Python, Flutter, Maven, Gradle, Go, C, C++ | Strong JVM ecosystem (Java, Maven, Gradle, Kotlin, Scala, and more), but no Node.js, Python, or Go |
| Windows binaries | Downloads Windows builds (e.g. MinGW-w64 for C/C++) | In WSL, downloads Linux builds, which cannot run natively on Windows |
| Footprint | Single static binary, no runtime dependencies | Shell scripts plus the Unix tooling they depend on |
- No Linux layer required. You don't need to install or maintain WSL or Git Bash just to switch Java versions.
- One tool for your whole stack. Manage your JDK, build tools, Node.js, Python, Go, Flutter, and a C/C++ toolchain together instead of juggling several installers.
- Native paths and variables. SDKs are installed under
%USERPROFILE%\.unosdk\(or any path you choose) and registered in the Windows environment, so Visual Studio Code, IntelliJ IDEA, Android Studio, and build servers can use them without extra setup. - Fast, safe installs. Parallel downloads with progress bars and checksum verification.
- Easy to update. Re-run the install command to upgrade UnoSDK itself.
- You already work primarily inside WSL or a Linux/macOS environment. SDKMAN is the established choice there.
- You need a JVM-ecosystem tool that UnoSDK doesn't support yet (for example Kotlin or Scala).
- You want SDKMAN's wide range of Java vendor distributions (UnoSDK currently offers Amazon Corretto, OpenJDK, and GraalVM).
UnoSDK and SDKMAN can coexist. UnoSDK manages Windows-native SDKs, while SDKMAN inside WSL manages Linux-side ones.
- 🚀 Multi-SDK Support: Manage Java, Node.js, Python, Flutter, Maven, Gradle, Go, C, and C++ from a single tool
- 🪟 Windows Native: A single
.exethat runs in PowerShell and Command Prompt, with no WSL or bash needed - 🔄 Version Switching: Switch between installed SDK versions with one command
- 📦 Multiple Providers: Support for various distribution providers
- Java: Amazon Corretto, OpenJDK, GraalVM
- Node.js: Official Node.js distributions
- Python: Official Python distributions
- Flutter: Official Flutter SDK
- Maven: Apache Maven build tool
- Gradle: Gradle build automation tool
- Go: Official Go programming language
- C / C++: MinGW-w64 (GCC/G++ toolchain)
- 🔧 Automatic Environment Setup: Configures PATH and environment variables for you
- 📋 Registry Management: Keeps track of all installed SDKs
- ⚡ Fast Downloads: Parallel downloads with progress tracking
- 🛡️ Verification: Checksum verification to ensure download integrity
| SDK Type | Providers | Description |
|---|---|---|
| Java | Amazon Corretto, OpenJDK, GraalVM | Java Development Kit |
| Node.js | nodejs | JavaScript runtime environment |
| Python | python | Python programming language |
| Flutter | flutter | Flutter SDK for mobile, web, and desktop apps |
| Maven | apache | Apache Maven build automation tool |
| Gradle | gradle | Gradle build automation tool |
| Go | golang | Go programming language |
| C | mingw | MinGW-w64 GCC toolchain |
| C++ | mingw | MinGW-w64 GCC/G++ toolchain |
- Windows 10 or later
- PowerShell 5.1 or later
Open PowerShell and run:
irm https://raw.githubusercontent.com/javaquery/unosdk/refs/heads/master/scripts/install.ps1 | iexThis will automatically:
- Download the latest release from GitHub
- Install to
%LOCALAPPDATA%\unosdk - Add unosdk to your PATH
- Replace any existing installation
To update UnoSDK: run the same command again. The script detects the existing installation and replaces it with the latest version.
- Go to the releases page
- Download the latest
unosdk.exefor Windows - Move it to a permanent location (e.g.,
C:\Program Files\unosdk\) - Add that directory to your PATH:
$path = [Environment]::GetEnvironmentVariable('Path', 'User')
$newPath = $path + ';C:\Program Files\unosdk'
[Environment]::SetEnvironmentVariable('Path', $newPath, 'User')- Open a new terminal and verify:
unosdk version# List available SDKs
unosdk list
# Install Java
unosdk install java amazoncorretto 21
# Install Node.js
unosdk install node nodejs latest# Display help
unosdk --help
# Show version
unosdk version
# List all available providers and versions
unosdk list
# List installed SDKs
unosdk list --installed# Java
unosdk install java amazoncorretto 21
unosdk install java graalvm 23.1.2
# Node.js
unosdk install node nodejs latest
# Python
unosdk install python python 3.11
# Flutter
unosdk install flutter flutter latest
unosdk install flutter flutter 3.27.2
# Maven
unosdk install maven apache 3.9.9
unosdk install maven apache 3.8.8
# Gradle
unosdk install gradle gradle 8.12
unosdk install gradle gradle 8.10
# Go
unosdk install go golang 1.23.5
unosdk install go golang 1.22.10
# C++ (MinGW-w64)
unosdk install cpp mingw 15.2.0
unosdk install cpp mingw 14.2.0
# C (MinGW-w64)
unosdk install c mingw 15.2.0Install options:
# Install to a custom path
unosdk install java openjdk 17 --path C:\SDKs\java
# Skip environment setup
unosdk install java amazoncorretto 21 --skip-env
# Set as default version
unosdk install java openjdk 21 --set-defaultunosdk switch java openjdk 21
unosdk switch node nodejs 20
unosdk switch gradle gradle 8.12
unosdk switch go golang 1.23.5
unosdk switch cpp mingw 15.2.0
unosdk switch c mingw 15.2.0# Uninstall a specific version
unosdk uninstall java amazoncorretto 21
# Force uninstall (skip confirmation)
unosdk uninstall java openjdk 17 --force# Refresh the list of available SDKs
unosdk updateUnoSDK manages its configuration and tracks installed SDKs automatically. Data is stored in:
%USERPROFILE%\.unosdk\
├── config.yaml # User configuration
├── registry.json # Installed SDKs registry
├── cache/ # Cached SDK metadata
└── sdks/ # Installed SDKs
By default, SDKs are installed under %USERPROFILE%\.unosdk\:
C:\Users\<username>\.unosdk\
├── java\
│ ├── amazoncorretto\
│ │ ├── 11\
│ │ ├── 17\
│ │ └── 21\
│ └── openjdk\
│ └── 21\
├── node\
│ └── nodejs\
│ └── 20\
├── python\
│ └── python\
│ └── 3.11\
├── maven\
│ └── 3.9.9\
├── gradle\
│ └── 8.12\
├── go\
│ └── golang\
│ └── 1.23.5\
├── c\
│ └── mingw\
│ └── 15.2.0\
│ └── mingw64\ # bin/ (gcc), include/, lib/, etc.
└── cpp\
└── mingw\
└── 15.2.0\
└── mingw64\ # bin/ (g++, gcc), include/, lib/, etc.
For example, Amazon Corretto 11 is installed at C:\Users\<username>\.unosdk\java\amazoncorretto\11. Use --path to choose a different location.
- Make sure the directory containing
unosdk.exeis in your PATH - Open a new terminal window after PATH changes
Run PowerShell or Command Prompt as Administrator when:
- Installing SDKs (to set environment variables)
- Switching between SDK versions
- First-time setup
- Verify the SDK is installed:
unosdk list --installed - Check that environment variables are set correctly
- Open a new terminal to refresh environment variables
- Re-select the version:
unosdk switch <sdk-type> <provider> <version>
Q: How is UnoSDK different from SDKMAN? A: SDKMAN is a bash-based tool designed for Linux and macOS; on Windows it requires WSL, Git Bash, Cygwin, or MSYS2. UnoSDK is a native Windows executable that works in PowerShell and Command Prompt, sets Windows environment variables directly, and also covers Node.js, Python, Go, Flutter, and C/C++. See UnoSDK vs SDKMAN on Windows.
Q: Do I need WSL or Git Bash? A: No. UnoSDK is a standalone Windows binary.
Q: Do I need to configure environment variables manually? A: No. UnoSDK configures PATH and other required variables automatically.
Q: Can I install multiple versions of the same SDK?
A: Yes. Install as many as you like and switch with unosdk switch.
Q: Where are SDKs installed?
A: By default in %USERPROFILE%\.unosdk\ (e.g., C:\Users\<username>\.unosdk\java\amazoncorretto\11). Use --path to customize.
Q: Is an internet connection required? A: Only for downloading SDKs. Once installed, SDKs work offline.
Q: Can I use this alongside other SDK managers (including SDKMAN in WSL)? A: Yes, but watch for PATH conflicts. UnoSDK manages its own installations independently.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Issues: Report bugs on GitHub Issues
- Discussions: Ask questions in GitHub Discussions
Special thanks to all the SDK providers for making their distributions available.
This project is licensed under the MIT License. See the LICENSE file for details.
# Clone the repository
git clone https://github.com/javaquery/unosdk.git
cd unosdk
# Build the project (requires Go 1.21+)
.\scripts\build.ps1
# Run tests
go test ./...Edit pkg/version/version.go:
const Version = "1.2.0" // Change this lineThen build and release:
.\scripts\build.ps1
git commit -am "bump version to 1.2.0"
git tag v1.2.0
git push origin master --tags- cobra - CLI framework
- zap - Structured logging
- progressbar - Terminal progress bars
- grab - File downloading
Made with ❤️ for the developer community
