asdf-vm / asdf-vm/asdf

asdf 0.16.0+ `asdf shell` alternative

Open
#1,911 9 comments 18 reactions 0 assignees View on GitHub
enhancement
Dominant language
Go
Stars
25.6k
Forks
941
Avg merge
9h 24m
Merged PRs (30d)
3

Description

### Is your feature request related to a problem? Please describe

Before 0.16.0, it was quite handy to be able to set a version for the current shell session. e.g. for no downtime ruby deployments, I could install the new ruby version, use `asdf shell` to switch to it without the current shell, and install the required rubygems via bundler before switching our app over to use it.

### Describe the proposed solution

Reimplement `asdf shell` (or `asdf set --shell`) so that asdf versions can be overwritten for the current shell environment

### Describe similar `asdf` features and why they are not sufficient

With `asdf shell` gone, the only solution is to use `asdf set`, which overwrites tool-versions, which means when the application next boots up or scales up automatically, it uses the changed ruby version which might not be ready yet.

### Describe other workarounds you've considered

I guess a work around would be to make a new directory, create a tool-versions there, a copy over the Gemfile and Gemfile.lock, but this is cumbersome compared to a quick `asdf shell ruby 3.4.1` (or using the new set, `asdf set --shell ruby 3.4.1`)

Contributor guide

Open the contributing guide

Research direction

Start by tracing the existing `asdf set` and shell-command handling, focusing on how versions are resolved and exported to the current shell. Implement the requested `asdf shell` or `asdf set --shell` behavior without changing the project’s tool-versions, then verify that the selected version applies only to the current shell session.

Written by the indexing model from the issue text.

Assessment

Tech stack
shell
Domain
cli
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.