# Submit To Extension Index

> Complete workflow for submitting an extension to the 3D Slicer Extension Index

- Skill: `majiayu000/submit-to-extension-index` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/submit-to-extension-index`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/submit-to-extension-index/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/submit-to-extension-index

---


# Submit to Extension Index Skill

Submit an extension to the 3D Slicer Extension Index.

## When to Use

- Ready to submit extension to the Slicer Extension Index
- All validation checks pass (`./scripts/validate_extension.sh`)

## Prerequisites

Before submitting:

1. Run validation: `./scripts/validate_extension.sh`
2. All checks must pass (0 failures)
3. Extension JSON file exists in repository root

## Submission Steps

### Step 1: Validate

```bash
./scripts/validate_extension.sh
```

Must show "Ready for submission!" before proceeding.

### Step 2: Fork ExtensionsIndex

```bash
gh repo fork Slicer/ExtensionsIndex --clone=false
```

### Step 3: Clone Fork and Create Branch

Get the GitHub username and extension name, then clone:

```bash
# Get values from current repo
GITHUB_USER=$(gh api user -q .login)
EXT_NAME=$(grep -oP 'project\(\K[^)]+' CMakeLists.txt)

cd /tmp
rm -rf ExtensionsIndex
gh repo clone $GITHUB_USER/ExtensionsIndex
cd ExtensionsIndex
git remote add upstream https://github.com/Slicer/ExtensionsIndex.git 2>/dev/null || true
git fetch upstream
git checkout -b add-$EXT_NAME upstream/main
```

### Step 4: Copy JSON and Commit

```bash
# Copy from the extension repository (adjust path as needed)
cp /path/to/extension/$EXT_NAME.json .
git add $EXT_NAME.json
git commit -m "Add $EXT_NAME extension"
git push -u origin add-$EXT_NAME
```

### Step 5: Fetch Current PR Template

**CRITICAL:** Always fetch the latest PR template - it may have changed!

```bash
# Fetch and save the current PR template
curl -s "https://raw.githubusercontent.com/Slicer/ExtensionsIndex/main/.github/PULL_REQUEST_TEMPLATE.md" > /tmp/pr_template.md

# Review the template
cat /tmp/pr_template.md
```

### Step 6: Create PR Body

Read the fetched template and:

1. Keep the "# New extension" section
2. Mark completed items with `[x]`
3. Leave incomplete items as `[ ]`
4. Delete sections that don't apply

**DO NOT** hardcode the template - always use the fetched version as the authoritative source.

### Step 7: Create PR

**Option A: GitHub Web Interface (Recommended)**

1. Go to https://github.com/Slicer/ExtensionsIndex/compare
2. Select your fork and branch
3. The PR template will auto-populate
4. Review each checklist item and mark `[x]` for completed items
5. Submit the PR

**Option B: CLI**

```bash
# Edit /tmp/pr_template.md to mark completed items with [x]
# Then create PR:
gh pr create --repo Slicer/ExtensionsIndex \
  --title "Add $EXT_NAME extension" \
  --body-file /tmp/pr_template.md
```

## Post-Submission

1. Wait for automated build tests
2. Respond to reviewer feedback
3. Extension appears in Extensions Manager after merge

Monitor PR: https://github.com/Slicer/ExtensionsIndex/pulls

## Troubleshooting

### Build Fails

Check CDash logs. Common issues:
- Missing dependencies in `build_dependencies`
- Wrong `build_subdirectory`
- CMakeLists.txt errors

### Extension Not Appearing

1. Verify PR was merged
2. Use Slicer Preview Release (not Stable)
3. Clear Extensions Manager cache

