docs/dev-tools/backends/asdf.md
::: warning asdf plugins are considered legacy. New asdf and vfox plugins are not accepted into the mise registry for supply-chain security reasons — for registry submissions use packslip (preferred when the project publishes packslips), aqua, github, or gitlab instead.
If you are writing a private/custom plugin (not for registry submission), prefer vfox plugins over asdf — they're written in Lua, work cross-platform (including Windows), and have access to built-in modules for HTTP, JSON, HTML parsing, and more. :::
The asdf backend runs a tool's asdf-compatible plugin scripts. Use it when an
existing plugin provides installation behavior your tool needs. These scripts
execute with your permissions and may invoke programs outside mise, so inspect
the plugin source and its prerequisites before using it.
asdf plugins generally need Bash and Unix utilities. Windows support depends on the plugin and its execution environment; prefer a supported native backend or a vfox plugin there.
Use an explicit plugin source when it is not supplied by the registry. Replace the repository and version with the plugin you intend to use:
[tools]
"asdf:owner/plugin" = "1.0.0"
Run mise install, then mise exec -- TOOL --version, replacing TOOL with its
executable name. Installing a plugin does not itself configure an active tool
version. For existing registry tools, mise registry TOOL shows the configured
sources.
| Area | asdf plugins | vfox plugins |
|---|---|---|
| Implementation | Executable scripts, usually Bash | Lua hooks run by mise's embedded interpreter |
| External utilities | Often need curl, jq, and platform utilities | Built-in HTTP, JSON, HTML, and archive modules are available |
| Platform portability | Depends on scripts and available commands | Lua hooks can select platform-specific artifacts; publishers must supply compatible builds |
| Installation | Plugin scripts download and install the tool | Structured download metadata plus optional post-install hooks |
| Lockfiles | Version locking; no portable artifact URL/provenance contract | Tool plugins can supply download metadata and attestations; backend-plugin capabilities differ |
These are interface differences, not a sandbox boundary. Either plugin system can run external commands. See plugin development for the capabilities mise adds to the vfox hook interface.
| asdf Script | vfox Hook | Notes |
|---|---|---|
bin/list-all | Available | Return structured version objects instead of plain text |
bin/download | PreInstall | Return URL and checksum; mise handles the download |
bin/install | PostInstall | Runs after mise downloads and extracts the tool |
bin/exec-env | EnvKeys | Return structured key/value pairs instead of export statements |
bin/list-legacy-filenames | PLUGIN.legacyFilenames | Set in metadata.lua instead of a script |
bin/parse-legacy-file | ParseLegacyFile | Return structured result instead of plain text |
See the asdf documentation for more information on writing plugins.
The bin/list-all and bin/latest-stable version scripts receive environment variables and PATH
additions resolved from mise configuration before tools are loaded. This allows private plugins to
use credentials, helper executables from _.path, or other project-specific values from [env]
while listing versions. Because these values can change the available versions, mise stores
version-list caches separately for each resolved configuration environment without writing the
original values or paths to the cache.
The following tool-options are available for the asdf backend—these
go in [tools] in mise.toml.
install_envSet environment variables for asdf plugin install scripts:
[tools]
"asdf:owner/plugin" = { version = "latest", install_env = { MAKEFLAGS = "-j8" } }
Matching tools selected in the same install operation and declared with the
depends option are installed before the asdf tool. Their paths
are added to the PATH used by its bin/download and bin/install scripts:
[tools]
python = "3.12"
"asdf:owner/plugin" = { version = "latest", depends = ["python"] }
This allows an asdf plugin to invoke an executable supplied by another mise-managed tool during
the same mise install. Other active mise tools are not added implicitly; declare every
mise-managed install requirement with depends. Executables already available on the ambient
system or configuration PATH remain available.
The depends option does not add or install a missing tool. A configured dependency must already
be installed or selected in the same install operation.