kopi-vm

Kopi Logo

Kopi - JDK Version Manager

License

Kopi is a JDK version management tool written in Rust that integrates with your shell to seamlessly switch between different Java Development Kit versions. It fetches JDK metadata from foojay.io and provides a simple, fast interface similar to tools like volta, nvm, and pyenv.

Who is this for?

Kopi is designed for:

Key Features

How it Works

Kopi integrates with your shell to intercept Java commands and automatically route them to the correct JDK version. It fetches available JDK distributions from foojay.io, a comprehensive OpenJDK discovery service.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Your Shell │────▢│  Kopi Shims  │────▢│  Active JDK   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                            β”‚
                            β–Ό
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚ .kopi-versionβ”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Quick Start

Installation

# Install kopi (coming soon to package managers)
cargo install kopi

# Initial setup - creates directories and installs shims
kopi setup

# Add shims directory to your PATH (in ~/.bashrc, ~/.zshrc, or ~/.config/fish/config.fish)
export PATH="$HOME/.kopi/shims:$PATH"

Basic Usage

# Install a JDK
kopi install 21                    # Latest JDK 21 (Eclipse Temurin by default)
kopi install temurin@17           # Specific distribution and version
kopi install corretto@11.0.21     # Exact version

# List installed JDKs
kopi list

# Set global default
kopi global 21

# Set project-specific version
cd my-project
kopi local 17                     # Creates .kopi-version file

# Show current JDK
kopi current

# Uninstall a JDK
kopi uninstall temurin@21         # Remove specific version
kopi uninstall corretto --all     # Remove all Corretto versions

Project Configuration

Kopi automatically detects and uses JDK versions from configuration files in your project:

temurin@21

.java-version (Compatibility)

17.0.9

When you cd into a project directory, kopi automatically switches to the configured JDK version.

Advanced Features

Search Available JDKs

kopi search 21                    # Search for JDK 21 variants
kopi search corretto              # List all Corretto versions
kopi search 21 --lts-only         # Show only LTS versions
kopi search 21 --detailed         # Show full details

Shell Environment

# Set JDK for current shell session
eval "$(kopi shell 21)"           # Bash/Zsh
kopi shell 21 | source            # Fish
kopi shell 21 | Invoke-Expression # PowerShell

Cache Management

kopi cache refresh                # Update metadata from foojay.io
kopi cache info                   # Show cache details
kopi cache clear                  # Remove cached metadata

Shim Management

kopi shim list                    # List installed shims
kopi shim add native-image        # Add shim for GraalVM tool
kopi shim verify                  # Check shim integrity

Supported Distributions

Kopi supports JDKs from multiple vendors:

Run kopi cache list-distributions to see all available distributions.

Configuration

Global Configuration

Kopi stores global settings in ~/.kopi/config.toml:

# Default distribution for installations
default_distribution = "temurin"

# Additional custom distributions
additional_distributions = ["company-jdk"]

[storage]
# Minimum required disk space in MB
min_disk_space_mb = 500

Environment Variables

Architecture

Kopi is designed with performance and reliability in mind:

Comparison with Similar Tools

Feature Kopi SDKMAN! jenv jabba
Written in Rust Bash Bash Go
Performance ⚑ Fast Moderate Moderate Fast
Auto-switching βœ… βœ… ❌ βœ…
Multiple vendors βœ… βœ… ❌ βœ…
Offline support βœ… ❌ βœ… βœ…
Windows support βœ… ❌ ❌ βœ…
Shell integration βœ… βœ… βœ… βœ…

Development

Prerequisites

Building from Source

git clone https://github.com/your-org/kopi.git
cd kopi

# Development build
cargo build

# Run tests
cargo test

# Release build
cargo build --release

Contributing

We welcome contributions! Please see our Contributing Guidelines for details.

Development Workflow

When completing any coding task:

  1. Run cargo fmt to format code
  2. Run cargo clippy to check for improvements
  3. Run cargo check for fast error checking
  4. Run cargo test --lib to run unit tests
  5. Submit a pull request

All commands must pass without errors before considering work complete.

Documentation

License

Kopi is licensed under the Apache License 2.0. See LICENSE for details.

Acknowledgments


Built with ❀️ by the Kopi team