Extension Submission Checklist Skill
Review and track progress against the official 3D Slicer Extension Index submission requirements.
When to Use
Use this skill when:
- •Preparing to submit an extension to the Slicer Extension Index
- •Reviewing submission readiness
- •Creating a pull request for extension submission
CRITICAL: Verify Latest Requirements First
Before using this checklist, ALWAYS fetch the latest official requirements:
bash
# Fetch the current PR template (authoritative checklist) curl -s "https://raw.githubusercontent.com/Slicer/ExtensionsIndex/main/.github/PULL_REQUEST_TEMPLATE.md" # Fetch the current JSON schema curl -s "https://raw.githubusercontent.com/Slicer/Slicer/main/Schemas/slicer-extension-catalog-entry-schema-v1.0.1.json"
Compare fetched content against this skill. If discrepancies exist, the fetched content is authoritative.
Official Sources (Verified 2025-01-26)
- •PR Template: https://github.com/Slicer/ExtensionsIndex/blob/main/.github/PULL_REQUEST_TEMPLATE.md
- •JSON Schema: https://github.com/Slicer/Slicer/blob/main/Schemas/slicer-extension-catalog-entry-schema-v1.0.1.json
- •Documentation: https://slicer.readthedocs.io/en/latest/developer_guide/extensions.html
Extension Tiers
Extensions are classified by quality/maturity level:
| Tier | Description |
|---|---|
| 1 | Experimental extensions (minimum for listing) |
| 3 | Community-supported extensions |
| 5 | Critical extensions, supported by Slicer core developers |
Tiers 2 and 4 are reserved for future use.
Tier 1 Requirements (Minimum for Listing)
Naming and Repository
- • Extension name is reasonable - Not too general, not too narrow, suggests what it's for
- • Extension name does NOT start with "Slicer" - Unless it bridges Slicer to external tool/library
- • Repository name follows convention -
Slicer+ ExtensionName (e.g.,SlicerMouseMaster) - • Repository has
3d-slicer-extensionGitHub topic - For discoverability at https://github.com/topics/3d-slicer-extension
Description and Documentation
- • Extension description summarizes functionality - 1-2 sentences understandable by non-experts
- • Any related patents disclosed - Must be mentioned in extension description if applicable
Licensing
- • LICENSE.txt present in repository root
- • License name mentioned on extension homepage
- • Permissive license used - MIT or Apache recommended
- • If restrictive license used - Reason explained and license name in description
URLs and References
- • scm_url correct - Repository checkout URL (e.g.,
https://github.com/user/repo.git) - • scm_revision appropriate - Branch name (main, master) preferred over specific git hash
- • Icon URL correct - Raw data URL, not webpage (e.g.,
https://raw.githubusercontent.com/...) - • Screenshot URLs correct - At least one screenshot, raw data URLs
Metadata Consistency
- • JSON file consistent with CMakeLists.txt - Dependencies, category, etc. must match
Homepage Requirements
Homepage URL must point to valid webpage containing:
- • Extension name
- • Short description (1-2 sentences)
- • At least one informative image/screenshot
- • Description of each contained module (at least one sentence each)
- • Publication link (if available) - Link to paper or PubMed reference
GitHub Repository Settings
Hide unused features to reduce noise:
- • Settings > Features - Uncheck Wiki, Projects, Discussions (if not used)
- • About section - Uncheck Releases, Packages (if not used)
Safety Requirements
- • No unreliable binaries - Does not include/download binaries from untrusted sources
- • No data transmission without consent - Explicit opt-in required for any data sending
Tier 3 Requirements (Community-Supported)
All Tier 1 requirements PLUS:
Documentation and Testing
- • Documentation provided for most modules
- • Tutorial with step-by-step instructions - At least for most typical use case
- • Tutorial includes screenshots
- • Sample data registered with Sample Data module - For easy user access
Code Quality
- • Follows Slicer programming conventions - GUI/logic separation, etc.
- • Follows Slicer UI conventions - Minimal popups, no unnecessary custom styling
Build and Platform Support
- • Builds successfully on Windows
- • Builds successfully on macOS
- • Builds successfully on Linux
Maintainer Responsiveness
- • Responds to issues on extension repository
- • Responds to pull requests on extension repository
- • Responds to @mentions on Slicer Forum (discourse.slicer.org)
Licensing (Additional)
- • Permissive license for main functions - Apache or MIT recommended
- • Non-permissive optional components require user approval - Pop-up explaining terms
Tier 5 Requirements (Core Extensions)
All Tier 1 and Tier 3 requirements PLUS:
- • Slicer core developer has commit access - For Slicer-related fixes
- • Automated tests for all critical features
- • Maintainers respond to Forum questions - About the extension
Submission Process Steps
- •Verify latest requirements (see CRITICAL section above)
- •Complete all Tier 1 requirements (minimum)
- •Run
/validate-extension-submissionskill to check readiness - •Run
/prepare-extension-metadataskill to generate JSON file - •Fork https://github.com/Slicer/ExtensionsIndex
- •Add your JSON file to the forked repository's main branch
- •Create pull request using the template
- •Check all applicable boxes in the PR template
- •Respond to reviewer feedback
Files to Prepare
| File | Location | Purpose |
|---|---|---|
ExtensionName.json | ExtensionsIndex repo | Catalog entry for Extension Index |
CMakeLists.txt | Extension repo root | Extension metadata for Slicer build system |
LICENSE.txt | Extension repo root | License file |
README.md | Extension repo root | Homepage/documentation |
| Icon PNG | Extension repo | 128x128 recommended, raw URL needed |
| Screenshots | Extension repo | At least one, raw URLs needed |
Example JSON File (Catalog Entry)
json
{
"$schema": "https://raw.githubusercontent.com/Slicer/Slicer/main/Schemas/slicer-extension-catalog-entry-schema-v1.0.1.json#",
"build_dependencies": [],
"build_subdirectory": ".",
"category": "Utilities",
"scm_revision": "main",
"scm_url": "https://github.com/user/SlicerExtensionName.git",
"tier": 1
}
Validation Commands
bash
# Validate JSON syntax
python -c "import json; json.load(open('ExtensionName.json'))"
# Check CMakeLists.txt metadata
grep -E "^set\(EXTENSION_" CMakeLists.txt
# Verify icon URL is accessible
curl -sI "https://raw.githubusercontent.com/..." | head -1
# Verify screenshot URLs are accessible
curl -sI "https://raw.githubusercontent.com/..." | head -1