Module Specification

This document describes the homeboy.json module manifest format used by the Homeboy CLI and (via the CLI) the desktop app.

Overview

Modules extend Homeboy with custom functionality. Each module is a self-contained directory with:

  • homeboy.json – Manifest file (required)
  • Optional scripts (executed by the CLI based on runtime.* commands)
  • Optional assets and configuration

Installation location

Homeboy Desktop is macOS-only.

The desktop app stores installed modules under its AppPaths root:

  • Desktop config root (single source of truth: AppPaths):
    ~/Library/Application Support/Homeboy/
    
  • Modules:
    ~/Library/Application Support/Homeboy/modules/<module-id>/
    

Homeboy Desktop installs/links modules by running the CLI (homeboy module install ...), but the desktop app does not assume it shares the same on-disk config root as the CLI (dirs::config_dir()/homeboy).

Note: the CLI embeds its core documentation in the binary (see homeboy docs).

Module responsibilities

Homeboy modules can:

  • define project type behavior for the platform (discovery, CLI templates, DB templates, deploy verification, version parsing patterns, etc.)
  • define executable tools (optional runtime.* section) runnable via homeboy module run

The manifest is a single unified homeboy.json file; modules include only fields they need.

For the authoritative runtime behavior, see homeboy/docs/commands/module.md.

Manifest Schema

Root Object

FieldTypeRequiredDescription
idstringYesUnique identifier (lowercase, hyphens)
namestringYesDisplay name
versionstringYesSemantic version (e.g., "1.0.0")
iconstringYesSF Symbol name
descriptionstringYesShort description
authorstringYesAuthor name
homepagestringNoURL to documentation/repo
configSchemastringNoProject-type config schema identifier (platform behavior)
discoveryobjectNoProject discovery commands (platform behavior)
cliobjectNoProject-type CLI template (platform behavior)
databaseobjectNoProject-type DB templates (platform behavior)
deployarrayNoDeployment verification rules (platform behavior)
versionPatternsarrayNoVersion parsing rules by file/extension (platform behavior)
buildobjectNoBuild behavior (platform behavior)
commandsarrayNoAdditional CLI command names this module provides (platform behavior)
runtimeobjectNoExecutable runtime configuration (for homeboy module run)
inputsarrayNoInput field definitions (for executable modules)
outputobjectNoOutput configuration (for executable modules)
actionsarrayNoAction button definitions (for executable modules)
settingsarrayNoPersistent settings (merged across scopes by the CLI)
requiresobjectNoModule/component requirements for activation

Runtime Object

Executable modules use the CLI runtime contract described in homeboy/docs/commands/module.md.

The manifest’s runtime object configures shell commands that the CLI runs (for example runCommand, setupCommand, and optional readyCheck). The CLI injects execution context and merged settings via environment variables.

Requirements Object

Modules can declare dependencies on project configuration (components, feature flags, and project type). Modules with unmet requirements appear disabled in the sidebar.

FieldTypeRequiredDescription
componentsarrayNoComponent IDs that must exist in the active project config
featuresarrayNoRequired feature flags (supported: hasDatabase, hasRemoteDeployment, hasRemoteLogs, hasCLI)
projectTypestringNoRequired project type (e.g. wordpress)

Input Object

FieldTypeRequiredDescription
idstringYesUnique input identifier
typestringYes"text", "stepper", "toggle", or "select"
labelstringYesDisplay label
placeholderstringNoPlaceholder text (for text inputs)
defaultanyNoDefault value
minintNoMinimum value (for stepper)
maxintNoMaximum value (for stepper)
optionsarrayNoOptions for select type
argstringYesCLI argument name (e.g., "--tag")

Output Object

FieldTypeRequiredDescription
schemaobjectYesOutput data schema
displaystringYes"table", "json", or "log-only"
selectableboolYesWhether rows can be selected

Schema Object

FieldTypeDescription
typestringAlways "array"
itemsobjectColumn definitions as {column_name: "string"} (null for console-only output)

Action Object

FieldTypeRequiredDescription
idstringYesUnique action identifier
labelstringYesButton label
typestringYes"builtin" or "api"

Builtin Actions

FieldTypeDescription
builtinstring"copy-column", "export-csv", or "copy-json"
columnstringColumn name (for copy-column)

API Actions

FieldTypeDescription
endpointstringAPI path (e.g., "/admin/newsletter/bulk-subscribe")
methodstringHTTP method ("POST", "GET", etc.)
requiresAuthboolWhether authentication is required
payloadobjectRequest body with template interpolation

Template Variables:

  • {{selected}} – Array of selected result rows
  • {{settings.key}} – Value from module settings

Setting Object

FieldTypeRequiredDescription
idstringYesSetting key
typestringYes"text", "toggle", or "stepper"
labelstringYesDisplay label
placeholderstringNoHelp text
defaultanyNoDefault value

Module output

For homeboy module run, the CLI streams the module process output to the console and determines success/failure based on exit code.

If your module is intended for use in Homeboy Desktop’s dynamic UI, structure your module homeboy.json using the inputs/output/actions/settings fields documented in this file.

Examples

Desktop-focused module (dynamic UI)

~/Library/Application Support/Homeboy/

Project configuration

Project configuration requirements (local environment settings, subtargets, and CLI template variables) are defined by the CLI and the active project type.

Use the CLI as the source of truth:

  • homeboy docs project
  • homeboy docs module