Abstrax

Metadata protocol

Every plugin must support:

abstrax-<name> plugin metadata

This must print JSON only to stdout (protocol version 1):

{
  "protocol_version": 1,
  "name": "example",
  "display_name": "Example Plugin",
  "description": "Reference plugin and SDK example for Abstrax",
  "version": "0.1.0",
  "requires_abstrax": ">=0.1.0",
  "homepage": "https://plugins.useabstrax.com/plugins/example",
	"commands": [
    {
      "name": "hello",
      "action": "plugin.example.hello",
      "description": "Print a greeting"
    },
    {
      "name": "project",
      "action": "plugin.example.project",
      "description": "Read project information from Abstrax"
    },
    {
      "name": "version",
      "action": "plugin.example.version",
      "description": "Display plugin version information"
    }
  ]
}

Required fields

Field Description
protocol_version Must be 1
name Plugin name (matches the abstrax-<name> binary suffix)
display_name Human-readable name
description Short description
version Plugin semver
requires_abstrax Semver constraint for the Abstrax CLI
commands List of subcommands, each with name, description, and optional action (for example plugin.example.hello)

action is optional. When omitted, Abstrax derives plugin.<plugin-name>.<command-name> with hyphens turned into underscores (self-updateplugin.composer.self_update).

Abstrax reads this metadata after installation and when you run abstrax plugin info.

Semantic versioning

Plugin versions must use valid semantic versions. Abstrax compatibility is expressed as a semver constraint in requires_abstrax (for example >=0.1.0).

The plugin name must match the abstrax-<name> binary suffix. See How plugins work.