Yeast

Yeast

A plugin host system for building extensible command-line tools. Discover and install plugins to extend your workflow.

Features

  • Simple Plugin System

    Create, install, and run plugins with ease

  • Plugin Registry

    Browse and install plugins from plugins.

  • Auto-Discovery

    Automatically discovers plugins in your PATH

  • Plugin Authoring

    Create new plugins with a single command

  • Publishing

    Publish your plugins to the registry

Installation

Quick Install

Run this command in your terminal:

Linux/macOS:
curl -fsSL https://yeast.kaustubha.work/install.sh | bash
Click to Copy
Windows (Powershell):
irm https://yeast.kaustubha.work/install.ps1 | iex
Click to Copy
The script will:
  • Detect your OS and architecture
  • Download the latest release
  • Install `yst` to a directory in your PATH
  • Make it executable

Manual Install

The script will:
  1. Download the binary for your platform from Releases Page
  2. Create ~/.yeast directory (or %USERPROFILE%\.yeast on Windows)
  3. Rename the binary to yst (or yst.exe on Windows) and place it in ~/.yeast
  4. Add ~/.yeast to your PATH:
    • Linux/macOS: Add export PATH="$PATH:$HOME/.yeast" to ~/.bashrc or ~/.zshrc
    • Windows: Add%USERPROFILE%\.yeast to your system/user PATH
  5. 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.jpg
Click to Copy

Plugin Management

List Installed Plugins

yst plugins list
Click to Copy

Install a Plugin

yst plugins install <author:plugin-alias>
Click to Copy

Example:

yst plugins install kaustubha-chaturvedi:yst-convert-img
Click 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 publish
Click 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 image
Click to Copy

This creates a new plugin skeleton with:

  • main.go with embedded metadata
  • go.mod file
  • .github/workflows/release.yaml for 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_metadata command with JSON metadata
  • Uses Cobra for command structure

Metadata Requirements

Your plugin's main.go must include:

  • name: Display name of the plugin
  • alias: 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 publish
Click 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>