asdf/plugins/create.html
2024-12-18 20:10:43 +00:00

83 lines
115 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Create a Plugin | asdf</title>
<meta name="description" content="Manage multiple runtime versions with a single CLI tool">
<meta name="generator" content="VitePress v1.5.0">
<link rel="preload stylesheet" href="/assets/style.BjfE0TmN.css" as="style">
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
<script type="module" src="/assets/app.BjlyxdH5.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/theme.Cb3KoOiM.js">
<link rel="modulepreload" href="/assets/chunks/framework.BQmytedh.js">
<link rel="modulepreload" href="/assets/plugins_create.md.DOuyNDOe.lean.js">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-d8b57b2d><!--[--><!--]--><!--[--><span tabindex="-1" data-v-c8291ffa></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-c8291ffa> Skip to content </a><!--]--><!----><header class="VPNav" data-v-d8b57b2d data-v-7ad780c2><div class="VPNavBar" data-v-7ad780c2 data-v-9fd4d1dd><div class="wrapper" data-v-9fd4d1dd><div class="container" data-v-9fd4d1dd><div class="title" data-v-9fd4d1dd><div class="VPNavBarTitle has-sidebar" data-v-9fd4d1dd data-v-9f43907a><a class="title" href="/" data-v-9f43907a><!--[--><!--]--><!----><span data-v-9f43907a>asdf</span><!--[--><!--]--></a></div></div><div class="content" data-v-9fd4d1dd><div class="content-body" data-v-9fd4d1dd><!--[--><!--]--><div class="VPNavBarSearch search" data-v-9fd4d1dd><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-9fd4d1dd data-v-afb2845e><span id="main-nav-aria-label" class="visually-hidden" data-v-afb2845e> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/guide/getting-started.html" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Guide</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/manage/configuration.html" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Reference</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-afb2845e data-v-bfe7971f><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-bfe7971f><span class="text" data-v-bfe7971f><!----><span data-v-bfe7971f>0.15.0</span><span class="vpi-chevron-down text-icon" data-v-bfe7971f></span></span></button><div class="menu" data-v-bfe7971f><div class="VPMenu" data-v-bfe7971f data-v-20ed86d6><div class="items" data-v-20ed86d6><!--[--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-7eeeb2dc><a class="VPLink link vp-external-link-icon" href="https://github.com/asdf-vm/asdf/blob/master/CHANGELOG.md" target="_blank" rel="noreferrer" data-v-7eeeb2dc><!--[--><span data-v-7eeeb2dc>Changelog</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-7eeeb2dc><a class="VPLink link" href="/contribute/core.html" data-v-7eeeb2dc><!--[--><span data-v-7eeeb2dc>Contribute</span><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-9fd4d1dd data-v-acee064b data-v-bfe7971f><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-bfe7971f><span class="text" data-v-bfe7971f><span class="vpi-languages option-icon" data-v-bfe7971f></span><!----><span class="vpi-chevron-down text-icon" data-v-bfe7971f></span></span></button><div class="menu" data-v-bfe7971f><div class="VPMenu" data-v-bfe7971f data-v-20ed86d6><!----><!--[--><!--[--><div class="items" data-v-acee064b><p class="title" data-v-acee064b>English</p><!--[--><div class="VPMenuLink" data-v-acee064b data-v-7eeeb2dc><a class="VPLink link" href="/ko-kr/plugins/create.html" data-v-7eeeb2dc><!--[--><span data-v-7eeeb2dc>한국어</span><!--]--></a></div><div class="VPMenuLink" data-v-acee064b data-v-7eeeb2dc><a class="VPLink link" href="/ja-jp/plugins/create.html" data-v-7eeeb2dc><!--[--><span data-v-7eeeb2dc>日本語</span><!--]--></a></div><div class="VPMenuLink" data-v-acee064b data-v-7eeeb2dc><a class="VPLink link" href="/pt-br/plugins/create.html" data-v-7eeeb2dc><!--[--><span data-v-7eeeb2dc>Brazilian Portuguese</span><!--]--></a></div><div class="VPMenuLink" data-v-acee064b data-v-7eeeb2dc><a class="VPLink link" href="/zh-hans/plugins/create.html" data-v-7eeeb2dc><!--[--><span data-v-7eeeb2dc>简体中文</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-9fd4d1dd data-v-3f90c1a5><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-3f90c1a5 data-v-be9742d9 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-be9742d9></span><span class="vpi-moon moon" data-v-be9742d9></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-9fd4d1dd data-v-ef6192dc data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://github.com/asdf-vm/asdf" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-60a9a2d3><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-9fd4d1dd data-v-f953d92f data-v-bfe7971f><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-bfe7971f><span class="vpi-more-horizontal icon" data-v-bfe7971f></span></button><div class="menu" data-v-bfe7971f><div class="VPMenu" data-v-bfe7971f data-v-20ed86d6><!----><!--[--><!--[--><div class="group translations" data-v-f953d92f><p class="trans-title" data-v-f953d92f>English</p><!--[--><div class="VPMenuLink" data-v-f953d92f data-v-7eeeb2dc><a class="VPLink link" href="/ko-kr/plugins/create.html" data-v-7eeeb2dc><!--[--><span data-v-7eeeb2dc>한국어</span><!--]--></a></div><div class="VPMenuLink" data-v-f953d92f data-v-7eeeb2dc><a class="VPLink link" href="/ja-jp/plugins/create.html" data-v-7eeeb2dc><!--[--><span data-v-7eeeb2dc>日本語</span><!--]--></a></div><div class="VPMenuLink" data-v-f953d92f data-v-7eeeb2dc><a class="VPLink link" href="/pt-br/plugins/create.html" data-v-7eeeb2dc><!--[--><span data-v-7eeeb2dc>Brazilian Portuguese</span><!--]--></a></div><div class="VPMenuLink" data-v-f953d92f data-v-7eeeb2dc><a class="VPLink link" href="/zh-hans/plugins/create.html" data-v-7eeeb2dc><!--[--><span data-v-7eeeb2dc>简体中文</span><!--]--></a></div><!--]--></div><div class="group" data-v-f953d92f><div class="item appearance" data-v-f953d92f><p class="label" data-v-f953d92f>Appearance</p><div class="appearance-action" data-v-f953d92f><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-f953d92f data-v-be9742d9 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-be9742d9></span><span class="vpi-moon moon" data-v-be9742d9></span><!--]--></span></span></button></div></div></div><div class="group" data-v-f953d92f><div class="item social-links" data-v-f953d92f><div class="VPSocialLinks social-links-list" data-v-f953d92f data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://github.com/asdf-vm/asdf" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-60a9a2d3><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-9fd4d1dd data-v-6bee1efd><span class="container" data-v-6bee1efd><span class="top" data-v-6bee1efd></span><span class="middle" data-v-6bee1efd></span><span class="bottom" data-v-6bee1efd></span></span></button></div></div></div></div><div class="divider" data-v-9fd4d1dd><div class="divider-line" data-v-9fd4d1dd></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-d8b57b2d data-v-2488c25a><div class="container" data-v-2488c25a><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-2488c25a><span class="vpi-align-left menu-icon" data-v-2488c25a></span><span class="menu-text" data-v-2488c25a>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-2488c25a data-v-883964e0><button data-v-883964e0>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-d8b57b2d data-v-42c4c606><div class="curtain" data-v-42c4c606></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-42c4c606><span class="visually-hidden" id="sidebar-aria-label" data-v-42c4c606> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0 collapsible" data-v-51288d80 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h2 class="text" data-v-edd2eed8>Guide</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/guide/introduction.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>What is asdf?</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/guide/getting-started.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>Getting Started</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0 collapsible" data-v-51288d80 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h2 class="text" data-v-edd2eed8>Usage</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/manage/core.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>Core</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/manage/plugins.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>Plugins</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/manage/versions.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>Versions</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0 collapsible" data-v-51288d80 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h2 class="text" data-v-edd2eed8>Reference</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/manage/configuration.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>Configuration</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/manage/commands.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>All Commands</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link vp-external-link-icon link" href="https://github.com/asdf-vm/asdf-plugins" target="_blank" rel="noreferrer" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>Plugin Shortname Index</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0 collapsible collapsed has-active" data-v-51288d80 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h2 class="text" data-v-edd2eed8>Plugins</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><section class="VPSidebarItem level-1 has-active" data-v-edd2eed8 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h3 class="text" data-v-edd2eed8>Authors</h3><!----></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/plugins/create.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>Create a Plugin</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link vp-external-link-icon link" href="https://github.com/asdf-vm/asdf-plugin-template" target="_blank" rel="noreferrer" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>GitHub Plugin Template</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1" data-v-edd2eed8 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h3 class="text" data-v-edd2eed8>First Party Plugins</h3><!----></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link vp-external-link-icon link" href="https://github.com/asdf-vm/asdf-elixir" target="_blank" rel="noreferrer" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>Elixir</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link vp-external-link-icon link" href="https://github.com/asdf-vm/asdf-erlang" target="_blank" rel="noreferrer" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>Erlang</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link vp-external-link-icon link" href="https://github.com/asdf-vm/asdf-nodejs" target="_blank" rel="noreferrer" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>Node.js</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link vp-external-link-icon link" href="https://github.com/asdf-vm/asdf-ruby" target="_blank" rel="noreferrer" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>Ruby</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1" data-v-edd2eed8 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h3 class="text" data-v-edd2eed8>Community Plugins</h3><!----></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link vp-external-link-icon link" href="https://github.com/asdf-community" target="_blank" rel="noreferrer" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>asdf-community</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link vp-external-link-icon link" href="https://github.com/topics/asdf-plugin" target="_blank" rel="noreferrer" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>GitHub Topics Search</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section></div><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0 collapsible collapsed" data-v-51288d80 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h2 class="text" data-v-edd2eed8>Questions</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/more/faq.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>FAQ</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link vp-external-link-icon link" href="https://github.com/asdf-vm/asdf/issues" target="_blank" rel="noreferrer" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>GitHub Issues</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link vp-external-link-icon link" href="https://stackoverflow.com/questions/tagged/asdf-vm" target="_blank" rel="noreferrer" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>Stack Overflow Tag</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0 collapsible collapsed" data-v-51288d80 data-v-edd2eed8><div class="item" role="button" tabindex="0" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><h2 class="text" data-v-edd2eed8>Contribute</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-edd2eed8><span class="vpi-chevron-right caret-icon" data-v-edd2eed8></span></div></div><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/contribute/core.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>Core asdf</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/contribute/documentation.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>Documentation</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/contribute/first-party-plugins.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>First-Party Plugins</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/contribute/github-actions.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>GitHub Actions</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-51288d80><section class="VPSidebarItem level-0" data-v-51288d80 data-v-edd2eed8><!----><div class="items" data-v-edd2eed8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/more/community-projects.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>Community Projects</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-edd2eed8 data-v-edd2eed8><div class="item" data-v-edd2eed8><div class="indicator" data-v-edd2eed8></div><a class="VPLink link link" href="/more/thanks.html" data-v-edd2eed8><!--[--><p class="text" data-v-edd2eed8>Thanks</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-d8b57b2d data-v-9a6c75ad><div class="VPDoc has-sidebar has-aside" data-v-9a6c75ad data-v-e6f2a212><!--[--><!--]--><div class="container" data-v-e6f2a212><div class="aside" data-v-e6f2a212><div class="aside-curtain" data-v-e6f2a212></div><div class="aside-container" data-v-e6f2a212><div class="aside-content" data-v-e6f2a212><div class="VPDocAside" data-v-e6f2a212 data-v-cb998dce><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-cb998dce data-v-f610f197><div class="content" data-v-f610f197><div class="outline-marker" data-v-f610f197></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-f610f197>On this page</div><ul class="VPDocOutlineItem root" data-v-f610f197 data-v-53c99d69><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-cb998dce></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-e6f2a212><div class="content-container" data-v-e6f2a212><!--[--><!--]--><main class="main" data-v-e6f2a212><div style="position:relative;" class="vp-doc _plugins_create" data-v-e6f2a212><div><h1 id="create-a-plugin" tabindex="-1">Create a Plugin <a class="header-anchor" href="#create-a-plugin" aria-label="Permalink to &quot;Create a Plugin&quot;"></a></h1><p>A plugin is a Git repo with some executable scripts to support versioning a language / tool. These scripts are run by asdf using specific commands to support features such as <code>asdf list-all &lt;name&gt;</code>, <code>asdf install &lt;name&gt; &lt;version&gt;</code> etc.</p><h2 id="quickstart" tabindex="-1">Quickstart <a class="header-anchor" href="#quickstart" aria-label="Permalink to &quot;Quickstart&quot;"></a></h2><p>There are two options to get started with creating your own plugin:</p><ol><li>use the <a href="https://github.com/asdf-vm/asdf-plugin-template" target="_blank" rel="noreferrer">asdf-vm/asdf-plugin-template</a> repository to <a href="https://github.com/asdf-vm/asdf-plugin-template/generate" target="_blank" rel="noreferrer">generate</a> a plugin repo (named <code>asdf-&lt;tool_name&gt;</code>) with default scripts implemented. Once generated, clone the repo and run the <code>setup.bash</code> script to interactively update the template.</li><li>start your own repo called <code>asdf-&lt;tool_name&gt;</code> and implement the required scripts as listed in the documentation below.</li></ol><h3 id="golden-rules-for-plugin-scripts" tabindex="-1">Golden Rules for Plugin Scripts <a class="header-anchor" href="#golden-rules-for-plugin-scripts" aria-label="Permalink to &quot;Golden Rules for Plugin Scripts&quot;"></a></h3><ul><li>scripts should <strong>NOT</strong> call other <code>asdf</code> commands</li><li>keep your dependency list of Shell tools/commands small</li><li>avoid non-portable tools or command flags. For example, <code>sort -V</code>. See our asdf core <a href="https://github.com/asdf-vm/asdf/blob/master/test/banned_commands.bats" target="_blank" rel="noreferrer">list of banned commands</a></li></ul><h2 id="scripts-overview" tabindex="-1">Scripts Overview <a class="header-anchor" href="#scripts-overview" aria-label="Permalink to &quot;Scripts Overview&quot;"></a></h2><p>The full list of scripts callable from asdf.</p><table tabindex="0"><thead><tr><th style="text-align:left;">Script</th><th style="text-align:left;">Description</th></tr></thead><tbody><tr><td style="text-align:left;"><a href="#bin-list-all">bin/list-all</a> <span class="VPBadge tip" vertical="middle"><!--[-->required<!--]--></span></td><td style="text-align:left;">List all installable versions</td></tr><tr><td style="text-align:left;"><a href="#bin-download">bin/download</a> <span class="VPBadge tip" vertical="middle"><!--[-->required<!--]--></span></td><td style="text-align:left;">Download source code or binary for the specified version</td></tr><tr><td style="text-align:left;"><a href="#bin-install">bin/install</a> <span class="VPBadge tip" vertical="middle"><!--[-->required<!--]--></span></td><td style="text-align:left;">Installs the specified version</td></tr><tr><td style="text-align:left;"><a href="#bin-latest-stable">bin/latest-stable</a> <span class="VPBadge warning" vertical="middle"><!--[-->recommended<!--]--></span></td><td style="text-align:left;">List the latest stable version of the specified tool</td></tr><tr><td style="text-align:left;"><a href="#bin-help.overview">bin/help.overview</a></td><td style="text-align:left;">Output a general description about the plugin &amp; tool</td></tr><tr><td style="text-align:left;"><a href="#bin-help.deps">bin/help.deps</a></td><td style="text-align:left;">Output a list of dependencies per Operating System</td></tr><tr><td style="text-align:left;"><a href="#bin-help.config">bin/help.config</a></td><td style="text-align:left;">Output plugin or tool configuration information</td></tr><tr><td style="text-align:left;"><a href="#bin-help.links">bin/help.links</a></td><td style="text-align:left;">Output a list of links for the plugin or tool</td></tr><tr><td style="text-align:left;"><a href="#bin-list-bin-paths">bin/list-bin-paths</a></td><td style="text-align:left;">List relative paths to directories with binaries to create shims</td></tr><tr><td style="text-align:left;"><a href="#bin-exec-env">bin/exec-env</a></td><td style="text-align:left;">Prepare the environment for running the binaries</td></tr><tr><td style="text-align:left;"><a href="#bin-exec-path">bin/exec-path</a></td><td style="text-align:left;">Output the executable path for a version of a tool</td></tr><tr><td style="text-align:left;"><a href="#bin-uninstall">bin/uninstall</a></td><td style="text-align:left;">Uninstall a specific version of a tool</td></tr><tr><td style="text-align:left;"><a href="#bin-list-legacy-filenames">bin/list-legacy-filenames</a></td><td style="text-align:left;">Output filenames of legacy version files: <code>.ruby-version</code></td></tr><tr><td style="text-align:left;"><a href="#bin-parse-legacy-file">bin/parse-legacy-file</a></td><td style="text-align:left;">Custom parser for legacy version files</td></tr><tr><td style="text-align:left;"><a href="#bin-post-plugin-add">bin/post-plugin-add</a></td><td style="text-align:left;">Hook to execute after a plugin has been added</td></tr><tr><td style="text-align:left;"><a href="#bin-post-plugin-update">bin/post-plugin-update</a></td><td style="text-align:left;">Hook to execute after a plugin has been updated</td></tr><tr><td style="text-align:left;"><a href="#bin-pre-plugin-remove">bin/pre-plugin-remove</a></td><td style="text-align:left;">Hook to execute before a plugin is removed</td></tr></tbody></table><p>To see which commands invoke which scripts, see the detailed documentation for each script.</p><h2 id="environment-variables-overview" tabindex="-1">Environment Variables Overview <a class="header-anchor" href="#environment-variables-overview" aria-label="Permalink to &quot;Environment Variables Overview&quot;"></a></h2><p>The full list of Environment Variables used throughout all scripts.</p><table tabindex="0"><thead><tr><th style="text-align:left;">Environment Variables</th><th style="text-align:left;">Description</th></tr></thead><tbody><tr><td style="text-align:left;"><code>ASDF_INSTALL_TYPE</code></td><td style="text-align:left;"><code>version</code> or <code>ref</code></td></tr><tr><td style="text-align:left;"><code>ASDF_INSTALL_VERSION</code></td><td style="text-align:left;">full version number or Git Ref depending on <code>ASDF_INSTALL_TYPE</code></td></tr><tr><td style="text-align:left;"><code>ASDF_INSTALL_PATH</code></td><td style="text-align:left;">the path to where the tool <em>should</em>, or <em>has been</em> installed</td></tr><tr><td style="text-align:left;"><code>ASDF_CONCURRENCY</code></td><td style="text-align:left;">the number of cores to use when compiling the source code. Useful for setting <code>make -j</code></td></tr><tr><td style="text-align:left;"><code>ASDF_DOWNLOAD_PATH</code></td><td style="text-align:left;">the path to where the source code or binary was downloaded to by <code>bin/download</code></td></tr><tr><td style="text-align:left;"><code>ASDF_PLUGIN_PATH</code></td><td style="text-align:left;">the path the plugin was installed</td></tr><tr><td style="text-align:left;"><code>ASDF_PLUGIN_SOURCE_URL</code></td><td style="text-align:left;">the source URL of the plugin</td></tr><tr><td style="text-align:left;"><code>ASDF_PLUGIN_PREV_REF</code></td><td style="text-align:left;">prevous <code>git-ref</code> of the plugin repo</td></tr><tr><td style="text-align:left;"><code>ASDF_PLUGIN_POST_REF</code></td><td style="text-align:left;">updated <code>git-ref</code> of the plugin repo</td></tr><tr><td style="text-align:left;"><code>ASDF_CMD_FILE</code></td><td style="text-align:left;">resolves to the full path of the file being sourced</td></tr></tbody></table><div class="tip custom-block"><p class="custom-block-title">NOTE</p><p><strong>Not all environment variables are available in all scripts.</strong> Check the documentation for each script below to see which env vars are available to it.</p></div><h2 id="required-scripts" tabindex="-1">Required Scripts <a class="header-anchor" href="#required-scripts" aria-label="Permalink to &quot;Required Scripts&quot;"></a></h2><h3 id="bin-list-all" tabindex="-1"><code>bin/list-all</code> <span class="VPBadge tip" vertical="middle"><!--[-->required<!--]--></span> <a class="header-anchor" href="#bin-list-all" aria-label="Permalink to &quot;`bin/list-all` &lt;Badge type=&quot;tip&quot; text=&quot;required&quot; vertical=&quot;middle&quot; /&gt;&quot;"></a></h3><p><strong>Description</strong></p><p>List all installable versions.</p><p><strong>Output Format</strong></p><p>Must print a string with a <strong>space-separated</strong> list of versions. For example:</p><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>1.0.1 1.0.2 1.3.0 1.4</span></span></code></pre></div><p>Newest version should be last.</p><p>asdf core will print each version on its own line, potentially pushing some versions offscreen.</p><p><strong>Sorting</strong></p><p>If versions are being pulled from releases page on a website it&#39;s recommended to leave the versions in the provided order as they are often already in the correct order. If they are in reverse order piping them through <code>tac</code> should suffice.</p><p>If sorting is unavoidable, <code>sort -V</code> is not portable, so we suggest either:</p><ul><li><a href="https://github.com/asdf-vm/asdf-plugin-template/blob/main/template/lib/utils.bash" target="_blank" rel="noreferrer">using the Git sort capability</a> (requires Git &gt;= <code>v2.18.0</code>)</li><li><a href="https://github.com/vic/asdf-idris/blob/master/bin/list-all#L6" target="_blank" rel="noreferrer">writing a custom sort method</a> (requires <code>sed</code>, <code>sort</code> &amp; <code>awk</code>)</li></ul><p><strong>Environment Variables available to script</strong></p><p>No environment variables are provided to this script.</p><p><strong>Commands that invoke this script</strong></p><ul><li><code>asdf list all &lt;name&gt; [version]</code></li><li><code>asdf list all nodejs</code>: lists all versions as returned by this script, one on each line.</li><li><code>asdf list all nodejs 18</code>: lists all versions as returned by this script, one on each line, with a filter matching any version beginning with <code>18</code> applied.</li></ul><p><strong>Call signature from asdf core</strong></p><p>No parameters provided.</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">&quot;${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}/bin/list-all&quot;</span></span></code></pre></div><hr><h3 id="bin-download" tabindex="-1"><code>bin/download</code> <span class="VPBadge tip" vertical="middle"><!--[-->required<!--]--></span> <a class="header-anchor" href="#bin-download" aria-label="Permalink to &quot;`bin/download` &lt;Badge type=&quot;tip&quot; text=&quot;required&quot; vertical=&quot;middle&quot; /&gt;&quot;"></a></h3><p><strong>Description</strong></p><p>Download the source code or binary for a specific version of a tool to a specified location.</p><p><strong>Implementation Details</strong></p><ul><li>The script must download the source or binary to the directory specified by <code>ASDF_DOWNLOAD_PATH</code>.</li><li>Only the decompressed source code or binary should be placed in the <code>ASDF_DOWNLOAD_PATH</code> directory.</li><li>On failure, no files should be placed in <code>ASDF_DOWNLOAD_PATH</code>.</li><li>Success should exit with <code>0</code>.</li><li>Failure should exit with a non-zero status.</li></ul><p><strong>Legacy Plugins</strong></p><p>Though this script is marked as <em>required</em> for all plugins, it is <em>optional</em> for &quot;legacy&quot; plugins which predate its introduction.</p><p>If this script is absent, asdf will assume that the <code>bin/install</code> script is present and will download <strong>and</strong> install the version.</p><p>All plugins must include this script as support for legacy plugins will eventually be removed.</p><p><strong>Environment Variables available to script</strong></p><ul><li><code>ASDF_INSTALL_TYPE</code>: <code>version</code> or <code>ref</code></li><li><code>ASDF_INSTALL_VERSION</code>: <ul><li>Full version number if <code>ASDF_INSTALL_TYPE=version</code>.</li><li>Git ref (tag/commit/branch) if <code>ASDF_INSTALL_TYPE=ref</code>.</li></ul></li><li><code>ASDF_INSTALL_PATH</code>: The path to where the tool <em>has been</em>, or <em>should be</em> installed.</li><li><code>ASDF_DOWNLOAD_PATH</code>: The path to where the source code or binary was downloaded to.</li></ul><p><strong>Commands that invoke this script</strong></p><ul><li><code>asdf install &lt;tool&gt; [version]</code></li><li><code>asdf install &lt;tool&gt; latest[:version]</code></li><li><code>asdf install nodejs 18.0.0</code>: downloads the source code or binary for Node.js version <code>18.0.0</code> and places it in the <code>ASDF_DOWNLOAD_PATH</code> directory. Then runs the <code>bin/install</code> script.</li></ul><p><strong>Call signature from asdf core</strong></p><p>No parameters provided.</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">&quot;${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}&quot;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">/bin/download</span></span></code></pre></div><hr><h3 id="bin-install" tabindex="-1"><code>bin/install</code> <span class="VPBadge tip" vertical="middle"><!--[-->required<!--]--></span> <a class="header-anchor" href="#bin-install" aria-label="Permalink to &quot;`bin/install` &lt;Badge type=&quot;tip&quot; text=&quot;required&quot; vertical=&quot;middle&quot; /&gt;&quot;"></a></h3><p><strong>Description</strong></p><p>Install a specific version of a tool to a specified location.</p><p><strong>Implementation Details</strong></p><ul><li>The script should install the specified version in the path <code>ASDF_INSTALL_PATH</code>.</li><li>Shims will be created by default for any files in <code>$ASDF_INSTALL_PATH/bin</code>. This behaviour can be customised with the optional <a href="#binlist-bin-paths">bin/list-bin-paths</a> script.</li><li>Success should exit with <code>0</code>.</li><li>Failure should exit with a non-zero status.</li><li>To avoid TOCTOU (Time-of-Check-to-Time-of-Use) issues, ensure the script only places files in <code>ASDF_INSTALL_PATH</code> once the build and installation of the tool is deemed a success.</li></ul><p><strong>Legacy Plugins</strong></p><p>If the <code>bin/download</code> script is absent, this script should download <strong>and</strong> install the specified version.</p><p>For compatibility with versions of the asdf core earlier than <code>0.7._</code> and newer than <code>0.8._</code>, check for the presence of the <code>ASDF_DOWNLOAD_PATH</code> environment variable. If set, assume the <code>bin/download</code> script already downloaded the version, else download the source code in the <code>bin/install</code> script.</p><p><strong>Environment Variables available to script</strong></p><ul><li><code>ASDF_INSTALL_TYPE</code>: <code>version</code> or <code>ref</code></li><li><code>ASDF_INSTALL_VERSION</code>: <ul><li>Full version number if <code>ASDF_INSTALL_TYPE=version</code>.</li><li>Git ref (tag/commit/branch) if <code>ASDF_INSTALL_TYPE=ref</code>.</li></ul></li><li><code>ASDF_INSTALL_PATH</code>: The path to where the tool <em>has been</em>, or <em>should be</em> installed.</li><li><code>ASDF_CONCURRENCY</code>: The number of cores to use when compiling source code. Useful for setting flags like <code>make -j</code>.</li><li><code>ASDF_DOWNLOAD_PATH</code>: The path where the source code or binary was downloaded to.</li></ul><p><strong>Commands that invoke this script</strong></p><ul><li><code>asdf install</code></li><li><code>asdf install &lt;tool&gt;</code></li><li><code>asdf install &lt;tool&gt; [version]</code></li><li><code>asdf install &lt;tool&gt; latest[:version]</code></li><li><code>asdf install nodejs 18.0.0</code>: installs Node.js version <code>18.0.0</code> in the <code>ASDF_INSTALL_PATH</code> directory.</li></ul><p><strong>Call signature from asdf core</strong></p><p>No parameters provided.</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">&quot;${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}&quot;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">/bin/install</span></span></code></pre></div><h2 id="optional-scripts" tabindex="-1">Optional Scripts <a class="header-anchor" href="#optional-scripts" aria-label="Permalink to &quot;Optional Scripts&quot;"></a></h2><h3 id="bin-latest-stable" tabindex="-1"><code>bin/latest-stable</code> <span class="VPBadge warning" vertical="middle"><!--[-->recommended<!--]--></span> <a class="header-anchor" href="#bin-latest-stable" aria-label="Permalink to &quot;`bin/latest-stable` &lt;Badge type=&quot;warning&quot; text=&quot;recommended&quot; vertical=&quot;middle&quot; /&gt;&quot;"></a></h3><p><strong>Description</strong></p><p>Determine the latest stable version of a tool. If absent, the asdf core will <code>tail</code> the <code>bin/list-all</code> output which may be undesirable.</p><p><strong>Implementation Details</strong></p><ul><li>The script should print the latest stable version of the tool to stdout.</li><li>Non-stable or release candidate versions should be omitted.</li><li>A filter query is provided as the first argument to the script. This should be used to filter the output by version number or tool provider. <ul><li>For instance, the output of <code>asdf list all ruby</code> from the <a href="https://github.com/asdf-vm/asdf-ruby" target="_blank" rel="noreferrer">ruby plugin</a> lists versions of Ruby from many providers: <code>jruby</code>, <code>rbx</code> &amp; <code>truffleruby</code> amongst others. The user provided filter could be used by the plugin to filter the semver versions and/or provider.<div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>&gt; asdf latest ruby</span></span>
<span class="line"><span>3.2.2</span></span>
<span class="line"><span>&gt; asdf latest ruby 2</span></span>
<span class="line"><span>2.7.8</span></span>
<span class="line"><span>&gt; asdf latest ruby truffleruby</span></span>
<span class="line"><span>truffleruby+graalvm-22.3.1</span></span></code></pre></div></li></ul></li><li>Success should exit with <code>0</code>.</li><li>Failure should exit with a non-zero status.</li></ul><p><strong>Environment Variables available to script</strong></p><ul><li><code>ASDF_INSTALL_TYPE</code>: <code>version</code> or <code>ref</code></li><li><code>ASDF_INSTALL_VERSION</code>: <ul><li>Full version number if <code>ASDF_INSTALL_TYPE=version</code>.</li><li>Git ref (tag/commit/branch) if <code>ASDF_INSTALL_TYPE=ref</code>.</li></ul></li><li><code>ASDF_INSTALL_PATH</code>: The path to where the tool <em>has been</em>, or <em>should be</em> installed.</li></ul><p><strong>Commands that invoke this script</strong></p><ul><li><code>asdf global &lt;tool&gt; latest</code>: set the global version of a tool to the latest stable version for that tool.</li><li><code>asdf local &lt;name&gt; latest</code>: set the local version of a tool to the latest stable version for that tool.</li><li><code>asdf install &lt;tool&gt; latest</code>: installs the latest version of a tool.</li><li><code>asdf latest &lt;tool&gt; [&lt;version&gt;]</code>: outputs the latest version of a tool based on the optional filter.</li><li><code>asdf latest --all</code>: outputs the latest version of all tools managed by asdf and whether they are installed.</li></ul><p><strong>Call signature from asdf core</strong></p><p>The script should accept a single argument, the filter query.</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">&quot;${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}&quot;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">/bin/latest-stable</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$query</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span></span></code></pre></div><hr><h3 id="bin-help-overview" tabindex="-1"><code>bin/help.overview</code> <a class="header-anchor" href="#bin-help-overview" aria-label="Permalink to &quot;`bin/help.overview`&quot;"></a></h3><p><strong>Description</strong></p><p>Output a general description about the plugin and the tool being managed.</p><p><strong>Implementation Details</strong></p><ul><li>This script is required for any help output to be displayed for the plugin.</li><li>No heading should be printed as asdf core will print headings.</li><li>Output may be free-form text but ideally only one short paragraph.</li><li>Must not output any information that is already covered in the core asdf-vm documentation.</li><li>Should be tailored to the Operating System and version of the tool being installed (using optionally set Environment Variables <code>ASDF_INSTALL_VERSION</code> and <code>ASDF_INSTALL_TYPE</code>).</li><li>Success should exit with <code>0</code>.</li><li>Failure should exit with a non-zero status.</li></ul><p><strong>Environment Variables available to script</strong></p><ul><li><code>ASDF_INSTALL_TYPE</code>: <code>version</code> or <code>ref</code></li><li><code>ASDF_INSTALL_VERSION</code>: <ul><li>Full version number if <code>ASDF_INSTALL_TYPE=version</code>.</li><li>Git ref (tag/commit/branch) if <code>ASDF_INSTALL_TYPE=ref</code>.</li></ul></li><li><code>ASDF_INSTALL_PATH</code>: The path to where the tool <em>has been</em>, or <em>should be</em> installed.</li></ul><p><strong>Commands that invoke this script</strong></p><ul><li><code>asdf help &lt;name&gt; [&lt;version&gt;]</code>: Output documentation for plugin and tool</li></ul><p><strong>Call signature from asdf core</strong></p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">&quot;${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}&quot;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">/bin/help.overview</span></span></code></pre></div><hr><h3 id="bin-help-deps" tabindex="-1"><code>bin/help.deps</code> <a class="header-anchor" href="#bin-help-deps" aria-label="Permalink to &quot;`bin/help.deps`&quot;"></a></h3><p><strong>Description</strong></p><p>Output the list of dependencies tailored to the operating system. One dependency per line.</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">sed</span></span></code></pre></div><p><strong>Implementation Details</strong></p><ul><li>This script requires <code>bin/help.overview</code> for its output to be considered.</li><li>Should be tailored to the Operating System and version of the tool being installed (using optionally set Environment Variables <code>ASDF_INSTALL_VERSION</code> and <code>ASDF_INSTALL_TYPE</code>).</li><li>Success should exit with <code>0</code>.</li><li>Failure should exit with a non-zero status.</li></ul><p><strong>Environment Variables available to script</strong></p><ul><li><code>ASDF_INSTALL_TYPE</code>: <code>version</code> or <code>ref</code></li><li><code>ASDF_INSTALL_VERSION</code>: <ul><li>Full version number if <code>ASDF_INSTALL_TYPE=version</code>.</li><li>Git ref (tag/commit/branch) if <code>ASDF_INSTALL_TYPE=ref</code>.</li></ul></li><li><code>ASDF_INSTALL_PATH</code>: The path to where the tool <em>has been</em>, or <em>should be</em> installed.</li></ul><p><strong>Commands that invoke this script</strong></p><ul><li><code>asdf help &lt;name&gt; [&lt;version&gt;]</code>: Output documentation for plugin and tool</li></ul><p><strong>Call signature from asdf core</strong></p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">&quot;${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}&quot;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">/bin/help.deps</span></span></code></pre></div><hr><h3 id="bin-help-config" tabindex="-1"><code>bin/help.config</code> <a class="header-anchor" href="#bin-help-config" aria-label="Permalink to &quot;`bin/help.config`&quot;"></a></h3><p><strong>Description</strong></p><p>Output any required or optional configuration for the plugin and tool. For example, describe any environment variables or other flags needed to install or compile the tool.</p><p><strong>Implementation Details</strong></p><ul><li>This script requires <code>bin/help.overview</code> for its output to be considered.</li><li>Output can be free-form text.</li><li>Should be tailored to the Operating System and version of the tool being installed (using optionally set Environment Variables <code>ASDF_INSTALL_VERSION</code> and <code>ASDF_INSTALL_TYPE</code>).</li><li>Success should exit with <code>0</code>.</li><li>Failure should exit with a non-zero status.</li></ul><p><strong>Environment Variables available to script</strong></p><ul><li><code>ASDF_INSTALL_TYPE</code>: <code>version</code> or <code>ref</code></li><li><code>ASDF_INSTALL_VERSION</code>: <ul><li>Full version number if <code>ASDF_INSTALL_TYPE=version</code>.</li><li>Git ref (tag/commit/branch) if <code>ASDF_INSTALL_TYPE=ref</code>.</li></ul></li><li><code>ASDF_INSTALL_PATH</code>: The path to where the tool <em>has been</em>, or <em>should be</em> installed.</li></ul><p><strong>Commands that invoke this script</strong></p><ul><li><code>asdf help &lt;name&gt; [&lt;version&gt;]</code>: Output documentation for plugin and tool</li></ul><p><strong>Call signature from asdf core</strong></p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">&quot;${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}&quot;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">/bin/help.config</span></span></code></pre></div><hr><h3 id="bin-help-links" tabindex="-1"><code>bin/help.links</code> <a class="header-anchor" href="#bin-help-links" aria-label="Permalink to &quot;`bin/help.links`&quot;"></a></h3><p><strong>Description</strong></p><p>Output a list of links relevant to the plugin and tool. One link per line.</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> Repository:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://github.com/vlang/v</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Documentation:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://vlang.io</span></span></code></pre></div><p><strong>Implementation Details</strong></p><ul><li>This script requires <code>bin/help.overview</code> for its output to be considered.</li><li>One link per line.</li><li>Format must be either: <ul><li><code>&lt;title&gt;: &lt;link&gt;</code></li><li>or just <code>&lt;link&gt;</code></li></ul></li><li>Should be tailored to the Operating System and version of the tool being installed (using optionally set Environment Variables <code>ASDF_INSTALL_VERSION</code> and <code>ASDF_INSTALL_TYPE</code>).</li><li>Success should exit with <code>0</code>.</li><li>Failure should exit with a non-zero status.</li></ul><p><strong>Environment Variables available to script</strong></p><ul><li><code>ASDF_INSTALL_TYPE</code>: <code>version</code> or <code>ref</code></li><li><code>ASDF_INSTALL_VERSION</code>: <ul><li>Full version number if <code>ASDF_INSTALL_TYPE=version</code>.</li><li>Git ref (tag/commit/branch) if <code>ASDF_INSTALL_TYPE=ref</code>.</li></ul></li><li><code>ASDF_INSTALL_PATH</code>: The path to where the tool <em>has been</em>, or <em>should be</em> installed.</li></ul><p><strong>Commands that invoke this script</strong></p><ul><li><code>asdf help &lt;name&gt; [&lt;version&gt;]</code>: Output documentation for plugin and tool</li></ul><p><strong>Call signature from asdf core</strong></p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">&quot;${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}&quot;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">/bin/help.links</span></span></code></pre></div><hr><h3 id="bin-list-bin-paths" tabindex="-1"><code>bin/list-bin-paths</code> <a class="header-anchor" href="#bin-list-bin-paths" aria-label="Permalink to &quot;`bin/list-bin-paths`&quot;"></a></h3><p><strong>Description</strong></p><p>List directories containing executables for the specified version of the tool.</p><p><strong>Implementation Details</strong></p><ul><li>If this script is not present, asdf will look for binaries in the <code>&quot;${ASDF_INSTALL_PATH}&quot;/bin</code> directory &amp; create shims for those.</li><li>Output a space-separated list of paths containing executables.</li><li>Paths must be relative to <code>ASDF_INSTALL_PATH</code>. Example output would be:</li></ul><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">bin</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> tools</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> veggies</span></span></code></pre></div><p>This will instruct asdf to create shims for the files in:</p><ul><li><code>&quot;${ASDF_INSTALL_PATH}&quot;/bin</code></li><li><code>&quot;${ASDF_INSTALL_PATH}&quot;/tools</code></li><li><code>&quot;${ASDF_INSTALL_PATH}&quot;/veggies</code></li></ul><p><strong>Environment Variables available to script</strong></p><ul><li><code>ASDF_INSTALL_TYPE</code>: <code>version</code> or <code>ref</code></li><li><code>ASDF_INSTALL_VERSION</code>: <ul><li>Full version number if <code>ASDF_INSTALL_TYPE=version</code>.</li><li>Git ref (tag/commit/branch) if <code>ASDF_INSTALL_TYPE=ref</code>.</li></ul></li><li><code>ASDF_INSTALL_PATH</code>: The path to where the tool <em>has been</em>, or <em>should be</em> installed.</li></ul><p><strong>Commands that invoke this script</strong></p><ul><li><code>asdf install &lt;tool&gt; [version]</code>: initially create shims for binaries.</li><li><code>asdf reshim &lt;tool&gt; &lt;version&gt;</code>: recreate shims for binaries.</li></ul><p><strong>Call signature from asdf core</strong></p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">&quot;${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}/bin/list-bin-paths&quot;</span></span></code></pre></div><hr><h3 id="bin-exec-env" tabindex="-1"><code>bin/exec-env</code> <a class="header-anchor" href="#bin-exec-env" aria-label="Permalink to &quot;`bin/exec-env`&quot;"></a></h3><p><strong>Description</strong></p><p>Prepare the environment before executing the shims for the binaries for the tool.</p><p><strong>Environment Variables available to script</strong></p><ul><li><code>ASDF_INSTALL_TYPE</code>: <code>version</code> or <code>ref</code></li><li><code>ASDF_INSTALL_VERSION</code>: <ul><li>Full version number if <code>ASDF_INSTALL_TYPE=version</code>.</li><li>Git ref (tag/commit/branch) if <code>ASDF_INSTALL_TYPE=ref</code>.</li></ul></li><li><code>ASDF_INSTALL_PATH</code>: The path to where the tool <em>has been</em>, or <em>should be</em> installed.</li></ul><p><strong>Commands that invoke this script</strong></p><ul><li><code>asdf which &lt;command&gt;</code>: Display the path to an executable</li><li><code>asdf exec &lt;command&gt; [args...]</code>: Executes the command shim for current version</li><li><code>asdf env &lt;command&gt; [util]</code>: Runs util (default: <code>env</code>) inside the environment used for command shim execution.</li></ul><p><strong>Call signature from asdf core</strong></p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">&quot;${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}/bin/exec-env&quot;</span></span></code></pre></div><hr><h3 id="bin-exec-path" tabindex="-1"><code>bin/exec-path</code> <a class="header-anchor" href="#bin-exec-path" aria-label="Permalink to &quot;`bin/exec-path`&quot;"></a></h3><p>Get the executable path for the specified version of the tool. Must print a string with the relative executable path. This allows the plugin to conditionally override the shim&#39;s specified executable path, otherwise return the default path specified by the shim.</p><p><strong>Description</strong></p><p>Get the executable path for the specified version of the tool.</p><p><strong>Implementation Details</strong></p><ul><li>Must print a string with the relative executable path.</li><li>Conditionally override the shim&#39;s specified executable path, otherwise return the default path specified by the shim.</li></ul><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Usage:</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> plugin/bin/exec-path</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">install-pat</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">h</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">comman</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">d</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">executable-pat</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">h</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Example</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> Call:</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> ~/.asdf/plugins/foo/bin/exec-path</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;~/.asdf/installs/foo/1.0&quot;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;foo&quot;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;bin/foo&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Output:</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> bin/foox</span></span></code></pre></div><p><strong>Environment Variables available to script</strong></p><ul><li><code>ASDF_INSTALL_TYPE</code>: <code>version</code> or <code>ref</code></li><li><code>ASDF_INSTALL_VERSION</code>: <ul><li>Full version number if <code>ASDF_INSTALL_TYPE=version</code>.</li><li>Git ref (tag/commit/branch) if <code>ASDF_INSTALL_TYPE=ref</code>.</li></ul></li><li><code>ASDF_INSTALL_PATH</code>: The path to where the tool <em>has been</em>, or <em>should be</em> installed.</li></ul><p><strong>Commands that invoke this script</strong></p><ul><li><code>asdf which &lt;command&gt;</code>: Display the path to an executable</li><li><code>asdf exec &lt;command&gt; [args...]</code>: Executes the command shim for current version</li><li><code>asdf env &lt;command&gt; [util]</code>: Runs util (default: <code>env</code>) inside the environment used for command shim execution.</li></ul><p><strong>Call signature from asdf core</strong></p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">&quot;${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}/bin/exec-path&quot;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$install_path</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$cmd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$relative_path</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span></span></code></pre></div><hr><h3 id="bin-uninstall" tabindex="-1"><code>bin/uninstall</code> <a class="header-anchor" href="#bin-uninstall" aria-label="Permalink to &quot;`bin/uninstall`&quot;"></a></h3><p><strong>Description</strong></p><p>Uninstall the provided version of a tool.</p><p><strong>Output Format</strong></p><p>Output should be sent to <code>stdout</code> or <code>stderr</code> as appropriate for the user. No output is read by subsequent execution in the core.</p><p><strong>Environment Variables available to script</strong></p><p>No environment variables are provided to this script.</p><p><strong>Commands that invoke this script</strong></p><ul><li><code>asdf list all &lt;name&gt; &lt;version&gt;</code></li><li><code>asdf uninstall nodejs 18.15.0</code>: Uninstalls the version <code>18.15.0</code> of nodejs, removing all shims including those installed global with <code>npm i -g</code></li></ul><p><strong>Call signature from asdf core</strong></p><p>No parameters provided.</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">&quot;${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}/bin/uninstall&quot;</span></span></code></pre></div><hr><h3 id="bin-list-legacy-filenames" tabindex="-1"><code>bin/list-legacy-filenames</code> <a class="header-anchor" href="#bin-list-legacy-filenames" aria-label="Permalink to &quot;`bin/list-legacy-filenames`&quot;"></a></h3><p><strong>Description</strong></p><p>List legacy configuration filenames for determining the specified version of the tool.</p><p><strong>Implementation Details</strong></p><ul><li>Output a space-separated list of filenames.<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">.ruby-version</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .rvmrc</span></span></code></pre></div></li><li>Only applies for users who have enabled the <code>legacy_version_file</code> option in their <code>&quot;${HOME}&quot;/.asdfrc</code>.</li></ul><p><strong>Environment Variables available to script</strong></p><ul><li><code>ASDF_INSTALL_TYPE</code>: <code>version</code> or <code>ref</code></li><li><code>ASDF_INSTALL_VERSION</code>: <ul><li>Full version number if <code>ASDF_INSTALL_TYPE=version</code>.</li><li>Git ref (tag/commit/branch) if <code>ASDF_INSTALL_TYPE=ref</code>.</li></ul></li><li><code>ASDF_INSTALL_PATH</code>: The path to where the tool <em>has been</em>, or <em>should be</em> installed.</li></ul><p><strong>Commands that invoke this script</strong></p><p>Any command which reads a tool version.</p><p><strong>Call signature from asdf core</strong></p><p>No parameters provided.</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">&quot;${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}/bin/list-legacy-filenames&quot;</span></span></code></pre></div><hr><h3 id="bin-parse-legacy-file" tabindex="-1"><code>bin/parse-legacy-file</code> <a class="header-anchor" href="#bin-parse-legacy-file" aria-label="Permalink to &quot;`bin/parse-legacy-file`&quot;"></a></h3><p><strong>Description</strong></p><p>Parse the legacy file found by asdf to determine the version of the tool. Useful to extract version numbers from files like JavaScript&#39;s <code>package.json</code> or Golangs <code>go.mod</code>.</p><p><strong>Implementation Details</strong></p><ul><li>If not present, asdf will simply <code>cat</code> the legacy file to determine the version.</li><li>Should be <strong>deterministic</strong> and always return the same exact version: <ul><li>when parsing the same legacy file.</li><li>regardless of what is installed on the machine or whether the legacy version is valid or complete. Some legacy file formats may not be suitable.</li></ul></li><li>Output a single line with the version:<div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">1.2.3</span></span></code></pre></div></li></ul><p><strong>Environment Variables available to script</strong></p><p>No environment variables specifically set before this script is called.</p><p><strong>Commands that invoke this script</strong></p><p>Any command which reads a tool version.</p><p><strong>Call signature from asdf core</strong></p><p>The script should accept a single argument, the path to the legacy file for reading its contents.</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">&quot;${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}/bin/parse-legacy-file&quot;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$file_path</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span></span></code></pre></div><hr><h3 id="bin-post-plugin-add" tabindex="-1"><code>bin/post-plugin-add</code> <a class="header-anchor" href="#bin-post-plugin-add" aria-label="Permalink to &quot;`bin/post-plugin-add`&quot;"></a></h3><p><strong>Description</strong></p><p>Execute this callback script <strong>after</strong> the plugin has been <em>added</em> to asdf with <code>asdf plugin add &lt;tool&gt;</code>.</p><p>See also the related command hooks:</p><ul><li><code>pre_asdf_plugin_add</code></li><li><code>pre_asdf_plugin_add_${plugin_name}</code></li><li><code>post_asdf_plugin_add</code></li><li><code>post_asdf_plugin_add_${plugin_name}</code></li></ul><p><strong>Environment Variables available to script</strong></p><ul><li><code>ASDF_PLUGIN_PATH</code>: path where the plugin was installed.</li><li><code>ASDF_PLUGIN_SOURCE_URL</code>: URL of the plugin source. Can be a local directory path.</li></ul><p><strong>Call signature from asdf core</strong></p><p>No parameters provided.</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">&quot;${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}/bin/post-plugin-add&quot;</span></span></code></pre></div><hr><h3 id="bin-post-plugin-update" tabindex="-1"><code>bin/post-plugin-update</code> <a class="header-anchor" href="#bin-post-plugin-update" aria-label="Permalink to &quot;`bin/post-plugin-update`&quot;"></a></h3><p><strong>Description</strong></p><p>Execute this callback script <strong>after</strong> asdf has downloaded the <em>update</em> plugin with <code>asdf plugin update &lt;tool&gt; [&lt;git-ref&gt;]</code>.</p><p>See also the related command hooks:</p><ul><li><code>pre_asdf_plugin_update</code></li><li><code>pre_asdf_plugin_update_${plugin_name}</code></li><li><code>post_asdf_plugin_update</code></li><li><code>post_asdf_plugin_update_${plugin_name}</code></li></ul><p><strong>Environment Variables available to script</strong></p><ul><li><code>ASDF_PLUGIN_PATH</code>: path where the plugin was installed.</li><li><code>ASDF_PLUGIN_PREV_REF</code>: the plugin&#39;s previous git-ref</li><li><code>ASDF_PLUGIN_POST_REF</code>: the plugin&#39;s updated git-ref</li></ul><p><strong>Call signature from asdf core</strong></p><p>No parameters provided.</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">&quot;${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}/bin/post-plugin-update&quot;</span></span></code></pre></div><hr><h3 id="bin-pre-plugin-remove" tabindex="-1"><code>bin/pre-plugin-remove</code> <a class="header-anchor" href="#bin-pre-plugin-remove" aria-label="Permalink to &quot;`bin/pre-plugin-remove`&quot;"></a></h3><p><strong>Description</strong></p><p>Execute this callback script <strong>before</strong> asdf has removed the plugin with <code>asdf plugin remove &lt;tool&gt;</code>.</p><p>See also the related command hooks:</p><ul><li><code>pre_asdf_plugin_remove</code></li><li><code>pre_asdf_plugin_remove_${plugin_name}</code></li><li><code>post_asdf_plugin_remove</code></li><li><code>post_asdf_plugin_remove_${plugin_name}</code></li></ul><p><strong>Environment Variables available to script</strong></p><ul><li><code>ASDF_PLUGIN_PATH</code>: path where the plugin was installed.</li></ul><p><strong>Call signature from asdf core</strong></p><p>No parameters provided.</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">&quot;${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}/bin/pre-plugin-remove&quot;</span></span></code></pre></div><h2 id="extension-commands-for-asdf-cli" tabindex="-1">Extension Commands for asdf CLI <span class="VPBadge danger" vertical="middle"><!--[-->advanced<!--]--></span> <a class="header-anchor" href="#extension-commands-for-asdf-cli" aria-label="Permalink to &quot;Extension Commands for asdf CLI &lt;Badge type=&quot;danger&quot; text=&quot;advanced&quot; vertical=&quot;middle&quot; /&gt;&quot;"></a></h2><p>It&#39;s possible for plugins to define new asdf commands by providing <code>lib/commands/command*.bash</code> scripts or executables that will be callable using the asdf command line interface by using the plugin name as a subcommand.</p><p>For example, suppose a <code>foo</code> plugin has:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">foo/</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> lib/commands/</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> command</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">.bash</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> command-bat.bash</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> command-bat-man.bash</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> command-help.bash</span></span></code></pre></div><p>Users can now execute:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> asdf</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> foo</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash`</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> asdf</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> foo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> bar</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash bar`</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> asdf</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> foo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> help</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-help.bash`</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> asdf</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> foo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> bat</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> man</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat-man.bash`</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> asdf</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> foo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> bat</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> baz</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat.bash baz`</span></span></code></pre></div><p>Plugin authors can use this feature to provide utilities related to their tools, or even create plugins that are just new command extensions of asdf itself.</p><p>If the executable bit is set, the script is executed, replacing the asdf execution.</p><p>If the executable bit is not set, asdf will source the scripts as Bash scripts.</p><p><code>$ASDF_CMD_FILE</code> resolves to the full path of the file being sourced.</p><p><a href="https://github.com/asdf-community/asdf-haxe" target="_blank" rel="noreferrer"><code>haxe</code></a> is a great example of a plugin which uses this feature. It provides the <code>asdf haxe neko-dylibs-link</code> to fix an issue where Haxe executables expect to find dynamic libraries relative to the executable directory.</p><p>Be sure to list your asdf Extension Commands in your plugins README.</p><h2 id="custom-shim-templates" tabindex="-1">Custom Shim Templates <span class="VPBadge danger" vertical="middle"><!--[-->advanced<!--]--></span> <a class="header-anchor" href="#custom-shim-templates" aria-label="Permalink to &quot;Custom Shim Templates &lt;Badge type=&quot;danger&quot; text=&quot;advanced&quot; vertical=&quot;middle&quot; /&gt;&quot;"></a></h2><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>Please only use if <strong>absolutely</strong> required</p></div><p>asdf allows custom shim templates. For an executable called <code>foo</code>, if there&#39;s a <code>shims/foo</code> file in the plugin, then asdf will copy that file instead of using its standard shim template.</p><p><strong>This must be used wisely.</strong></p><p>As far as the asdf core team is aware, this feature is only in use in the first-party <a href="https://github.com/asdf-vm/asdf-elixir" target="_blank" rel="noreferrer">Elixir plugin</a>. This is because an executable is also read as an Elixir file in addition to being an executable. This makes it not possible to use the standard Bash shim.</p><h2 id="testing" tabindex="-1">Testing <a class="header-anchor" href="#testing" aria-label="Permalink to &quot;Testing&quot;"></a></h2><p><code>asdf</code> contains the <code>plugin-test</code> command to test your plugin:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">asdf</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> plugin</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">plugin_nam</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">e</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">plugin_ur</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">l</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [--asdf-tool-version </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">versio</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">n</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">]</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [--asdf-plugin-gitref </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">git_re</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">f</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">]</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [test_command...]</span></span></code></pre></div><ul><li><code>&lt;plugin_name&gt;</code> &amp; <code>&lt;plugin_url&gt;</code> are required</li><li>If optional <code>[--asdf-tool-version &lt;version&gt;]</code> is specified, the tool will be installed with that specific version. Defaults to <code>asdf latest &lt;plugin-name&gt;</code></li><li>If optional <code>[--asdf-plugin-gitref &lt;git_ref&gt;]</code> is specified, the plugin itself is checked out at that commit/branch/tag. This is useful for testing a pull-request on your plugin&#39;s CI. Defaults to the default branch of the plugin&#39;s repository.</li><li>Optional parameter <code>[test_command...]</code> is the command to execute to validate the installed tool works correctly. Typically <code>&lt;tool&gt; --version</code> or <code>&lt;tool&gt; --help</code>. For example, to test the NodeJS plugin, we could run<div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># asdf plugin test &lt;plugin_name&gt; &lt;plugin_url&gt; [test_command]</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> asdf</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> plugin</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> nodejs</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://github.com/asdf-vm/asdf-nodejs.git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> node</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --version</span></span></code></pre></div></li></ul><div class="tip custom-block"><p class="custom-block-title">Note</p><p>We recommend testing in both Linux &amp; macOS CI environments</p></div><h3 id="github-action" tabindex="-1">GitHub Action <a class="header-anchor" href="#github-action" aria-label="Permalink to &quot;GitHub Action&quot;"></a></h3><p>The <a href="https://github.com/asdf-vm/actions" target="_blank" rel="noreferrer">asdf-vm/actions</a> repo provides a GitHub Action for testing your plugins hosted on GitHub. A sample <code>.github/workflows/test.yaml</code> Actions Workflow:</p><div class="language-yaml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">Test</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">on</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> push</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> branches</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">main</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> pull_request</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">jobs</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> plugin_test</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">asdf plugin test</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> strategy</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> matrix</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> os</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">ubuntu-latest</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">macos-latest</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> runs-on</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">${{ matrix.os }}</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> steps</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">asdf_plugin_test</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> uses</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">asdf-vm/actions/plugin-test@v2</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> with</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> command</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;&lt;MY_TOOL&gt; --version&quot;</span></span></code></pre></div><h3 id="travisci-config" tabindex="-1">TravisCI Config <a class="header-anchor" href="#travisci-config" aria-label="Permalink to &quot;TravisCI Config&quot;"></a></h3><p>A sample <code>.travis.yml</code> file, customize it to your needs</p><div class="language-yaml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">language</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">c</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">script</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">asdf plugin test &lt;MY_TOOL&gt; $TRAVIS_BUILD_DIR &#39;&lt;MY_TOOL&gt; --version&#39;</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">before_script</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">git clone https://github.com/asdf-vm/asdf.git asdf</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">. asdf/asdf.sh</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">os</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">linux</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">osx</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">NOTE</p><p>When using another CI you may need to pass a relative path to the plugin location:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">asdf</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> plugin</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">tool_nam</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">e</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">pat</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">h</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;&lt;tool_command&gt; --version&#39;</span></span></code></pre></div></div><h2 id="api-rate-limiting" tabindex="-1">API Rate Limiting <a class="header-anchor" href="#api-rate-limiting" aria-label="Permalink to &quot;API Rate Limiting&quot;"></a></h2><p>If a command depends on accessing an external API, like <code>bin/list-all</code> or <code>bin/latest-stable</code>, it may experience rate limiting during automated testing. To mitigate this, ensure there is a code-path which provides an authentication token via an environment variable. For example:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">cmd</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;curl --silent&quot;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [ </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$GITHUB_API_TOKEN</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ]; </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">then</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> cmd</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$cmd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> -H &#39;Authorization: token </span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$GITHUB_API_TOKEN</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;&quot;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">fi</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">cmd</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$cmd</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> $releases_path</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span></span></code></pre></div><h3 id="github-api-token" tabindex="-1"><code>GITHUB_API_TOKEN</code> <a class="header-anchor" href="#github-api-token" aria-label="Permalink to &quot;`GITHUB_API_TOKEN`&quot;"></a></h3><p>To utilise the <code>GITHUB_API_TOKEN</code>, create a <a href="https://github.com/settings/tokens/new" target="_blank" rel="noreferrer">new personal token</a> with only <code>public_repo</code> access.</p><p>Then add this to your CI pipeline environment variables.</p><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>NEVER publish your authentication tokens in your code repository</p></div><h2 id="plugin-shortname-index" tabindex="-1">Plugin Shortname Index <a class="header-anchor" href="#plugin-shortname-index" aria-label="Permalink to &quot;Plugin Shortname Index&quot;"></a></h2><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>The recommended installation method for a plugin is via direct URL installation:</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># asdf plugin add &lt;name&gt; &lt;git_url&gt;</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> asdf</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> plugin</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> add</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> nodejs</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://github.com/asdf-vm/asdf-nodejs</span></span></code></pre></div></div><p>If the <code>git_url</code> is not provided, asdf will use the <a href="https://github.com/asdf-vm/asdf-plugins" target="_blank" rel="noreferrer">Shortname Index repository</a> to determine the exact <code>git_url</code> to use.</p><p>You can add your plugin to the <a href="https://github.com/asdf-vm/asdf-plugins" target="_blank" rel="noreferrer">Shortname Index</a> by following the instructions in that repo.</p></div></div></main><footer class="VPDocFooter" data-v-e6f2a212 data-v-1bcd8184><!--[--><!--]--><div class="edit-info" data-v-1bcd8184><!----><div class="last-updated" data-v-1bcd8184><p class="VPLastUpdated" data-v-1bcd8184 data-v-1bb0c8a8>Last updated: <time datetime="2024-01-09T12:47:27.000Z" data-v-1bb0c8a8></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-1bcd8184><span class="visually-hidden" id="doc-footer-aria-label" data-v-1bcd8184>Pager</span><div class="pager" data-v-1bcd8184><a class="VPLink link vp-external-link-icon pager-link prev" href="https://github.com/asdf-vm/asdf-plugins" target="_blank" rel="noreferrer" data-v-1bcd8184><!--[--><span class="desc" data-v-1bcd8184>Previous page</span><span class="title" data-v-1bcd8184>Plugin Shortname Index</span><!--]--></a></div><div class="pager" data-v-1bcd8184><a class="VPLink link vp-external-link-icon pager-link next" href="https://github.com/asdf-vm/asdf-plugin-template" target="_blank" rel="noreferrer" data-v-1bcd8184><!--[--><span class="desc" data-v-1bcd8184>Next page</span><span class="title" data-v-1bcd8184>GitHub Plugin Template</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"contribute_core.md\":\"Dwn6SPRK\",\"contribute_documentation.md\":\"BrHjmG2Y\",\"contribute_first-party-plugins.md\":\"An0qw423\",\"contribute_github-actions.md\":\"CIAqdwgh\",\"guide_getting-started.md\":\"BDkIivLD\",\"guide_introduction.md\":\"BED2HKpc\",\"guide_upgrading-from-v0-15-to-v0-16.md\":\"BSJSfnUt\",\"index.md\":\"Bl7STBtd\",\"ja-jp_contribute_core.md\":\"CJW3eeff\",\"ja-jp_contribute_documentation.md\":\"DpQ3bmph\",\"ja-jp_contribute_first-party-plugins.md\":\"CLMHeW36\",\"ja-jp_contribute_github-actions.md\":\"CXg4FquL\",\"ja-jp_guide_getting-started.md\":\"BJ2dWMQM\",\"ja-jp_guide_introduction.md\":\"CYXABCzJ\",\"ja-jp_index.md\":\"Te-fFvI2\",\"ja-jp_manage_commands.md\":\"CM3wA-L-\",\"ja-jp_manage_configuration.md\":\"CysILq4S\",\"ja-jp_manage_core.md\":\"DkSs_n4l\",\"ja-jp_manage_plugins.md\":\"Dveizso5\",\"ja-jp_manage_versions.md\":\"B4flZrjK\",\"ja-jp_more_community-projects.md\":\"Cq5uhq32\",\"ja-jp_more_faq.md\":\"AspkCmpH\",\"ja-jp_more_thanks.md\":\"dd0Jv9gE\",\"ja-jp_plugins_create.md\":\"DRELQIdl\",\"ko-kr_contribute_core.md\":\"D-irvj4K\",\"ko-kr_contribute_documentation.md\":\"BgRjCUzf\",\"ko-kr_contribute_first-party-plugins.md\":\"Fbk-rjdV\",\"ko-kr_contribute_github-actions.md\":\"IILdesb4\",\"ko-kr_guide_getting-started.md\":\"2aSfsHSt\",\"ko-kr_guide_introduction.md\":\"AsrAlGvY\",\"ko-kr_index.md\":\"Dmm5J-rX\",\"ko-kr_manage_commands.md\":\"BnsPzg1t\",\"ko-kr_manage_configuration.md\":\"DziiMa6H\",\"ko-kr_manage_core.md\":\"YwhJzC1z\",\"ko-kr_manage_plugins.md\":\"BStZ_uo9\",\"ko-kr_manage_versions.md\":\"CMPcUJSc\",\"ko-kr_more_community-projects.md\":\"BGgZzLbH\",\"ko-kr_more_faq.md\":\"De3gzoXB\",\"ko-kr_more_thanks.md\":\"DLiIYnLr\",\"ko-kr_plugins_create.md\":\"CGqR6Egc\",\"manage_commands.md\":\"-uGyRGzy\",\"manage_configuration.md\":\"Sdrc4tf7\",\"manage_core.md\":\"D6WBxbgc\",\"manage_plugins.md\":\"BLO16oTi\",\"manage_versions.md\":\"C6EGWNcY\",\"more_community-projects.md\":\"yoPbi1N_\",\"more_faq.md\":\"sc8Q06z2\",\"more_thanks.md\":\"Bx4bXB2q\",\"plugins_create.md\":\"DOuyNDOe\",\"pt-br_contribute_core.md\":\"BYmf6nEE\",\"pt-br_contribute_documentation.md\":\"DIVmFQtc\",\"pt-br_contribute_first-party-plugins.md\":\"BJkV62VO\",\"pt-br_contribute_github-actions.md\":\"08xeI_Lh\",\"pt-br_guide_getting-started.md\":\"B2F3eseE\",\"pt-br_guide_introduction.md\":\"DuS2bVcZ\",\"pt-br_index.md\":\"ByjSzZoa\",\"pt-br_manage_commands.md\":\"Dr6_3Llb\",\"pt-br_manage_configuration.md\":\"r47RkzYy\",\"pt-br_manage_core.md\":\"Zj8lFw0P\",\"pt-br_manage_plugins.md\":\"2hxhV7Yu\",\"pt-br_manage_versions.md\":\"CSTMJus-\",\"pt-br_more_community-projects.md\":\"CHEVJOJv\",\"pt-br_more_faq.md\":\"BTGkaPN-\",\"pt-br_more_thanks.md\":\"Bvo3xrmB\",\"pt-br_plugins_create.md\":\"C5Tg4ylk\",\"zh-hans_contribute_core.md\":\"BeVZjd7j\",\"zh-hans_contribute_documentation.md\":\"DNvwQkgi\",\"zh-hans_contribute_first-party-plugins.md\":\"CkiCExlE\",\"zh-hans_contribute_github-actions.md\":\"DoUyLvGI\",\"zh-hans_guide_getting-started.md\":\"DY6HBraC\",\"zh-hans_guide_introduction.md\":\"BDqDXkXl\",\"zh-hans_index.md\":\"BkAOT6OQ\",\"zh-hans_manage_commands.md\":\"DyG9aM0W\",\"zh-hans_manage_configuration.md\":\"BXNUGmSk\",\"zh-hans_manage_core.md\":\"Cn8uDogS\",\"zh-hans_manage_plugins.md\":\"DTOXb_Nj\",\"zh-hans_manage_versions.md\":\"DkeX4EwJ\",\"zh-hans_more_community-projects.md\":\"dTVUkig9\",\"zh-hans_more_faq.md\":\"DmYFtjwD\",\"zh-hans_more_thanks.md\":\"wO7wGCsP\",\"zh-hans_plugins_create.md\":\"Bb5e3jX_\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"asdf\",\"description\":\"Manage multiple runtime versions with a single CLI tool\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"search\":{\"provider\":\"local\"},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/asdf-vm/asdf\"}]},\"locales\":{\"root\":{\"label\":\"English\",\"lang\":\"en-US\",\"themeConfig\":{\"nav\":[{\"text\":\"Guide\",\"link\":\"/guide/getting-started\"},{\"text\":\"Reference\",\"link\":\"/manage/configuration\"},{\"text\":\"0.15.0\",\"items\":[{\"text\":\"Changelog\",\"link\":\"https://github.com/asdf-vm/asdf/blob/master/CHANGELOG.md\"},{\"text\":\"Contribute\",\"link\":\"/contribute/core\"}]}],\"sidebar\":[{\"text\":\"Guide\",\"collapsed\":false,\"items\":[{\"text\":\"What is asdf?\",\"link\":\"/guide/introduction\"},{\"text\":\"Getting Started\",\"link\":\"/guide/getting-started\"}]},{\"text\":\"Usage\",\"collapsed\":false,\"items\":[{\"text\":\"Core\",\"link\":\"/manage/core\"},{\"text\":\"Plugins\",\"link\":\"/manage/plugins\"},{\"text\":\"Versions\",\"link\":\"/manage/versions\"}]},{\"text\":\"Reference\",\"collapsed\":false,\"items\":[{\"text\":\"Configuration\",\"link\":\"/manage/configuration\"},{\"text\":\"All Commands\",\"link\":\"/manage/commands\"},{\"text\":\"Plugin Shortname Index\",\"link\":\"https://github.com/asdf-vm/asdf-plugins\"}]},{\"text\":\"Plugins\",\"collapsed\":true,\"items\":[{\"text\":\"Authors\",\"items\":[{\"text\":\"Create a Plugin\",\"link\":\"/plugins/create\"},{\"text\":\"GitHub Plugin Template\",\"link\":\"https://github.com/asdf-vm/asdf-plugin-template\"}]},{\"text\":\"First Party Plugins\",\"items\":[{\"text\":\"Elixir\",\"link\":\"https://github.com/asdf-vm/asdf-elixir\"},{\"text\":\"Erlang\",\"link\":\"https://github.com/asdf-vm/asdf-erlang\"},{\"text\":\"Node.js\",\"link\":\"https://github.com/asdf-vm/asdf-nodejs\"},{\"text\":\"Ruby\",\"link\":\"https://github.com/asdf-vm/asdf-ruby\"}]},{\"text\":\"Community Plugins\",\"items\":[{\"text\":\"asdf-community\",\"link\":\"https://github.com/asdf-community\"},{\"text\":\"GitHub Topics Search\",\"link\":\"https://github.com/topics/asdf-plugin\"}]}]},{\"text\":\"Questions\",\"collapsed\":true,\"items\":[{\"text\":\"FAQ\",\"link\":\"/more/faq\"},{\"text\":\"GitHub Issues\",\"link\":\"https://github.com/asdf-vm/asdf/issues\"},{\"text\":\"Stack Overflow Tag\",\"link\":\"https://stackoverflow.com/questions/tagged/asdf-vm\"}]},{\"text\":\"Contribute\",\"collapsed\":true,\"items\":[{\"text\":\"Core asdf\",\"link\":\"/contribute/core\"},{\"text\":\"Documentation\",\"link\":\"/contribute/documentation\"},{\"text\":\"First-Party Plugins\",\"link\":\"/contribute/first-party-plugins\"},{\"text\":\"GitHub Actions\",\"link\":\"/contribute/github-actions\"}]},{\"text\":\"Community Projects\",\"link\":\"/more/community-projects\"},{\"text\":\"Thanks\",\"link\":\"/more/thanks\"}]}},\"ko-kr\":{\"label\":\"한국어\",\"lang\":\"ko-kr\",\"themeConfig\":{\"nav\":[{\"text\":\"가이드\",\"link\":\"/ko-kr/guide/getting-started\"},{\"text\":\"참고자료\",\"link\":\"/ko-kr/manage/configuration\"},{\"text\":\"0.15.0\",\"items\":[{\"text\":\"변동사항\",\"link\":\"https://github.com/asdf-vm/asdf/blob/master/CHANGELOG.md\"},{\"text\":\"기여하기\",\"link\":\"/ko-kr/contribute/core\"}]}],\"sidebar\":[{\"text\":\"가이드\",\"collapsed\":false,\"items\":[{\"text\":\"asdf이란?\",\"link\":\"/ko-kr/guide/introduction\"},{\"text\":\"시작하기\",\"link\":\"/ko-kr/guide/getting-started\"}]},{\"text\":\"사용방법\",\"collapsed\":false,\"items\":[{\"text\":\"코어\",\"link\":\"/ko-kr/manage/core\"},{\"text\":\"플러그인\",\"link\":\"/ko-kr/manage/plugins\"},{\"text\":\"버전\",\"link\":\"/ko-kr/manage/versions\"}]},{\"text\":\"참고자료\",\"collapsed\":false,\"items\":[{\"text\":\"설정\",\"link\":\"/ko-kr/manage/configuration\"},{\"text\":\"모든 명령어\",\"link\":\"/ko-kr/manage/commands\"},{\"text\":\"플러그인 Shortname 인덱스\",\"link\":\"https://github.com/asdf-vm/asdf-plugins\"}]},{\"text\":\"플러그인\",\"collapsed\":true,\"items\":[{\"text\":\"저자\",\"items\":[{\"text\":\"플러그인 만들기\",\"link\":\"/ko-kr/plugins/create\"},{\"text\":\"GitHub 플러그인 템플릿\",\"link\":\"https://github.com/asdf-vm/asdf-plugin-template\"}]},{\"text\":\"공식 플러그인\",\"items\":[{\"text\":\"Elixir\",\"link\":\"https://github.com/asdf-vm/asdf-elixir\"},{\"text\":\"Erlang\",\"link\":\"https://github.com/asdf-vm/asdf-erlang\"},{\"text\":\"Node.js\",\"link\":\"https://github.com/asdf-vm/asdf-nodejs\"},{\"text\":\"Ruby\",\"link\":\"https://github.com/asdf-vm/asdf-ruby\"}]},{\"text\":\"커뮤니티 플러그인\",\"items\":[{\"text\":\"asdf-community\",\"link\":\"https://github.com/asdf-community\"},{\"text\":\"GitHub 토픽 검색\",\"link\":\"https://github.com/topics/asdf-plugin\"}]}]},{\"text\":\"질문\",\"collapsed\":true,\"items\":[{\"text\":\"자주 묻는 질문\",\"link\":\"/ko-kr/more/faq\"},{\"text\":\"GitHub 이슈\",\"link\":\"https://github.com/asdf-vm/asdf/issues\"},{\"text\":\"Stack Overflow 태그\",\"link\":\"https://stackoverflow.com/questions/tagged/asdf-vm\"}]},{\"text\":\"기여하기\",\"collapsed\":true,\"items\":[{\"text\":\"코어 asdf\",\"link\":\"/ko-kr/contribute/core\"},{\"text\":\"문서\",\"link\":\"/ko-kr/contribute/documentation\"},{\"text\":\"공식 플러그인\",\"link\":\"/ko-kr/contribute/first-party-plugins\"},{\"text\":\"GitHub Actions\",\"link\":\"/ko-kr/contribute/github-actions\"}]},{\"text\":\"커뮤니티 프로젝트\",\"link\":\"/ko-kr/more/community-projects\"},{\"text\":\"감사인사\",\"link\":\"/ko-kr/more/thanks\"}]}},\"ja-jp\":{\"label\":\"日本語\",\"lang\":\"ja-jp\",\"themeConfig\":{\"nav\":[{\"text\":\"ガイド\",\"link\":\"/ja-jp/guide/getting-started\"},{\"text\":\"リファレンス\",\"link\":\"/ja-jp/manage/configuration\"},{\"text\":\"0.15.0\",\"items\":[{\"text\":\"変更履歴\",\"link\":\"https://github.com/asdf-vm/asdf/blob/master/CHANGELOG.md\"},{\"text\":\"コントリビューション\",\"link\":\"/ja-jp/contribute/core\"}]}],\"sidebar\":[{\"text\":\"ガイド\",\"collapsed\":false,\"items\":[{\"text\":\"asdfってなに?\",\"link\":\"/ja-jp/guide/introduction\"},{\"text\":\"はじめよう\",\"link\":\"/ja-jp/guide/getting-started\"}]},{\"text\":\"使い方\",\"collapsed\":false,\"items\":[{\"text\":\"コア\",\"link\":\"/ja-jp/manage/core\"},{\"text\":\"プラグイン\",\"link\":\"/ja-jp/manage/plugins\"},{\"text\":\"バージョン\",\"link\":\"/ja-jp/manage/versions\"}]},{\"text\":\"リファレンス\",\"collapsed\":false,\"items\":[{\"text\":\"構成設定\",\"link\":\"/ja-jp/manage/configuration\"},{\"text\":\"すべてのコマンド\",\"link\":\"/ja-jp/manage/commands\"},{\"text\":\"プラグインショートネームの一覧\",\"link\":\"https://github.com/asdf-vm/asdf-plugins\"}]},{\"text\":\"プラグイン\",\"collapsed\":true,\"items\":[{\"text\":\"開発者向け\",\"items\":[{\"text\":\"プラグインの作成\",\"link\":\"/ja-jp/plugins/create\"},{\"text\":\"GitHubプラグインテンプレート\",\"link\":\"https://github.com/asdf-vm/asdf-plugin-template\"}]},{\"text\":\"公式プラグイン\",\"items\":[{\"text\":\"Elixir\",\"link\":\"https://github.com/asdf-vm/asdf-elixir\"},{\"text\":\"Erlang\",\"link\":\"https://github.com/asdf-vm/asdf-erlang\"},{\"text\":\"Node.js\",\"link\":\"https://github.com/asdf-vm/asdf-nodejs\"},{\"text\":\"Ruby\",\"link\":\"https://github.com/asdf-vm/asdf-ruby\"}]},{\"text\":\"コミュニティプラグイン\",\"items\":[{\"text\":\"asdf-community\",\"link\":\"https://github.com/asdf-community\"},{\"text\":\"GitHubトピック検索\",\"link\":\"https://github.com/topics/asdf-plugin\"}]}]},{\"text\":\"困ったときは\",\"collapsed\":true,\"items\":[{\"text\":\"FAQ\",\"link\":\"/ja-jp/more/faq\"},{\"text\":\"GitHub イシュー\",\"link\":\"https://github.com/asdf-vm/asdf/issues\"},{\"text\":\"Stack Overflow タグ\",\"link\":\"https://stackoverflow.com/questions/tagged/asdf-vm\"}]},{\"text\":\"コントリビューション\",\"collapsed\":true,\"items\":[{\"text\":\"asdf コア\",\"link\":\"/ja-jp/contribute/core\"},{\"text\":\"ドキュメント\",\"link\":\"/ja-jp/contribute/documentation\"},{\"text\":\"公式プラグイン\",\"link\":\"/ja-jp/contribute/first-party-plugins\"},{\"text\":\"GitHub Actions\",\"link\":\"/ja-jp/contribute/github-actions\"}]},{\"text\":\"コミュニティプロジェクト\",\"link\":\"/ja-jp/more/community-projects\"},{\"text\":\"謝辞\",\"link\":\"/ja-jp/more/thanks\"}]}},\"pt-br\":{\"label\":\"Brazilian Portuguese\",\"lang\":\"pr-br\",\"themeConfig\":{\"nav\":[{\"text\":\"Guia\",\"link\":\"/pt-br/guide/getting-started\"},{\"text\":\"Referência\",\"link\":\"/pt-br/manage/configuration\"},{\"text\":\"0.15.0\",\"items\":[{\"text\":\"Changelog\",\"link\":\"https://github.com/asdf-vm/asdf/blob/master/CHANGELOG.md\"},{\"text\":\"Contribute\",\"link\":\"/pt-br/contribute/core\"}]}],\"sidebar\":[{\"text\":\"Guia\",\"collapsed\":false,\"items\":[{\"text\":\"O que é asdf?\",\"link\":\"/pt-br/guide/introduction\"},{\"text\":\"Começar\",\"link\":\"/pt-br/guide/getting-started\"}]},{\"text\":\"Uso\",\"collapsed\":false,\"items\":[{\"text\":\"Essencial\",\"link\":\"/pt-br/manage/core\"},{\"text\":\"Plugins\",\"link\":\"/pt-br/manage/plugins\"},{\"text\":\"Versões\",\"link\":\"/pt-br/manage/versions\"}]},{\"text\":\"Referência\",\"collapsed\":false,\"items\":[{\"text\":\"Configuração\",\"link\":\"/pt-br/manage/configuration\"},{\"text\":\"Todos os comandos\",\"link\":\"/pt-br/manage/commands\"},{\"text\":\"Plugin Shortname Index\",\"link\":\"https://github.com/asdf-vm/asdf-plugins\"}]},{\"text\":\"Plugins\",\"collapsed\":true,\"items\":[{\"text\":\"Autoria\",\"items\":[{\"text\":\"Criar um plug-in\",\"link\":\"/pt-br/plugins/create\"},{\"text\":\"GitHub Plugin Template\",\"link\":\"https://github.com/asdf-vm/asdf-plugin-template\"}]},{\"text\":\"Plug-ins Próprios\",\"items\":[{\"text\":\"Elixir\",\"link\":\"https://github.com/asdf-vm/asdf-elixir\"},{\"text\":\"Erlang\",\"link\":\"https://github.com/asdf-vm/asdf-erlang\"},{\"text\":\"Node.js\",\"link\":\"https://github.com/asdf-vm/asdf-nodejs\"},{\"text\":\"Ruby\",\"link\":\"https://github.com/asdf-vm/asdf-ruby\"}]},{\"text\":\"Plug-ins da Comunidade\",\"items\":[{\"text\":\"asdf-community\",\"link\":\"https://github.com/asdf-community\"},{\"text\":\"GitHub Topics Search\",\"link\":\"https://github.com/topics/asdf-plugin\"}]}]},{\"text\":\"Questões\",\"collapsed\":true,\"items\":[{\"text\":\"Perguntas Frequentes\",\"link\":\"/pt-br/more/faq\"},{\"text\":\"GitHub Issues\",\"link\":\"https://github.com/asdf-vm/asdf/issues\"},{\"text\":\"Stack Overflow Tag\",\"link\":\"https://stackoverflow.com/questions/tagged/asdf-vm\"}]},{\"text\":\"Contribute\",\"collapsed\":true,\"items\":[{\"text\":\"Essencial asdf\",\"link\":\"/pt-br/contribute/core\"},{\"text\":\"Documentação\",\"link\":\"/pt-br/contribute/documentation\"},{\"text\":\"Plug-ins Próprios\",\"link\":\"/pt-br/contribute/first-party-plugins\"},{\"text\":\"GitHub Actions\",\"link\":\"/pt-br/contribute/github-actions\"}]},{\"text\":\"Projetos Comunitários\",\"link\":\"/pt-br/more/community-projects\"},{\"text\":\"Créditos\",\"link\":\"/pt-br/more/thanks\"}]}},\"zh-hans\":{\"label\":\"简体中文\",\"lang\":\"zh-hans\",\"themeConfig\":{\"nav\":[{\"text\":\"指导\",\"link\":\"/zh-hans/guide/getting-started\"},{\"text\":\"参考\",\"link\":\"/zh-hans/manage/configuration\"},{\"text\":\"0.15.0\",\"items\":[{\"text\":\"Changelog\",\"link\":\"https://github.com/asdf-vm/asdf/blob/master/CHANGELOG.md\"},{\"text\":\"如何贡献\",\"link\":\"/zh-hans/contribute/core\"}]}],\"sidebar\":[{\"text\":\"指导\",\"collapsed\":false,\"items\":[{\"text\":\"什么是asdf\",\"link\":\"/zh-hans/guide/introduction\"},{\"text\":\"快速入门\",\"link\":\"/zh-hans/guide/getting-started\"}]},{\"text\":\"用法\",\"collapsed\":false,\"items\":[{\"text\":\"核心\",\"link\":\"/zh-hans/manage/core\"},{\"text\":\"插件\",\"link\":\"/zh-hans/manage/plugins\"},{\"text\":\"版本\",\"link\":\"/zh-hans/manage/versions\"}]},{\"text\":\"参考\",\"collapsed\":false,\"items\":[{\"text\":\"配置\",\"link\":\"/zh-hans/manage/configuration\"},{\"text\":\"所有命令\",\"link\":\"/zh-hans/manage/commands\"},{\"text\":\"插件缩写索引\",\"link\":\"https://github.com/asdf-vm/asdf-plugins\"}]},{\"text\":\"插件\",\"collapsed\":true,\"items\":[{\"text\":\"成为作者\",\"items\":[{\"text\":\"创建插件\",\"link\":\"/zh-hans/plugins/create\"},{\"text\":\"GitHub 插件模板\",\"link\":\"https://github.com/asdf-vm/asdf-plugin-template\"}]},{\"text\":\"官方插件\",\"items\":[{\"text\":\"Elixir\",\"link\":\"https://github.com/asdf-vm/asdf-elixir\"},{\"text\":\"Erlang\",\"link\":\"https://github.com/asdf-vm/asdf-erlang\"},{\"text\":\"Node.js\",\"link\":\"https://github.com/asdf-vm/asdf-nodejs\"},{\"text\":\"Ruby\",\"link\":\"https://github.com/asdf-vm/asdf-ruby\"}]},{\"text\":\"社区插件\",\"items\":[{\"text\":\"asdf-community\",\"link\":\"https://github.com/asdf-community\"},{\"text\":\"GitHub 主题搜索\",\"link\":\"https://github.com/topics/asdf-plugin\"}]}]},{\"text\":\"问题\",\"collapsed\":true,\"items\":[{\"text\":\"经常问的问题\",\"link\":\"/zh-hans/more/faq\"},{\"text\":\"GitHub Issues\",\"link\":\"https://github.com/asdf-vm/asdf/issues\"},{\"text\":\"Stack Overflow Tag\",\"link\":\"https://stackoverflow.com/questions/tagged/asdf-vm\"}]},{\"text\":\"如何贡献\",\"collapsed\":true,\"items\":[{\"text\":\"核心\",\"link\":\"/zh-hans/contribute/core\"},{\"text\":\"文档\",\"link\":\"/zh-hans/contribute/documentation\"},{\"text\":\"官方插件\",\"link\":\"/zh-hans/contribute/first-party-plugins\"},{\"text\":\"GitHub Actions\",\"link\":\"/zh-hans/contribute/github-actions\"}]},{\"text\":\"社区项目\",\"link\":\"/zh-hans/more/community-projects\"},{\"text\":\"致谢\",\"link\":\"/zh-hans/more/thanks\"}]}}},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
</body>
</html>