+### TL;DR
+
+Just create an empty directory and run the tests until you get a good result.
+
+```bash
+git clone git@github.com:webinstall/packages.git
+pushd packages
+npm install
+```
+
+```bash
+mkdir -p ./new-package/
+node _webi/test.js ./new-package/
+```
+
+### 1. Create Description
+
+Just copy the format from any of the existing packages. It's like this:
+
+`README.md`:
+
+````md
+---
+title: Node.js
+homepage: https://nodejs.org
+tagline: JavaScript V8 runtime
+description: |
+ Node.jsĀ® is a JavaScript runtime built on Chrome's V8 JavaScript engine
+---
+
+```bash
+node -e 'console.log("Hello, World!")'
+> Hello, World!
+```
+````
+
+### 1. Fetch Releases
+
+All you're doing in this step is just translating from one form of JSON or CSV
+or TAB or whatever, to a format understood by `webi`.
+
+- Using Github releases? See `ripgrep/releases.js` (which uses
+ `_common/github.js`)
+- Have a special format? See `golang/releases.js` or `node/releases.js`.
+
+It looks like this:
+
+`releases.js`:
+
+```js
+module.exports = function (request) {
+ return github(request, owner, repo).then(function (all) {
+ // if you need to do something special, you can do it here
+ // ...
+ return all;
+ });
+};
+```
+
+### 2. Bash Installer
+
+1. Variables _you_ can set
+2. Functions _you_ must define
+3. Convenience / Helper Functions
+
+(optional, if needed) Bash variables that you _may_ define:
+
+```bash
+# Define this if the package name is different from the command name (i.e. golang => go)
+pkg_cmd_name="foobar"
+
+# These are used for symlinks, PATH, and test commands
+pkg_dst="$HOME/.local/opt/foobar"
+pkg_dst_cmd="$HOME/.local/opt/foobar/bin/foobar"
+#pkg_dst_bin="$(dirname "$pkg_dst_cmd")"
+
+# These are the _real_ locations for the above
+pkg_src="$HOME/.local/opt/foobar-v$WEBI_VERSION"
+pkg_src_cmd="$HOME/.local/opt/foobar-v$WEBI_VERSION/bin/foobar"
+#pkg_src_bin="$(dirname "$pkg_src_cmd")"
+```
+
+(required) A version check function that strips all non-version junk
+
+```bash
+pkg_get_current_version() {
+ # foobar-v1.1.7 => 1.1.7
+ echo "$(foobar --version | head -n 1 | sed 's:foobar-v::')"
+}
+```
+
+For the rest of the functions you can like copy/paste from the examples:
+
+```bash
+pkg_format_cmd_version() {} # Override, pretty prints version
+
+pkg_link # Override, replaces webi_link()
+
+pkg_pre_install() { # Override, runs any webi_* commands
+ webi_check # for $HOME/.local/opt tools
+ webi_download # for things that have a releases.js
+ webi_extract # for .xz, .tar.*, and .zip files
+}
+
+pkg_install() {} # Override, usually just needs to rename extracted folder to
+ # "$HOME/.local/opt/$pkg_cmd_name-v$WEBI_VERSION"
+
+pkg_post_install() { # Override
+ webi_path_add "$pkg_dst_bin" # should probably update PATH
+}
+
+pkg_done_message() {} # Override, pretty print a success message
+```
+