frum

version-managementRubydevelopment-environmentCLIRustfastmodern2024-trending

GitHub Overview

TaKO8Ki/frum

A little bit fast and modern Ruby version manager written in Rust

Stars646
Watchers8
Forks14
Created:March 8, 2021
Language:Rust
License:MIT License

Topics

farmrbenvrubyrustversion-manager

Star History

TaKO8Ki/frum Star History
Data as of: 7/20/2025, 02:56 AM

Language Version Management Tool

frum (Fast Ruby Version Manager)

Overview

frum is a fast and modern Ruby version manager implemented in Rust. Released in 2021, this new tool is approximately 7 seconds faster than rbenv and achieves overwhelming speed through a direct approach without shims. With a built-in installer, it provides a complete solution from Ruby installation to management without additional tools.

Details

Key Features

  • Rust Implementation: High-speed execution with systems programming language
  • Ultra-fast: Order of magnitude speed improvement compared to rbenv
  • All-in-one: Built-in Ruby installer eliminates need for additional tools
  • Shim-less: Direct execution without proxies
  • No Dependencies: Complete in a single Rust executable
  • Cross-platform: Supports Linux, macOS, Windows (WSL recommended)

Technical Advantages

frum's speed advantage comes from the following design decisions:

  • Native Binary: Single executable compiled with Rust
  • Direct PATH Manipulation: No shims or wrapper scripts
  • Efficient Caching: Optimization through Rust's ownership system
  • Parallel Processing: Leverages Rust's safe concurrency

2024 Evaluation

  • Rated as "recommended for balance of speed and functionality"
  • Recommended alternative when asdf feels slow
  • Stability improved with maturation of Rust-based tools

Pros and Cons

Pros

  • Outstanding Speed: Instant startup and version switching
  • Simple Installation: One-command install via Homebrew or winget
  • Integrated Installer: No need for ruby-build or ruby-install
  • Memory Efficiency: Minimal memory usage through Rust implementation
  • Modern Design: Optimized for 2020s development environments
  • Flexible Configuration: Easy option specification during installation

Cons

  • Short History: Released in 2021 with still small community
  • Limited Features: No extensibility with plugin systems
  • Incomplete rbenv Compatibility: Doesn't support all rbenv features
  • Documentation Lacking: Official documentation still developing
  • Edge Cases: Few reports on behavior in special environments

References

Usage Examples

Installation

# Install with Homebrew (recommended for macOS/Linux)
brew install frum

# Install with Cargo (if Rust environment exists)
cargo install frum

# Install with winget (Windows)
winget install TaKO8Ki.frum

# Download binary directly
# Download latest version from GitHub Releases page
wget https://github.com/TaKO8Ki/frum/releases/latest/download/frum-{version}-{platform}.tar.gz
tar -xzf frum-{version}-{platform}.tar.gz
sudo mv frum /usr/local/bin/

Shell Configuration

# Add to ~/.bashrc
eval "$(frum init)"

# Add to ~/.zshrc
eval "$(frum init)"

# For fish (~/.config/fish/config.fish)
frum init | source

# For PowerShell (Windows)
Invoke-Expression (& frum init)

Basic Usage

# Show available Ruby versions
frum install --list
frum install -l

# Install latest stable version
frum install

# Install specific version
frum install 3.3.0
frum install 3.2.3

# Check installed versions
frum list
frum ls

# Set global version
frum global 3.3.0

# Check current version
frum current
ruby --version

Installation Options

# Specify OpenSSL directory
frum install 3.3.0 --with-openssl-dir=/usr/local/opt/openssl

# Install with jemalloc enabled
frum install 3.3.0 --with-jemalloc

# Specify multiple options
frum install 3.3.0 \
  --with-openssl-dir=/usr/local/opt/openssl \
  --with-readline-dir=/usr/local/opt/readline \
  --enable-shared

# Install with debug symbols
frum install 3.3.0 --enable-debug

Project-specific Management

# Configure in project directory
cd /path/to/myproject

# Set local version (creates .ruby-version file)
frum local 3.3.0

# Check .ruby-version file
cat .ruby-version
# 3.3.0

# Auto-switching on directory change
cd ..
frum current  # Global or parent setting
cd myproject
frum current  # Auto-switched to 3.3.0

Version Management

# Temporary version switch (current shell only)
frum shell 3.2.3
ruby --version  # 3.2.3

# Returns to original when shell exits
exit
ruby --version  # Original version

# Execute command with different version
frum exec 3.2.3 -- ruby script.rb
frum exec 3.2.3 -- bundle install

# Uninstall
frum uninstall 3.1.0

Advanced Usage

# Set version alias
frum alias create stable 3.3.0
frum global stable

# List aliases
frum alias list

# Delete alias
frum alias delete stable

# Check environment variables
echo $FRUM_DIR         # frum installation directory
echo $FRUM_RUBY_BUILD_MIRROR  # Custom mirror URL (if set)

# Clear cache
frum cache clear

Bundler Integration

# Project setup
mkdir myapp && cd myapp
frum local 3.3.0

# Install Bundler
gem install bundler

# Create Gemfile and install dependencies
bundle init
bundle add rails
bundle install

# Include .ruby-version in version control
git add .ruby-version Gemfile Gemfile.lock
git commit -m "Setup Ruby 3.3.0 with dependencies"

CI/CD Environment Usage

# GitHub Actions example
# .github/workflows/ci.yml
- name: Install frum
  run: |
    curl -L https://github.com/TaKO8Ki/frum/releases/latest/download/frum-linux.tar.gz | tar xz
    sudo mv frum /usr/local/bin/
    
- name: Setup Ruby
  run: |
    frum install $(cat .ruby-version)
    frum global $(cat .ruby-version)
    
- name: Install dependencies
  run: bundle install

Troubleshooting

# Verify frum operation
frum --version
which frum

# Run in debug mode
FRUM_DEBUG=1 frum install 3.3.0

# Check installation logs
cat ~/.frum/install.log

# Reset configuration
rm -rf ~/.frum
eval "$(frum init)"

# Check PATH
echo $PATH | grep frum

# Manually add to PATH (temporary)
export PATH="$HOME/.frum/bin:$PATH"