compiler.package.installer(results)
compiler.package.installer(results, Name, Value, ...)
compiler.package.installer(results, 'Options', options)
compiler.package.installer(files, reportFile, 'ApplicationName', name, ...)
compiler.package.installer(files, reportFile, 'Options', options)
Load the optional compiler module with ncc('--help'). Pass one compiler.build.Results object, or application files and their buildresult.json report. This function has no output argument. An InstallerOptions object passed through Options cannot be combined with other name-value settings.
Windows generation requires Inno Setup 6. The standard ISCC.exe installation is detected; NELSONC_ISCC can specify its full path. Linux produces an executable .install file using Bash 4 or later, GNU tar, gzip and standard GNU command-line utilities. macOS produces a native flat product .pkg with Apple's pkgbuild and productbuild tools. The generated installers do not require Nelson on the installation machine. Generation never installs the application on the build machine.
RuntimeDelivery='installer' includes the dependency-selected runtime inside the installer. By default, installation places it beside the executable in a directory named executable.runtime. The launcher validates the recorded engine fingerprint before using this adjacent runtime. Windows and Linux additionally support a separate shared location through -runtimeFolder. RuntimeDelivery='none' installs only application files and requires a compatible runtime installed separately.
RuntimeDelivery='web' is the documented default but fails explicitly: automatic runtime downloading is not available. Choose installer or none. No full runtime or download is silently substituted.
Files selected by AdditionalFiles here are installed beside the application, not embedded into its executable. Embedding resources remains a build-time AdditionalFiles operation. Application files recorded by the build report are checked by SHA-256; the entry executable must be included. Missing, changed or conflicting inputs are rejected.
Existing output installers are never overwritten. Input files are staged and verified before compilation. The final installer is published only after successful compilation. Source changes during staging fail the operation. Report digests do not authenticate the publisher.
On Windows, PackageType='zip' packages the installer executable in a ZIP file. With auto, a generated Windows installer of at least 2 GiB is wrapped in ZIP. Linux and macOS support auto only. Very large multi-volume installers are not yet supported or validated.
The Windows installer supports interactive installation, standard Inno Setup silent options, and noninteractive deployment arguments. Start with -agreeToLicense yes or -inputFile FILE. -applicationFolder selects an absolute installation folder; -destinationFolder is an alternative and cannot be combined with it. -outputFile selects a new log file; otherwise a uniquely named nelson_installer_*.log is created under TEMP. Existing log files are never overwritten. The child installer's exit status is returned unchanged.
Windows -inputFile accepts a UTF-8 control file no larger than 1 MiB, containing key=value lines, blank lines and # comments. A byte-order mark and CRLF line endings are accepted. No shell expressions or environment variables are evaluated. Unless the command line already agrees to the license, the first setting must be agreeToLicense=yes. desktopShortcut=true|false and startMenuShortcut=true|false are available only in this file; both default to false in noninteractive deployment mode. Unknown, duplicated or malformed settings are rejected before installation.
/CURRENTUSER selects per-user installation. /ALLUSERS selects all users and may require elevation; run elevated for unattended system-wide installation. /PORTABLE=1 disables uninstall registration and global shortcuts while retaining a local uninstaller. These three native options can accompany deployment arguments; other Inno Setup options require the separate native command-line form. Neither backend modifies the user's PATH or launches the application automatically.
On Windows, -runtimeFolder selects an absolute parent for the included runtime, installed in a subdirectory named by its engine fingerprint. It can accompany -applicationFolder or appear as runtimeFolder=absolute-path in a control file. It cannot accompany -destinationFolder or /PORTABLE=1, and requires RuntimeDelivery='installer'. Application and shared runtime roots must not overlap; reparse points are refused. Registry discovery uses the selected installation scope, without changing application startup.
The Windows package contains one compressed runtime installer, reused for private and shared placement; runtime files are not duplicated. It uses the same inventory union, conflict checks and interrupted-install recovery as compiler.runtime.customInstaller. A conflicting registration or changed runtime file is refused. The embedded runtime installer must be smaller than 2 GiB. Runtime installation happens first; a later application installation failure leaves a separately uninstallable runtime, not a transaction spanning both installations.
Windows application removal also removes its private runtime, but never its shared runtime. The shared runtime has its own unins*.exe; remove it only when no application requires it. Application ownership is recorded in .nelson-install/application.ini. Missing or damaged metadata blocks removal; retain this directory. Private/shared transitions, a changed engine identity or upgrading a legacy installation without ownership metadata require explicit application removal first. A registered runtime cannot be adopted as application-private. Reserved installer filenames cannot be supplied through AdditionalFiles.
The Windows installation launcher contains one copy of the compiled installer, verifies its SHA-256 digest while extracting it to a private temporary directory, and removes the extracted executable after it exits. It requires neither Nelson nor a separately installed C runtime. It is not included in application executables or their minimal runtime. Checksums do not authenticate the publisher.
On Windows, InstallerIcon, InstallerLogo and AddRemoveProgramsIcon customize the native installer without changing the application executable or runtime dependencies. Source images are converted and embedded during packaging. These image options are not used by the Linux or macOS backend. Automatic runtime download and signing remain separate work.
Run a Linux installer with -agreeToLicense yes first. -applicationFolder selects an absolute target; -destinationFolder is an alternative and cannot be combined with it. The target's parent must exist and be writable. The installer never requests elevation. -outputFile selects a new log file. -inputFile accepts a UTF-8 control file no larger than 1 MiB, with key=value lines, optional blank lines and # comments; no shell expressions are evaluated. When used alone, its first setting must be agreeToLicense=yes. Unknown settings and duplicate destination or log settings fail. An optional UTF-8 byte-order mark and CRLF line endings are accepted; NUL bytes are rejected.
On Linux, -runtimeFolder selects an absolute parent for the included shared runtime. It can accompany -applicationFolder, but cannot be combined with -destinationFolder. The runtime is installed in a subdirectory named by its engine fingerprint, not beside the executable. This requires RuntimeDelivery='installer' and an application launcher with runtime discovery version 3 or later. Rebuild older applications to enable it. The two installed roots cannot overlap, and shared runtime paths cannot contain symbolic links or dot components.
The shared runtime uses the same native installer, cumulative dependency inventory and registration as compiler.runtime.customInstaller. Ordinary users register under XDG_CONFIG_HOME (or HOME/.config); root registers under /etc/xdg. No PATH change is needed. The application uninstaller leaves this runtime intact. Its independent uninstaller is fingerprint/.nelson-runtime/uninstall under the selected runtime folder. Remove it only when no application needs it.
Repeating a shared installation verifies the application and also verifies or resumes the runtime installation. A private/shared mode change requires explicit application uninstallation first. A conflicting registration or modified owned runtime file is refused. The shared runtime is installed before the application is published; if application publication fails afterwards, the valid runtime remains available to other applications. There is no transaction spanning the two installations.
Linux installation verifies the embedded archive and file manifest in a private staging directory before publishing the destination. It refuses unknown existing destinations. Running the same installer again verifies its unchanged owned files and preserves user data; installing a different version or repairing modified owned files requires explicit uninstallation first. This is not an upgrade or process-interruption recovery protocol. Checksums detect modifications but are not signatures.
A Linux Shortcut creates a relative symbolic link named Launch ApplicationName in the installation folder. No desktop or system menu is modified. Run .nelson-install/uninstall.sh to remove unchanged distributed files. Modified files, replaced symbolic links, application logs and files added by the user are preserved. When modified owned files remain, the manifest and uninstaller remain available for another removal attempt. The reserved .nelson-install metadata directory must not occur in application inputs.
Linux installers are byte-reproducible for identical input bytes and executable attributes, native binaries, options and tool versions. Packaged timestamps are fixed to 2000-01-01 UTC and ownership is normalized without modifying source files. Installed ordinary files use mode 644 or 755, directories 755 and private installation metadata 700/600. Executable application and library files retain their execute bits.
The installer compares the native launcher's contract with the build report before compilation. An absent, unsupported or inconsistent contract is rejected; rebuild the application with current native launchers rather than editing its report. This protects against mixing incompatible deployment artifacts, but does not authenticate their publisher.
A build using EmbedArchive=false also requires its adjacent .nca archive, already included in Results.Files. Do not omit it when passing a file list. Packaging checks archive size and digest against the staged executable's contract, even if a report has been modified.
Unsigned EXE and ZIP installers are reproducible with the same Windows platform, Inno Setup distribution, input bytes and attributes, runtime binaries, installer options and output base name. Moving the sources or changing their modification dates does not change the output. Files packaged for installation receive the fixed timestamp 1980-01-01 00:00:00 UTC; source bytes and modification dates are not changed. This guarantee does not cover different toolchains or signed outputs.
Application and shared-runtime installers handle nested payload filenames beyond the traditional 260-character Windows limit. The installation root selected with /DIR must still satisfy Inno Setup's directory validation.
On macOS, a graphical build is installed as ApplicationName.app; a non-ASCII display name is retained in Info.plist while the bundle directory uses a safe executable-derived name when required by Apple's package bill of materials. Console builds are installed as ordinary executables. RuntimeDelivery='installer' adds an adjacent executable.runtime directory. RuntimeDelivery='none' requires a compatible runtime discovered by the launcher.
The macOS runtime retains framework bundle structure and the Qt plugins required by the selected modules, including SVG icon engines for graphical toolbars. Non-system dylib references and rpaths are rewritten to relocatable locations, then locally modified binaries receive an ad-hoc signature. This is not a Developer ID signature. The generated .pkg is unsigned unless a later distribution workflow signs it; notarization and Gatekeeper validation require suitable Apple credentials and network services.
Use the macOS Installer application for normal installation, or /usr/sbin/installer with an appropriate target. Reinstalling the same managed destination verifies its manifest, rejects changed owned files and user-data collisions, and removes unchanged obsolete owned files before publishing the update. Run .nelson-install/uninstall inside the installed directory to remove unchanged owned files. Modified files and user-created files are preserved. The package does not modify PATH.
| Version | Description |
|---|