Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Publishing Plugins

This page covers how to prepare, build, and publish a V2 plugin to the Hone marketplace.

Manifest Requirements

Every published plugin needs a complete plugin.json:

{
  "id": "com.example.my-plugin",
  "name": "My Plugin",
  "version": "1.0.0",
  "description": "A short description of what the plugin does",
  "author": {
    "name": "Your Name",
    "email": "you@example.com"
  },
  "license": "MIT",
  "engines": {
    "hone": ">=1.0.0"
  },
  "main": "src/index.ts",
  "capabilities": {
    "editor": {
      "read": true,
      "write": true
    },
    "ui": {
      "commandPalette": true,
      "notifications": true
    }
  },
  "contributes": {
    "commands": [
      {
        "id": "my-plugin.run",
        "title": "Run My Plugin"
      }
    ]
  }
}

Required Fields

FieldDescription
idGlobally unique identifier (reverse-domain convention)
nameDisplay name shown in the marketplace
versionSemver version string
descriptionShort description (shown in search results)
authorAuthor name and contact
licenseSPDX license identifier
engines.honeMinimum compatible Hone version
mainEntry point TypeScript file
capabilitiesDeclared capabilities (determines execution tier)

Validating the Manifest

Use validateManifest from @hone/sdk to check your manifest before submission:

import { validateManifest } from '@hone/sdk';

const errors = validateManifest('./plugin.json');
if (errors.length > 0) {
  console.error('Manifest errors:', errors);
}

Cross-platform Compilation

When you submit a plugin, the build service (hone-build, port 8447) sends it to perry-hub workers for compilation. You submit TypeScript source code; the service produces native binaries for all supported platforms:

PlatformArchitectures
macOSx86_64, aarch64
Windowsx86_64
Linuxx86_64, aarch64
iOSaarch64 (if applicable)
Androidaarch64 (if applicable)

You do not need to compile for each platform yourself. The build service handles cross-compilation.

Publishing Flow

  1. Develop and test locally. Compile with perry compile src/index.ts --output my-plugin and test against a local Hone instance.

  2. Validate the manifest. Run validateManifest to catch issues before submission.

  3. Submit to the marketplace. Use the CLI or the marketplace client from @hone/sdk:

    hone plugin publish
    

    This uploads your source to the build service, which compiles for all platforms and registers the result with the marketplace server (hone-marketplace, port 8446).

  4. Build service compiles. perry-hub workers produce native shared libraries for each platform/architecture combination.

  5. Plugin goes live. Once all platform builds succeed, the plugin appears in the Hone marketplace. Users can discover and install it from within the IDE.

Versioning

Follow semver:

  • Patch (1.0.0 -> 1.0.1): Bug fixes, no API changes
  • Minor (1.0.0 -> 1.1.0): New features, backward compatible
  • Major (1.0.0 -> 2.0.0): Breaking changes

Each published version creates a new marketplace entry. Previous versions remain available. Users can:

  • Auto-update within a major version (default)
  • Pin to a specific version
  • Roll back to any previously published version

Pre-publication Checklist

  • plugin.json passes validateManifest with no errors
  • Plugin compiles locally with perry compile
  • All declared capabilities are actually used
  • No unnecessary capabilities declared (principle of least privilege)
  • Version number incremented from previous release
  • Description and metadata are accurate
  • License is specified and correct