Extension Publishing Guide
This guide explains how to publish your extension to the Spec Kit extension catalog, making it discoverable by specify extension search.
Table of Contents
Prerequisites
Before publishing an extension, ensure you have:
- Valid Extension: A working extension with a valid
extension.ymlmanifest - Git Repository: Extension hosted on GitHub (or other public git hosting)
- Documentation: README.md with installation and usage instructions
- License: Open source license file (MIT, Apache 2.0, etc.)
- Versioning: Semantic versioning (e.g., 1.0.0)
- Testing: Extension tested on real projects
Prepare Your Extension
1. Extension Structure
Ensure your extension follows the standard structure:
text
your-extension/
├── extension.yml # Required: Extension manifest
├── README.md # Required: Documentation
├── LICENSE # Required: License file
├── CHANGELOG.md # Recommended: Version history
├── .gitignore # Recommended: Git ignore rules
│
├── commands/ # Extension commands
│ ├── command1.md
│ └── command2.md
│
├── config-template.yml # Config template (if needed)
│
└── docs/ # Additional documentation
├── usage.md
└── examples/2. extension.yml Validation
Verify your manifest is valid:
yaml
schema_version: "1.0"
extension:
id: "your-extension" # Unique lowercase-hyphenated ID
name: "Your Extension Name" # Human-readable name
version: "1.0.0" # Semantic version
description: "Brief description (one sentence)"
author: "Your Name or Organization"
repository: "https://github.com/your-org/spec-kit-your-extension"
license: "MIT"
homepage: "https://github.com/your-org/spec-kit-your-extension"
requires:
speckit_version: ">=0.1.0" # Required spec-kit version
provides:
commands: # List all commands
- name: "speckit.your-extension.command"
file: "commands/command.md"
description: "Command description"
tags: # 2-5 relevant tags
- "category"
- "tool-name"Validation Checklist:
- ✅
idis lowercase with hyphens only (no underscores, spaces, or special characters) - ✅
versionfollows semantic versioning (X.Y.Z) - ✅
descriptionis concise (under 100 characters) - ✅
repositoryURL is valid and public - ✅ All command files exist in the extension directory
- ✅ Tags are lowercase and descriptive
3. Create GitHub Release
Create a GitHub release for your extension version:
bash
# Tag the release
git tag v1.0.0
git push origin v1.0.0
# Create release on GitHub
# Go to: https://github.com/your-org/spec-kit-your-extension/releases/new
# - Tag: v1.0.0
# - Title: v1.0.0 - Release Name
# - Description: Changelog/release notesThe release archive URL will be:
text
https://github.com/your-org/spec-kit-your-extension/archive/refs/tags/v1.0.0.zip4. Test Installation
Test that users can install from your release:
bash
# Test dev installation
specify extension add --dev /path/to/your-extension
# Test from GitHub archive