Don't use the Low IL temp directory when elevated (thanks Richard Warren for responsibly disclosing, bug #1326) This stops a possible privilege escalation for installers running as SYSTEM.
F.2.1.2 Minor Changes
Added StartsWith[S], EndsWith[S], Contains[S], IsLowerCase and IsUpperCase LogicLib operators.
Preliminary ARM64 support in makensis.nsi (patch #318)
F.3 3.11
Released on March 8th, 2025
F.3.1 Release Notes
Your installer will still fit on a single floppy disk. Or even eight.
F.3.2 Changelog
F.3.2.1 Security
Retry creating restricted $PLUGINSDIR (thanks Sandro Poppi for responsibly disclosing, bug #1315) This stops a possible privilege escalation. A malicious actor can create the temporary plugins directory ($PLUGINSDIR) at just the right time and fill it with malicious files that the installer might use. Installers running as SYSTEM use C:\windows\temp which is accessible by all users on the system. Any user can use this bug to gain SYSTEM privileges by winning the race condition with an installer that starts as SYSTEM.
F.3.2.2 Minor Changes
Retry opening self if there is a sharing error (partial patch #316)
Support setting source file decoding charset with magic comment (patch #292)
Long-awaited version 3 of NSIS is finally ready. It comes with optional Unicode support, still works on all the same versions of Windows, supports Windows 10, and adds a lot of other small features and fixes. Huge thanks goes out to Anders and Wizou for making this happen and Jim Park for the original patch.
F.16.2 Changelog
F.16.2.1 Minor Changes
!finalize command now supports the same compare operators as !system (bug #1148)
MakeNSIS can now generate ANSI and Unicode installers. Source files can be UTF8SIG, UTF16BOM or traditional MBCS text files (which are converted to Unicode with ACP unless you specify a different codepage). The default plugins are now stored in sub-folders based on their CPU target and character set encoding.
F.25.1.1 Known Issues
The POSIX build is currently broken
LangDLL doesn't display localized language name with Unicode false
Support for Microsoft's upcoming release of Windows 7 has been added based on RC1 testing and documentation. Please report any related issues and don't forget to use RequestExecutionLevel.
Added WinVer.nsh Windows 7 and Windows 2008 R2 support
Installers now identify as Terminal Services aware (IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE) so $WINDIR will no longer be under the user's profile when installing on Terminal Services
Less UAC annoyance in Add/Remove control panel (bug #2697027)
Global labels didn't work when declared in unused functions (bug #2593369)
F.34 2.43
Released on February 5th, 2009
F.34.1 Release Notes
A few minor changes were made to the new plug-in API that break backward compatibility. Header and library paths were changed and RegisterPluginCallback has changed its return value.
F.34.2 Changelog
F.34.2.1 Minor Changes
Added WinCore.nsh, WinDef.nsh, WinError.nsh, WinNT.nsh and WinUser.nsh for more useful Windows definitions
Support for edit box change notification in combo box
F.41.2.4 Minor Changes
Fixed exception handling of UPX compressed icons (bug #1896500)
Fixed InstallDirRegKey example in bigtest.nsi
Fixed Memento's documentation to include ${MementoSectionDone}
Fixed rare decompression error with 0x4001 bytes of compressed data (bug #1874297)
LangFile.nsh: Added LANGFILE_INCLUDE_WITHDEFAULT to load language file with defaults being obtained from a default file. This replaces the LANGFILE_DEFAULT setting and makes it easier to use LangFile.nsh for multiple sets of languages file without having to care about the different LANGFILE_DEFAULT settings.
Fixed a rare nsDialogs crash on Windows 98 with non-standard builds of nsDialogs (bug #1889720)
F.43 2.34
Released on December 24th, 2007
F.43.1 Release Notes
Thanks to user input on Modern UI 2, it is now ready for mass consumption at no better time than the holiday season. The installer for NSIS itself now exploits the wonders of MUI2 and nsDialogs and so should you.
F.43.2 Changelog
F.43.2.1 Major Changes
Modern UI 2: Simpler code, easier to extend and makes use of the faster nsDialogs
Fixed endianness issues introduced in version 2.32 (bug #1851365)
F.44 2.33
Released on November 17th, 2007
F.44.1 Release Notes
This is a quick fix release for a bug, introduced in 2.32, that prevented the welcome page to display properly on Windows 9x. The problem was caused by the move from CVS to Subversion that messed with the line-breaks format of the INI files.
F.44.2 Changelog
F.44.2.1 Major Changes
Modern UI: Fixed a bug, introduced in 2.32, that caused display problems for the welcome and finish pages on Windows 9x (bug #1831677)
F.44.2.2 Minor Changes
Modern UI: Allow MUI_LANGDLL_ALLLANGUAGES to be defined after insertion of MUI_LANGUAGE macro
F.44.2.3 Utilities and Plug-ins
Made nsExec's internal process always exit cleanly to avoid false return values and delays (reported in the forum)
nsDialogs: Added OnClick support for static controls
Fixed build failures with MinGW's GCC 4 (bug #1800834)
F.47 2.30
Released on August 25th, 2007
F.47.1 Release Notes
This release includes a beta of Modern UI 2. Please report any issues and suggestions.
The format of Modern UI language files has been modified to better support external strings. Private language files should be converted (and submitted as a patch in the spirit of open source).
F.47.2 Changelog
F.47.2.1 Major Changes
Fixed a bug introduced in version 2.29 that caused invalid $SMPROGRAMS value on Windows 98 (bug #1766268)
Modern UI 2 beta: Simpler code, easier to extend and makes use of nsDialogs
F.47.2.2 Minor Changes
Added InstallOptions.nsh with relevant usage macros, based on the old Modern UI macros
Added LangFile.nsh allowing creation of language files that can be included with a single command with defaults for missing strings (when LANGFILE_DEFAULT is set)
Added LB_ERR and CB_ERR to WinMessages.nsh (bug #1771644)
The most notable addition in this release is nsDialogs - a faster and far more capable replacement for InstallOptions. It allows creating controls of any type directly from the script and removes the need to mess with slow INI files. It integrates directly into the script by calling functions for notification, including change notification for edit boxes. Speak up if you have any suggestions/comments/patches for it.
F.48.2 Changelog
F.48.2.1 Major Changes
Added nsDialogs - a replacement for InstallOptions
F.48.2.2 Minor Changes
Disable Windows error messages for the entire installer and not just for an incomplete list of fail-points (bug #1741061)
Valencian and Catalan are no longer installed (patch #1558822)
F.49.1.5 Build System
Added IGNORETESTS for ignoring certain test files
Added wxWidgets to the requirement list
System now builds with GCC, but without System::Get and System::Call (patch #1711089)
F.50 2.27
Released on May 5th, 2007
F.50.1 Release Notes
This is a quick-fix release that addresses a bug introduced in the last version, 2.26, that caused $PROGRAMFILES and $COMMONFILES to translate into random strings in the uninstaller.
F.50.2 Changelog
F.50.2.1 Major Changes
Fixed a bug introduced in 2.26 that made $PROGRAMFILES and $COMMONFILES unavailable in the uninstaller
F.50.2.2 Minor Changes
Disable the X button on InstallOptions pages when CancelEnabled is 0
Some changes have been made to the credit and license files in order to avoid copyrights and license related confusions. This does not change in any way how NSIS should or could be used. NSIS itself is still licensed with the permissive BSD-like zlib license.
Upgrade is recommended for early adopters of WinVer.nsh, due to a bug in Windows 98 and ME detection.
F.55.2 Changelog
F.55.2.1 Minor Changes
Fixed context menu not disappearing when moving from instfiles page (bug #1115825)
Fixed WinVer.nsh's detection of Windows 98 and ME (reported on the forum)
System: fixed a bug that caused stack corruption and stopped the installer from deleting System.dll when a function with no arguments was called (bug #1535005)
System: fixed wrong return values for functions that return short or char (bug #1535007)
The script compiler, makensis, builds and works on big-endian platforms. This change enlarges the portability range of NSIS to theoretically every POSIX platform. Please report any incompatibility with specific platforms or build-tools.
The internal changes made to support big-endian platforms also pave the road to x64 installers. There is now a central function which writes data to disk. This function currently only converts the endianness of integers, but it can be changed to selectively write 64-bit integers. Hopefully, there'll soon be a simple method of compiling a script to both x86 and x64 installers.
Changing Source/exehead/fileform.h to alter the internal structure of installers is no longer enough. The compiler has its own definitions of the structures which must also be changed in Source/fileform.cpp. In the future, fileform.cpp should be automatically generated from fileform.h, but for now, the synchronization must be done manually.
F.61.2 Changelog
F.61.2.1 Major Changes
Big-endian platforms are now fully supported by makensis
Library now available on non-Windows platforms as well, although it requires the installed DLL to have version information
Modern UI 1.75: added show function for the start menu page (RFE #1448176), added MUI_HEADER_TRANSPARENT_TEXT for transparent header texts (RFE #1447766)
NSISdl: better header detection for better compatibility with proxies like WinProxy (bug #1445735), fail if no headers are sent, faster downloads (patch #1465378)
Write all configuration to sconf.h instead of passing it on the command line
F.63 2.14
Released on January 24th, 2006
F.63.1 Release Notes
This release fixes a critical bug that caused installers using plug-ins to fail loading on Windows 9x and NT. Upgrading from 2.13 is highly recommended.
F.63.2 Changelog
F.63.2.1 Major Changes
Fixed a bug that corrupted $TEMP under Windows 9x and NT and caused InitPluginsDir to fail (bug #1412159)
F.63.2.2 Minor Changes
Fixed a possible buffer overflow caused by long values of $0, when using large NSIS_MAX_STRLEN builds (above 4096)
F.64 2.13
Released on January 21st, 2006
F.64.1 Release Notes
Language detection has changed. The default language is now set to the user's user-interface language instead of the locale language, as suggested by MSDN. To restore the old behavior, use System::Call "kernel32::GetUserDefaultLangID()i.a" in .onInit.
F.64.2 Changelog
F.64.2.1 Major Changes
Default $LANGUAGE value is now based on user's UI language instead of locale (bug #1324734)
Modern UI 1.73: fixed checkboxes on uninstaller finish page or multiple finish pages
WordFunc: fixed incorrect replacement of first word in WordReplace, under some conditions (Instructor)
F.68.1.4 Translations
Renamed Malaysian to Malay
Update Thai translation to the latest version
Updated Kurdish MUI translation to the latest version
F.68.1.5 Build System
Fixed a number of build problems on POSIX platforms which caused plug-ins to malfunction and installers to crash
F.69 2.08
Released on July 23rd, 2005
F.69.1 Release Notes
The Archive has been replaced with a Wiki. The new Wiki allows everyone to edit all pages so there's no longer need to hunt for the original author. It also allows everyone to upload plug-ins and not just administrators. And as if that's not enough, it looks better and provides easier and more feature-rich syntax.
Improved French, Ukrainian and Luxembourgish translation
Made RMDir set the error flag, if passed an invalid directory path (bug #1227553)
Made uninstallers copy themselves into a subdirectory of the temporary directory to avoid DLLs left in the temporary directory from being loaded by the uninstaller (patch #1214319)
Missing LangString warning now uses the language name, if possible
zip2exe: fixed restriction of extraction path length and updated to zlib 1.2.3 (bug #1226381)
F.69.2.3 Build System
Added linker script to assure correct order of sections when building using GNU tools
Added test target
UIs are now built from source
F.70 2.07
Released on June 20th, 2005
F.70.1 Release Notes
NSIS Update was removed and the update check was moved back to MakeNSISw (Help -> NSIS Update). Use the nightly builds to get the latest compiled binaries from CVS.
Solid compression is no longer the default for bzip2 and lzma, use SetCompressor /SOLID bzip2 or SetCompressor /SOLID lzma for solid compression.
Source code is no longer supplied with the installer package. Source code can be downloaded from CVS or from the download page.
The directory structure of the installation has been changed. All documentation is now in the Docs folder and all examples are in the Examples folder.
A lot of changes were made to the behavior of sections/components and related instructions. The changes were thoroughly tested, but may still cause minor incompatibilities with old scripts. Please let us know if your script no longer functions as expected with these changes.
Fixed invalid directory creation by File /r on POSIX
Fixed Unicode conversion problems on POSIX
F.73.1.2 Minor Changes
Added new test for dir_reader::matches
Fixed LibraryLocal failure with UNC paths
Fixed VC 7.1 and GCC 3.4 compile errors
Language file fixes
F.74 2.03
Released on December 3rd, 2004
F.74.1 Release Notes
If you're using File /r folder in your script, it's recommended you replace it with File /r folder\* for faster compilation and so no other folders named folder will be included
Command line switches prefix on POSIX has changed to a dash
The plug-in API change is backward compatible
F.74.2 Changelog
F.74.2.1 Major Changes
Added another parameter to plug-in functions with a pointer to exec_flags and ExecuteCodeSegment
Fixed handling of absolute paths on POSIX
Made RegDLL load and unload a DLL exactly once to fix crashes with COM DLLs registration
F.74.2.2 New/Changed Commands
Added /date switch to !define for definition of date and time constants
Added /x switch for File and ReserveFile to exclude files and directories
Made File's /r switch always search in subdirectories, even if the given path points to an existing directory
F.74.2.3 Minor Changes
Added LIBRARY_SHELL_EXTENSION and LIBRARY_COM to Library
Added missing #include
Added NSIS_LZMA_COMPRESS_WHOLE to the script define list
Documentation fixes and improvements
Fixed an access violation in case of a script jump beyond the last entry
Fixed keyboard navigation in the instfiles page while installing
Fixed unpacking window not showing when BGGradient is used
Modern UI 1.72: Fixed state of Cancel button on Finish page when used in installer and uninstaller, added a string for NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE
nsisconf.nsh was not always parsed when compiling using MakeNSISw
F.75 2.02
Released on October 23rd, 2004
F.75.1 Changelog
F.75.1.1 Major Changes
Added lots of small usage examples to the documentation
Made relative jumps work with instructions that add multiple entries
Made Reboot call .onRebootFailed and quit on failure instead of setting the error flag
F.75.1.3 Minor Changes
Added Albanian language files
Added NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE configuration option which makes components only be toggled when the user clicks on the checkbox and makes .onMouseOverSection only be called when the user selects a component
Added some CppUnit tests
Both _?= and /D= now require a space before them so they can safely remove the space from $CMDLINE
Fixed a bug that caused the uninstaller CRC-check to fail if !packhdr created a non-512-bytes-aligned exehead
Fixed a bug which made plug-ins that didn't have lower case extension not be found
Fixed a bug that caused directories with drives that had their current directory set to an invalid directory to not be accepted in the directory selection page
Fixed a crash in makensis caused by defining a macro in a file included by another macro
makensis shows meaningful errors for compression errors instead of just magic numbers
Made Times New Roman default font for the background text because it should always have support for the locale's language
Fixed compilation of NSISdl under VS.NET
SetCtlColors /BRANDING wasn't working right, if just one of the background or text color were specified
Language file fixes and improvements
F.76.2.4 Utilities and Plug-ins
System: New, hopefully more informative, documentation; fixed some bugs
Banner: Added getWindow to allow greater control over the banner window
InstallOptions 2.41: Bitmaps are now automatically centered, fixed a bug which prevented enabling the next button from the leave function of InstallOptions pages, fixed a rare freeze
Zip2Exe 0.32: Fixed codepage problems
nsExec: Always create a valid input handle, fixed a problem when called from a path with spaces
VPatch: Close all open file handles when one of them fail to open
Modern UI 1.68: New settings for extra space for title and text on Welcome page and Finish page, improved handling of verbose settings, language file string for uninstaller reboot information, more
Shell folders are now detected using shell API functions and not the registry. This is the recommended method by Microsoft. New constants have been added in the process ($FONTS, $SENDTO and more...). See section 4.2.3 for more details.
Added LogicLib to distribution (easier conditional execution etc.)
Added DirVerify and GetInstDirError to allow custom error checking when the installation directory is invalid or the drive does not have enough space
Support for reading environmental variables at compile time: $%envVarName%
Added /SD parameter for MessageBox. Allows to set default for silent installers.
New sections macros for mutually exclusive section selection
Improved RTL support by adding WS_EX_RTLREADING wherever possible
F.81.2.2 Utilities and Plug-ins
InstallOptions 2.3: Added new control type "Button", added new flag "NOTIFY", added new flag "NOWORDWRAP" for multi-line text boxes, reduced size down to 12K
MakeNSISW: More options to set the compression method
Zip2Exe 0.31: Fixed compression setting, LZMA compression support
VPatch 2.1: Better error handling and exit code for GenPat
F.82 2.0 Beta 4
Released on November 19th, 2003
F.82.1 Release Notes
The /LANG parameter is no longer available for any text setting instructions. You must use a LangString if you want to make a certain text multilingual. This means you can also set one text for all languages. To make the license data multilingual you should use LicenseLangString.
Modern UI 1.67: Because of the new syntax for pages, renaming of settings and variable names etc., you have to make some changes to your scripts, see the Modern UI Readme for details.
Custom Pages now have a leave function. As this parameter is placed before the caption you have to add another "" empty string for the title to work.
.onSelChange is no longer called when the components page is created.
The icons folder has been renamed to Graphics and was reorganized. If you were using any files from Contrib\Icons in your script, you should update it to point to the new image or icon path.
UpgradeDLL has been changed, it's highly recommend that you include the new version in your script using !include "UpgradeDLL.nsh" instead of the old one.
F.82.2 Changelog
F.82.2.1 Major Changes
CHM documentation - searchable and comes with an index
User variables ($VARNAME) that can be declared with the Var command
Support for all pages in both installer and uninstaller. Components, directory and license pages can be used for the uninstaller
Improved large files handling (way lower requirements to compile a 2GB installer now)
Full support for RTL languages, including support for LTR and RTL languages in one installer
Modern UI 1.67: New system & syntax for pages, settings (support for multiple pages of the same type, page specific settings, more customization options etc.), Welcome/Finish pages for uninstaller, LicenseForceSelection support, new options for Finish page / language selection dialog, fixes, more
Extraction progress
No more unprocessed strings, variables can be used everywhere
Leave function for custom pages: Input on InstallOptions pages can be validated using script code
Interface improvements: Better ClearType support, no more flickering
RO sections can now be in InstTypes too (defaults to old behavior)
Increased limit of InstTypes to 32
Improved macros & functions: UpgradeDLL, GetParent, GetParameters. Using the new versions is recommended.
Fixed SetOutPath not setting current directory if the directory didn't exist before
Components tree: fixed problems with sub-sections with RO sections as children, SF_EXPAND now refreshes the components tree and added SF_PSELECTED for partially selected sub-sections
Improved AddBrandingImage: doesn't depend on the UI, can set image on the bottom and on the right, support for custom padding value
Better installation directory verification
Fixed all known problems with temporary files and directories
Documentation fixes
Minor bug fixes
Code clean-ups and some more comments
More...
F.82.2.4 Utilities and Plug-ins
MakeNSISW 2.0: UI to define symbols, easy access to recent scripts, toolbar and more
Zip2Exe 0.3: based on header files, improved interface, Modern UI support, new script code, improved folder detection
InstallOptions 2.2: added LINK control, added EXTENDEDSELECT flag for list boxes which replaces MULTISELECT that now acts exactly as the real style flag ([double] click turns on or off selection), fixes
BgImage plug-in stability fixes
Added vPatch: patch generator and plug-in that applies the patches
Banner plug-in improvements: responds to messages and some new /set tricks by brainsucker
AdvSpalsh plug-in improvements: smaller, better transparency support and a possible bug fix
System plug-in improvements: Unicode, GUID and COM support
nsExec plug-in improvements: ability to run 16 bit code and tabs to spaces conversion
Math plug-in
Delphi unit for NSIS plug-ins
F.83 2.0 Beta 3
Released on March 16th, 2003
Modern UI 1.63: Header bitmap support, new defines to change the description area, single macro for language selection dialog, more!
New tutorial in the documentation
define_if_last in Page command also works when a define has not been specified for all Page commands. This fixes the problem with the Modern UI "Click Next" / "Click Install" texts.