RFC: Consolidating remote modules into hierarchical category repos
Tracking issue: ENH: Consolidate remote modules into hierarchical category repos · Issue #6060 · InsightSoftwareConsortium/ITK · GitHub
ITK currently maintains ~60 separate remote module repositories. Each has its own git repo, CI configuration, Python packaging, and boilerplate. This creates significant maintenance overhead:
- ~10,600 lines of duplicated boilerplate across modules
- CI workflow versions fragmented across 10 different action tags
- A single CI infrastructure update requires 15+ coordinated PRs
- Every new filter requires creating an entirely new repository
This came up in the SSIM filter PR #6034 discussion where @blowekamp, @dzenanz, and I agreed that consolidation is needed and that the 6.0 beta phase is the right time.
The idea
Mirror ITK’s internal Modules/[Core|IO|Filtering|...] group hierarchy in Remote modules. Group ~50 modules into 7 category repos by domain, bringing the total from ~60 repos down to under 10 ISC-managed repos.
Proposed categories: IO, Filtering, Mesh, Analysis, Registration, Microscopy, Kitware
New CMake sub-group options (ITKGroup_Remote_IO, ITKGroup_Remote_Filtering, etc.) control which category repos are fetched. All OFF by default. Individual Module_<name> toggles still work within an enabled sub-group.
New modules (like SSIM) would be added as a subdirectory PR to the appropriate category repo – no new git repo needed.
Key design decisions we need input on
- Category groupings – are IO/Filtering/Mesh/Analysis/Registration/Microscopy/Kitware the right buckets?
- Domain vs. maintainer – grouping is by domain, not who currently maintains it. Some “external” repos are artifacts of the old one-module-per-repo requirement. Maintainers may prefer to be part of a larger codebase. Each placement should be discussed.
- Microscopy scope – IOOpenSlide is the only current candidate. Enough to justify a separate repo, or too small?
- KitwareMedical modules – Kitware-managed repo, or merge into ISC categories by domain?
- PyPI packaging – per-category wheels (
itk-remote-io) replacing ~50 individualitk-<name>packages. Acceptable? - Large independents – RTK, TubeTK, WebAssemblyInterface likely stay independent. Others?
Full proposal with module assignments, CMake mechanism details, and implementation phases is in the tracking issue #6060. Please comment there for decisions that need to be recorded; use this thread for broader discussion.