# Creating a Custom Slicer Module - which way to go?

**URL:** <https://discourse.slicer.org/t/creating-a-custom-slicer-module-which-way-to-go/32234>\
**Category:** Support\
**Created:** [October 15, 2023, 11:02pm UTC](https://discourse.slicer.org/t/creating-a-custom-slicer-module-which-way-to-go/32234 "2023-10-15T23:02:52Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![seanchoi0519](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/seanchoi0519/32/10354_2.png) [@seanchoi0519](https://discourse.slicer.org/u/seanchoi0519)\
**Post date:** [October 15, 2023, 11:02pm UTC](https://discourse.slicer.org/t/creating-a-custom-slicer-module-which-way-to-go/32234/1 "2023-10-15T23:02:52Z")

</div>

Hello everyone

I’m a long-time slicer lurker, who has received much help from everyone here and just want to extend my thanks. After a few years of using Slicer, I feel ready to start developing a few custom modules of my own. I did a brief search on what the best way to go about this would be and ran into many options which confused me. I wanted to know the difference as far as the options go:

1. SlicerIGT ([Developer tutorial | SlicerIGT](https://www.slicerigt.org/wp/developer-tutorial/))
2. Guidelet (?) is this the same thing as option 1?
3. Slicelet ([Documentation/Nightly/Developers/Slicelets - Slicer Wiki](https://www.slicer.org/w/index.php/Documentation/Nightly/Developers/Slicelets)). Is this similar to Guidelet?
4. Kitware ([GitHub - KitwareMedical/SlicerCustomAppTemplate: Template to be used as a starting point for creating a custom 3D Slicer application](https://github.com/KitwareMedical/SlicerCustomAppTemplate))

What is the difference between the three? They appear similar to me in that they are all meant to provide templates in creating custom modules.

I’m looking to create a very specific workflow oriented software, where it would hide most of the default slicer functionalities/GUI and focus on simplicity. The software would ideally be launched with a click of a button from the desktop, instead of needing to search for it in the modules tab, download the extension, etc. to load it.

Which option would be best?

Thanks in advance!

---

<div class="post-metadata">

**Author:** ![pieper](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/pieper/32/8_2.png) [@pieper](https://discourse.slicer.org/u/pieper)\
**Post date:** [October 16, 2023, 5:25pm UTC](https://discourse.slicer.org/t/creating-a-custom-slicer-module-which-way-to-go/32234/2 "2023-10-16T17:25:27Z")

</div>

A slicelet is definitely the most straightforward way to get started. You can just repackage the binaries you get from [slicer.org](http://slicer.org). If you’re mainly automating existing workflows and streamlining the UI you can do everything conveniently in Python. SlicerIGT and Guidelets are for surgical navigation applications and you don’t seem t be doing that. Only do a custom app if you need to add C++ code or otherwise change the whole application.

---

<div class="post-metadata">

**Author:** ![mikebind](https://avatars.discourse-cdn.com/v4/letter/m/71e660/32.png) [@mikebind](https://discourse.slicer.org/u/mikebind)\
**Post date:** [October 16, 2023, 5:52pm UTC](https://discourse.slicer.org/t/creating-a-custom-slicer-module-which-way-to-go/32234/3 "2023-10-16T17:52:38Z")

</div>

Just FYI, a search for “slicelet” on the current documentation site has no hits: [Search — 3D Slicer documentation](https://slicer.readthedocs.io/en/latest/search.html?q=slicelet&check_keywords=yes&area=default)

---

<div class="post-metadata">

**Author:** ![pieper](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/pieper/32/8_2.png) [@pieper](https://discourse.slicer.org/u/pieper)\
**Post date:** [October 16, 2023, 7:54pm UTC](https://discourse.slicer.org/t/creating-a-custom-slicer-module-which-way-to-go/32234/4 "2023-10-16T19:54:54Z")

</div>

True, not all the wiki material has been migrated to readthedocs, so sometimes you need to look both places.

---

<div class="post-metadata">

**Author:** ![seanchoi0519](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/seanchoi0519/32/10354_2.png) [@seanchoi0519](https://discourse.slicer.org/u/seanchoi0519)\
**Post date:** [October 17, 2023, 5:30am UTC](https://discourse.slicer.org/t/creating-a-custom-slicer-module-which-way-to-go/32234/5 "2023-10-17T05:30:36Z")

</div>

Thanks for your reply!  
Could I clarify what you mean by " You can just repackage the binaries you get from [slicer.org](http://slicer.org)"?

Also, do you mind delving deeper into what a slicelet is capable of vs. a custom app (kitware)? Is there perhaps an example of each so I have an idea of what each of the option is used for?

The way I understand it at the moment, a slicelet is essentially simply hiding unnecessary UI elements, showing only the necessary parts on Slicer, while a custom app is a complete renovation?

---

<div class="post-metadata">

**Author:** ![Sam\_Horvath](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/sam_horvath/32/3092_2.png) [@Sam\_Horvath](https://discourse.slicer.org/u/Sam_Horvath)\
**Post date:** [October 17, 2023, 2:42pm UTC](https://discourse.slicer.org/t/creating-a-custom-slicer-module-which-way-to-go/32234/6 "2023-10-17T14:42:07Z")

</div>

So , the custom app uses the same techniques to modify the Slicer UI as the slicelet, (by grabbing and hiding existing widgets in the QT environment), but also has many other options for customization. We have two blogs on using the custom app template:

> **[SlicerCAT: Creating custom applications based on 3D Slicer](https://www.kitware.com/slicercat-creating-custom-applications-based-on-3d-slicer/)**
>
> This blog presents a framework for making custom applications based on 3D Slicer. What is 3D Slicer? 3D Slicer is a software platform for the analysis and visualization of medical images and for research in image guided therapy. It is free, open...

> **[SlicerCAT and Python: Creating Custom Slicer Applications with Qt Stylesheets](https://www.kitware.com/slicercat-and-python-creating-custom-slicer-applications-with-qt-stylesheets/)**
>
> What is SlicerCAT? Our previous blog post on the Slicer Custom App Template (SlicerCAT) explained how to build a custom application based on 3D Slicer with CMake. In this follow-up blog, we present a framework for creating a custom Python scripted...

The custom app template allows you to:

- pick and choose what core modules you want enabled
- bundle in extensions at build time
- bundle in custom modules (python and C++)
- use custom versions of the Slicer code or other dependencies (if needed)
- replace the Slicer logos with your own

I highly recommend starting your development work in the ‘slicelet’ format. If you decide to do a custom app, this work can be reused in the custom app. The custom amp template contains a ‘Home’ module that functions very similarly to a slicelet and uses the same methods to modify the Slicer UI.
