constructor
constructor copied to clipboard
Alternatives to NSIS
I think it's safe to say NSIS is not the most development friendly engine ever, specially coming over from the Python world. While incredibly performant, powerful, customizable and extensible, it comes with a few gotchas:
- Tricky to debug and test. The hoops we go through in the
run_examples.py
showcase this nicely. - Difficult-to-obtain logs. No output in stdout!
- Scripting syntax is sometimes too low-level.
Ideally, I would love to see if we can find a replacement with the following features:
- Free and redistributable (and open-source?)
- Scriptable in a sane way that allows us to run custom code
- Customizable and extensible UI (branding, text, extra pages)
- Good development/debugging experience (CLI installs should be as informative as GUI ones)
This website (plus this one) has TONS of info about the whole landscape. I'll summarize the main findings here, focusing on free products:
-
MSI installers
- The "canonical" solution (like PKGs in macOS).
- Robust, reliable, but not extensible.
- It even has a standard library package,
msilib
(deprecated in 3.11 though). Low-level.
-
WiX
- An abstraction on top of the MSI technology
- Used by other tools like
briefcase
(see code) - Customizable
- V4 recently released, might be a good time to give it a try
- Based on XML inputs, apparently extensible with C# (not sure about this part)
- Real-life example with a lot of documentation
- Examples that run custom code
-
Inno Setup
- Extensible with Pascal (might be a bit saner than NSIS' but still...)
- Does not depend on MSI technology
- Another veteran with good track record
- Good CLI options
- Example: this is what Julia uses
- Plenty of cases where installers run custom code
I think both WiX and InnoSetup might be capable replacements, but none feels like The One ✨ either. Both have good CLI options. WiX uses MSI under the hood, which might be better for corporate users. InnoSetup seems closer to NSIS in spirit, with Pascal Scripting.
So, to sum up, no obvious answer.