
Yeast
A plugin host system for building extensible command-line tools. Discover and install plugins to extend your workflow.
Features
Simple Plugin SystemCreate, install, and run plugins with ease
Plugin RegistryBrowse and install plugins from plugins.
Auto-DiscoveryAutomatically discovers plugins in your PATH
Plugin AuthoringCreate new plugins with a single command
PublishingPublish your plugins to the registry
Installation
Quick Install
Run this command in your terminal:
Linux/macOS:curl -fsSL https://yeast.kaustubha.work/install.sh | bashClick to Copy
irm https://yeast.kaustubha.work/install.ps1 | iexClick to Copy
- Detect your OS and architecture
- Download the latest release
- Install `yst` to a directory in your PATH
- Make it executable
Manual Install
- Download the binary for your platform from Releases Page
- Create
~/.yeastdirectory (or%USERPROFILE%\.yeaston Windows) - Rename the binary to
yst(oryst.exeon Windows) and place it in~/.yeast - Add
~/.yeastto your PATH:- Linux/macOS: Add
export PATH="$PATH:$HOME/.yeast"to~/.bashrcor~/.zshrc - Windows: Add
%USERPROFILE%\.yeastto your system/user PATH
- Linux/macOS: Add
- Make it executable (Linux/macOS):
chmod +x ~/.yeast/yst
Usage
Running Plugins
Once installed, you can run plugins directly using their alias:
yst <plugin-alias> [args...]Click to Copy
For example:
yst compress-image input.jpgClick to Copy
Plugin Management
List Installed Plugins
yst plugins listClick to Copy
Install a Plugin
yst plugins install <author:plugin-alias>Click to Copy
Example:
yst plugins install kaustubha-chaturvedi:yst-convert-imgClick to Copy
- These
<author:plugin-alias>is called plugin tag and can be found via Plugins Page.
Publish Your Plugin
From your plugin repository:
yst plugins publishClick to Copy
This will:
- Read metadata from your plugin's
main.go - Validate the plugin (name, alias, domain, etc.)
- Check if the alias is available
- Publish to the registry
Creating a New Plugin
yst plugins create-new <name> -a/--alias <alias> -d/--domain <domain>Click to Copy
Example:
yst plugins create-new "Image Tools" -a/--alias img-tools -d/--domain imageClick to Copy
This creates a new plugin skeleton with:
main.gowith embedded metadatago.modfile.github/workflows/release.yamlfor automated releases- Basic command structure
Plugin Development
Plugin Structure
A YEAST plugin is a Go binary that:
- Has embedded metadata (name, alias, domain, version)
- Responds to
__yst_metadatacommand with JSON metadata - Uses Cobra for command structure
Metadata Requirements
Your plugin's main.go must include:
name: Display name of the pluginalias: Short identifier (used in commands)domain: Category/domain (e.g., "image", "video", "audio")version: Semantic version
Example Plugin
var embeddedMetadata = {"name":"Image Tools","domain":"image","alias":"img-tools","version":"1.0.0"}
func getMetadata() map[string]interface{} {;
var meta map[string]interface{};
json.Unmarshal([]byte(embeddedMetadata), &meta)
return meta
}Building and Releasing
Plugins created with yst plugins create-new include a GitHub Actions workflow that:
- Builds binaries for Linux, macOS, and Windows (amd64, arm64)
- Creates releases automatically
- Uploads binaries to GitHub Releases
You may need to configure this release.yaml as you prject requirements.
Plugin Publish
Plugins once pushed to github and are built can be indexed to Plugins Page and are avilaible to download from there.
Use this command to publish you plugins
yst plugins publishClick to Copy
This may not work for you for plugins with build tags requirements. So for that case use this method.
yst plugins publish -b/--binary <path to build binary>Click to Copy
After this you will have to enter 25 words descripition of you plugin.
This command will publish your plugin with tag <author-username:plugin-alias>