# rbenv/rbenv

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/rbenv-rbenv).**

16,710 stars · 1,428 forks · Shell · MIT

## Links

- GitHub: https://github.com/rbenv/rbenv
- Homepage: https://rbenv.org/
- awesome-repositories: https://awesome-repositories.com/repository/rbenv-rbenv.md

## Topics

`bash` `ruby` `ruby-installation` `ruby-versions` `shell`

## Description

rbenv is a Ruby version manager and shell environment manager designed to install, switch between, and manage multiple versions of the Ruby programming language. It functions as a project runtime isolator and an extensible versioning framework that ensures the correct Ruby binaries are executed based on the current context.

The system uses a shim-based command interception model to resolve the active version before delegating execution to the binary. It allows for locking specific Ruby versions and environment variables to individual directories, ensuring project environment isolation. The architecture is designed for extensibility, allowing users to add custom commands and hooks through a plugin system.

The tool covers a broad range of capabilities including version management, toolchain configuration, and the management of environment variables. It provides mechanisms to automate library setup and isolate dependencies across different installations.

## Tags

### Programming Languages & Runtimes

- [Version Managers](https://awesome-repositories.com/f/programming-languages-runtimes/language-ecosystems-tooling/version-managers.md) — Provides a comprehensive system for installing, switching, and managing multiple Ruby runtime versions. ([source](https://cdn.jsdelivr.net/gh/rbenv/rbenv@master/README.md))
- [Ruby Version Managers](https://awesome-repositories.com/f/programming-languages-runtimes/ruby-version-managers.md) — Provides a comprehensive system for installing and managing different versions of the Ruby programming language. ([source](https://rbenv.org/man/rbenv.1))
- [Per-Project Runtime Assignments](https://awesome-repositories.com/f/programming-languages-runtimes/per-project-runtime-assignments.md) — Binds a specific Ruby runtime version to a directory to ensure project-specific environment consistency. ([source](https://rbenv.org/))
- [Shim-Based Command Interception](https://awesome-repositories.com/f/programming-languages-runtimes/ruby-version-managers/shim-based-command-interception.md) — Implements a shim-based interception model to execute the correct Ruby binaries and gems without manual path configuration.
- [Environment Isolation](https://awesome-repositories.com/f/programming-languages-runtimes/runtime-execution-environments/runtime-environments/language-runtimes/ruby-environments/environment-isolation.md) — Isolates language runtimes by assigning specific Ruby versions to directories to ensure consistent behavior across projects.
- [Multi-Version Installations](https://awesome-repositories.com/f/programming-languages-runtimes/runtime-execution-environments/runtime-environments/runtime-management-utilities/pre-release-runtime-installers/multi-version-installations.md) — Provides the capability to download and install multiple specific versions of the Ruby runtime. ([source](https://rbenv.org/man/ruby-build.1))
- [Shell Environment Injections](https://awesome-repositories.com/f/programming-languages-runtimes/shell-functions/shell-environment-injections.md) — Injects logic into the shell session to update environment variables and modify the command search path dynamically.

### Development Tools & Productivity

- [Command Interception Shims](https://awesome-repositories.com/f/development-tools-productivity/command-interception-shims.md) — Uses proxy mechanisms to dynamically resolve and route command execution to the correct Ruby binary.
- [Runtime Version Switching](https://awesome-repositories.com/f/development-tools-productivity/runtime-version-detectors/runtime-version-switching.md) — Enables switching between different Ruby versions based on global defaults, project files, or shell sessions. ([source](https://rbenv.org/man/rbenv.1))
- [Shell Environment Managers](https://awesome-repositories.com/f/development-tools-productivity/shell-environment-managers.md) — Modifies terminal sessions by injecting environment variables and updating paths to ensure correct binary execution.
- [Shim Regeneration](https://awesome-repositories.com/f/development-tools-productivity/command-interception-shims/shim-regeneration.md) — Rebuilds proxy executables to ensure the command line interface maps to the latest installed binaries. ([source](https://cdn.jsdelivr.net/gh/rbenv/rbenv@master/README.md))
- [Command Line Extensions](https://awesome-repositories.com/f/development-tools-productivity/command-line-extensions.md) — Provides a framework for defining custom commands and plugins to extend the version manager's functionality.
- [Dependency Isolation Tools](https://awesome-repositories.com/f/development-tools-productivity/dependency-isolation-tools.md) — Provides utilities for configuring custom paths to isolate language-specific dependencies (gems) per project. ([source](https://github.com/rbenv/rbenv/wiki/Plugins))

### Software Engineering & Architecture

- [Directory-Based Version Resolution](https://awesome-repositories.com/f/software-engineering-architecture/directory-based-version-resolution.md) — Determines the active Ruby version by searching for configuration files in the current and parent directories.
- [Isolated Runtime Directories](https://awesome-repositories.com/f/software-engineering-architecture/isolated-runtime-directories.md) — Installs separate language versions into distinct folders to prevent binary conflicts.
- [Hook-Based Extension Frameworks](https://awesome-repositories.com/f/software-engineering-architecture/hook-based-extension-frameworks.md) — Uses a hook-based architecture to allow plugins to add custom commands and extend environment management.
- [Plugin Extenders](https://awesome-repositories.com/f/software-engineering-architecture/integration-extensibility/extensibility/plugin-architectures/developer-authoring-interfaces/custom-module-implementations/module-functionality-extenders/plugin-extenders.md) — Allows loading custom external libraries at runtime to augment core version management functionality. ([source](https://rbenv.org/man/rbenv.1))
- [Plugin Managers](https://awesome-repositories.com/f/software-engineering-architecture/integration-extensibility/extensibility/plugin-managers.md) — Facilitates the discovery, installation, and management of third-party extensions to add new functionality. ([source](https://github.com/rbenv/rbenv/wiki/Plugins))
- [Tooling Plugin Systems](https://awesome-repositories.com/f/software-engineering-architecture/software-architecture/architectural-patterns/plugin-module-systems/modular-plugin-architectures/plugin-based-architectures/hook-based-plugin-systems/tooling-plugin-systems.md) — Implements an architecture for adding custom tools and commands via external plugin loading. ([source](https://github.com/rbenv/rbenv/wiki/Authoring-plugins))

### DevOps & Infrastructure

- [Environment Variable Management](https://awesome-repositories.com/f/devops-infrastructure/configuration-management/environment-management/environment-variable-management.md) — Manages host-level environment variables for both global and project-specific runtime configurations. ([source](https://github.com/rbenv/rbenv/wiki/Plugins))
- [Environment Variable Configurations](https://awesome-repositories.com/f/devops-infrastructure/configuration-management/environment-management/environment-variable-management/environment-variable-configurations.md) — Provides mechanisms to inject runtime settings and configuration parameters via project-specific environment variable files.

### Part of an Awesome List

- [Command Line Utilities](https://awesome-repositories.com/f/awesome-lists/devtools/command-line-utilities.md) — Version management for Ruby environments.
