mirror of
https://github.com/asdf-vm/asdf.git
synced 2024-12-23 20:05:09 -07:00
83 lines
115 KiB
HTML
83 lines
115 KiB
HTML
<!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 "Create a Plugin""></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 <name></code>, <code>asdf install <name> <version></code> etc.</p><h2 id="quickstart" tabindex="-1">Quickstart <a class="header-anchor" href="#quickstart" aria-label="Permalink to "Quickstart""></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-<tool_name></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-<tool_name></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 "Golden Rules for Plugin Scripts""></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 "Scripts Overview""></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 & 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 "Environment Variables Overview""></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 "Required Scripts""></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 "`bin/list-all` <Badge type="tip" text="required" vertical="middle" />""></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'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 >= <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> & <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 <name> [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;">"${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}/bin/list-all"</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 "`bin/download` <Badge type="tip" text="required" vertical="middle" />""></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 "legacy" 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 <tool> [version]</code></li><li><code>asdf install <tool> 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;">"${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}"</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 "`bin/install` <Badge type="tip" text="required" vertical="middle" />""></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 <tool></code></li><li><code>asdf install <tool> [version]</code></li><li><code>asdf install <tool> 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;">"${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}"</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 "Optional Scripts""></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 "`bin/latest-stable` <Badge type="warning" text="recommended" vertical="middle" />""></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> & <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>> asdf latest ruby</span></span>
|
||
<span class="line"><span>3.2.2</span></span>
|
||
<span class="line"><span>> asdf latest ruby 2</span></span>
|
||
<span class="line"><span>2.7.8</span></span>
|
||
<span class="line"><span>> 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 <tool> latest</code>: set the global version of a tool to the latest stable version for that tool.</li><li><code>asdf local <name> latest</code>: set the local version of a tool to the latest stable version for that tool.</li><li><code>asdf install <tool> latest</code>: installs the latest version of a tool.</li><li><code>asdf latest <tool> [<version>]</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;">"${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">/bin/latest-stable</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$query</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"</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 "`bin/help.overview`""></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 <name> [<version>]</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;">"${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}"</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 "`bin/help.deps`""></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 <name> [<version>]</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;">"${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}"</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 "`bin/help.config`""></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 <name> [<version>]</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;">"${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}"</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 "`bin/help.links`""></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><title>: <link></code></li><li>or just <code><link></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 <name> [<version>]</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;">"${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}"</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 "`bin/list-bin-paths`""></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>"${ASDF_INSTALL_PATH}"/bin</code> directory & 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>"${ASDF_INSTALL_PATH}"/bin</code></li><li><code>"${ASDF_INSTALL_PATH}"/tools</code></li><li><code>"${ASDF_INSTALL_PATH}"/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 <tool> [version]</code>: initially create shims for binaries.</li><li><code>asdf reshim <tool> <version></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;">"${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}/bin/list-bin-paths"</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 "`bin/exec-env`""></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 <command></code>: Display the path to an executable</li><li><code>asdf exec <command> [args...]</code>: Executes the command shim for current version</li><li><code>asdf env <command> [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;">"${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}/bin/exec-env"</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 "`bin/exec-path`""></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'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'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;"> <</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;">></span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> <</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;">></span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> <</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;">></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;"> "~/.asdf/installs/foo/1.0"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "foo"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "bin/foo"</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 <command></code>: Display the path to an executable</li><li><code>asdf exec <command> [args...]</code>: Executes the command shim for current version</li><li><code>asdf env <command> [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;">"${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}/bin/exec-path"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$install_path</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$cmd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$relative_path</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"</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 "`bin/uninstall`""></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 <name> <version></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;">"${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}/bin/uninstall"</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 "`bin/list-legacy-filenames`""></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>"${HOME}"/.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;">"${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}/bin/list-legacy-filenames"</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 "`bin/parse-legacy-file`""></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'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;">"${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}/bin/parse-legacy-file"</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$file_path</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"</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 "`bin/post-plugin-add`""></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 <tool></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;">"${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}/bin/post-plugin-add"</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 "`bin/post-plugin-update`""></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 <tool> [<git-ref>]</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's previous git-ref</li><li><code>ASDF_PLUGIN_POST_REF</code>: the plugin'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;">"${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}/bin/post-plugin-update"</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 "`bin/pre-plugin-remove`""></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 <tool></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;">"${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">plugin_path</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">}/bin/pre-plugin-remove"</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 "Extension Commands for asdf CLI <Badge type="danger" text="advanced" vertical="middle" />""></a></h2><p>It'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 "Custom Shim Templates <Badge type="danger" text="advanced" vertical="middle" />""></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'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 "Testing""></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;"> <</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;">></span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> <</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;">></span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [--asdf-tool-version </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"><</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;">></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;"><</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;">></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><plugin_name></code> & <code><plugin_url></code> are required</li><li>If optional <code>[--asdf-tool-version <version>]</code> is specified, the tool will be installed with that specific version. Defaults to <code>asdf latest <plugin-name></code></li><li>If optional <code>[--asdf-plugin-gitref <git_ref>]</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's CI. Defaults to the default branch of the plugin's repository.</li><li>Optional parameter <code>[test_command...]</code> is the command to execute to validate the installed tool works correctly. Typically <code><tool> --version</code> or <code><tool> --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 <plugin_name> <plugin_url> [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 & macOS CI environments</p></div><h3 id="github-action" tabindex="-1">GitHub Action <a class="header-anchor" href="#github-action" aria-label="Permalink to "GitHub Action""></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;">"<MY_TOOL> --version"</span></span></code></pre></div><h3 id="travisci-config" tabindex="-1">TravisCI Config <a class="header-anchor" href="#travisci-config" aria-label="Permalink to "TravisCI Config""></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 <MY_TOOL> $TRAVIS_BUILD_DIR '<MY_TOOL> --version'</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;"> <</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;">></span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> <</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;">></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '<tool_command> --version'</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 "API Rate Limiting""></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;">"curl --silent"</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;"> "</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$GITHUB_API_TOKEN</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"</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;">"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$cmd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> -H 'Authorization: token </span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">$GITHUB_API_TOKEN</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">'"</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;">"</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;">"</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 "`GITHUB_API_TOKEN`""></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 "Plugin Shortname Index""></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 <name> <git_url></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> |