{"id":13903040,"url":"https://github.com/dotboris/alt","last_synced_at":"2026-01-31T23:45:39.395Z","repository":{"id":39461129,"uuid":"141182646","full_name":"dotboris/alt","owner":"dotboris","description":"A simple version manager tool for switching between different versions of commands","archived":false,"fork":false,"pushed_at":"2026-01-12T05:50:57.000Z","size":1362,"stargazers_count":88,"open_issues_count":1,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-12T15:44:21.945Z","etag":null,"topics":["cli","command-line","developer-tools","language-agnostic","linux","osx","rust","shell","version-manager"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dotboris.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-07-16T19:13:53.000Z","updated_at":"2026-01-10T09:24:23.000Z","dependencies_parsed_at":"2024-01-13T03:55:48.946Z","dependency_job_id":"640b8631-e42f-4714-873d-c37223848955","html_url":"https://github.com/dotboris/alt","commit_stats":null,"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/dotboris/alt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotboris%2Falt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotboris%2Falt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotboris%2Falt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotboris%2Falt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dotboris","download_url":"https://codeload.github.com/dotboris/alt/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotboris%2Falt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28961064,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T23:03:11.038Z","status":"ssl_error","status_checked_at":"2026-01-31T22:56:44.691Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","command-line","developer-tools","language-agnostic","linux","osx","rust","shell","version-manager"],"created_at":"2024-08-06T22:01:34.868Z","updated_at":"2026-01-31T23:45:39.367Z","avatar_url":"https://github.com/dotboris.png","language":"Rust","funding_links":[],"categories":["cli"],"sub_categories":[],"readme":"# alt the version switcher\n\n![GitHub All Releases](https://img.shields.io/github/downloads/dotboris/alt/total)\n![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/dotboris/alt?sort=semver)\n![License](https://img.shields.io/github/license/dotboris/alt)\n\n`alt` is a command line utility that lets you switch between different versions\nof commands based on your current directory.\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://asciinema.org/a/195103?autoplay=1\" target=\"_blank\"\u003e\n    \u003cimg alt=\"Screencast demo of alt\" src=\"demo.gif\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n## Why?\n\nAs developers, we work with a large number of tools. When we move from codebase\nto codebase, those tools and their versions change. Switching between the\ndifferent versions of those tools every time you change codebase is a nightmare.\n\nThis is where `alt` comes in. It will automatically switch the version of\ncommands when you move to a different codebase.\n\nThere are other tools out there that solve this problem. `alt` distinguish\nitself in a few ways:\n\n-   __tool / language agnostic__: Some version switching tools only work with a\n    specific tool or programming language. `alt` is generic. It works for any\n    command.\n-   __no shell pollution__: Most version switching tools hook themselves into\n    your shell. This can slow down your shell's start time. `alt` does not hook\n    into your shell. You can use it without slowing down your shell start time.\n-   __only version switching__: Unlike other tools, `alt` does not take\n    responsibility for installing different versions of commands or managing\n    their dependencies. How you install different versions of commands is\n    entirely up to you.\n\n## Install\n\n### Debian / Ubuntu / Anything using DEBs\n\n1.  Open the [latest release page on Github][latest-release]\n1.  Download the `.deb` file matching your system architecture\n1.  Install the `.deb` file by double clicking on it\n1.  OR Install the `.deb` file from the command line\n\n    ```sh\n    sudo apt install ./path/to/alt.deb\n    ```\n\nYou will probably need to log out \u0026 log back in to your desktop session for\n`alt` to be configured.\n\n### OSX (Homebrew \u0026 Linuxbrew)\n\n```sh\nbrew tap dotboris/alt\nbrew install alt\n```\n\nPay close attention to the \"Caveats\" messages as you'll need to add a line to\nyour `~/.bashrc` / `~/.zshrc` files.\n\n### Pre-packaged binaries\n\nSee: [doc/install-pre-packaged-bins.md](./doc/install-pre-packaged-bins.md)\n\n### From source\n\nSee: [doc/install-from-source.md](./doc/install-from-source.md)\n\n## Usage\n\nUsing `alt` is done in two steps:\n\n1.  First, you tell `alt` about the different versions of commands installed on\n    your system.\n1.  Second, you tell `alt` what version of your commands to use in a given\n    directory.\n\n### Define command versions\n\n`alt` can automatically scan your system to find different version of a command.\nThis can be done with the `alt scan` command:\n\n```sh\nalt scan some-command\n```\n\nThis will bring up a menu that lets you choose all the versions of the given\ncommand that you want to use with `alt`.\n\n- \u003ckbd\u003e↑\u003c/kbd\u003e / \u003ckbd\u003e↓\u003c/kbd\u003e or \u003ckbd\u003ej\u003c/kbd\u003e / \u003ckbd\u003ek\u003c/kbd\u003e: Move cursor\n- \u003ckbd\u003eSpace\u003c/kbd\u003e: Make version available to `alt`\n- \u003ckbd\u003eEnter\u003c/kbd\u003e: Confirm and save selection\n\nIf `alt` is not able to find a version of a command automatically for you, you\ncan always define the command version by hand.\n\nThis can be done with the `alt def` command:\n\n```sh\nalt def some-command version-name /path/to/command/bin\n```\n\n### Switch command version\n\nRemember that `alt` decides what version of a command to use based on the\ncurrent directory. When you select a command version, it's for the current\ndirectory.\n\nYou can tell `alt` to use a specific version of a command in the current\ndirectory with the `alt use` command:\n\n```sh\nalt use some-command\n```\n\nThis will bring up a menu that lets you choose the version of the specified\ncommand that you want to use.\n\n- \u003ckbd\u003e↑\u003c/kbd\u003e / \u003ckbd\u003e↓\u003c/kbd\u003e or \u003ckbd\u003ej\u003c/kbd\u003e / \u003ckbd\u003ek\u003c/kbd\u003e: Move cursor\n- \u003ckbd\u003eEnter\u003c/kbd\u003e: Select version to use\n\nIf menus aren't your cup of tea, you can specify the version on the command\nline:\n\n```sh\nalt use some-command version-name\n```\n\nNote: If you want to use the system version without the menu, you can pass\n`system` as the `version-name`.\n\n```sh\nalt use some-command system\n```\n\n### Show known commands \u0026 used versions\n\n```sh\nalt show\n```\n\nThe above command will show you:\n\n- All commands `alt` knows about\n- The versions of those commands available\n- The versions being used in the current directory\n\n## Troubleshooting\n\nIf you are experiencing issues with `alt`, you should try running `alt`'s\nbuilt-in self-healing command:\n\n```sh\nalt doctor\n```\n\nThis command will look for problems, report them to you and, in some cases,\npropose an automatic fix.\n\nIf `alt doctor` is not able to find or fix your problem, you can try looking at\nthe sections below. If that doesn't help, feel free to [open an\nissue](https://github.com/dotboris/alt/issues/new). We'll be happy to help you\nout.\n\n### Warning about shims directory not being in `PATH`\n\nBehind the scenes, `alt` manages a directory of \"shims\"\n(`$HOME/.local/alt/shims`). In order to switch the version of commands, it needs\nthat directory to be at the top of your `PATH` environment variable.\n\nDuring the install process, we install scripts that configure this\nautomatically for you. These scripts are `/etc/profile.d/alt.sh` \u0026\n`/etc/fish/conf.d/alt.fish` (the location of these scripts may vary on some\nplatforms).\n\nIn some cases, you may need to force these scripts to re-load. You can try the\nfollowing steps:\n\n1.  Close \u0026 re-open your terminal\n1.  Log out of your desktop session \u0026 log back in again\n\nIf either or both of these fail, you can put the shim directory on top of your\n`PATH` manually. This will vary depending on what shell you use.\n\n```sh\n# For BASH\necho 'export PATH=\"$HOME/.local/alt/shims:$PATH\"' \u003e\u003e ~/.bashrc\n\n# For ZSH\necho 'export PATH=\"$HOME/.local/alt/shims:$PATH\"' \u003e\u003e ~/.zshrc\n\n# For FISH\necho 'set -gx PATH \"$HOME/.local/alt/shims\" $PATH' \u003e\u003e ~/.config/fish/config.fish\n```\n\n### `.alt.toml` file in git repositories\n\nDuring it's normal operation, `alt` puts a file named `.alt.toml` in the current\ndirectory. __You should not commit `.alt.toml` to git or any other VCS.__ To\navoid getting those files all over your git repositories, you can add them to a\nglobal gitignore file.\n\nIf you don't know how to create a global gitignore file, see:\nhttps://help.github.com/articles/ignoring-files/#create-a-global-gitignore\n\n```sh\necho '.alt.toml' \u003e\u003e path/to/your/global-gitgnore\n```\n\n[latest-release]: https://github.com/dotboris/alt/releases/latest\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotboris%2Falt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdotboris%2Falt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotboris%2Falt/lists"}