This page describes the current authoring boundary. Treat it as a compatibility check, not a promise about the roadmap.
Package and payload
- Per-machine, 64-bit native MSI packages with embedded Cabinet media.
- Recursive files, nested directories, empty files, and explicit empty folders.
- MSZIP, uncompressed, and LZX Cabinet modes.
- Atomic output replacement with
--force. - Stable major-upgrade identity derived from the authoring ID, with downgrade blocking and rollback-safe removal scheduling.
Installer experience
- Standard or minimal authored UI with classic or modern styling.
- Optional destination-folder selection and RTF license page.
- Repeatable Windows Installer launch conditions.
- Installed apps publisher, icon, version, estimated size, and uninstall data.
- Start menu, desktop, startup, installation-directory, and custom nested shortcut destinations.
Text, characters, and limits
CLI text and MSI table strings use UTF-8 (codepage 65001). The separate SummaryInformation stream uses neutral ASCII labels for Windows Installer compatibility; Unicode product and publisher metadata is stored in MSI properties and displayed by the installer and Installed apps.
- Product and publisher names, launch-condition messages, destination names, shortcut names, and shortcut arguments support Unicode, including accents, Greek, CJK text, and emoji. Invalid UTF-8 and control characters are rejected.
- Product IDs and MSI authoring identifiers remain ASCII. Launch-condition syntax uses Windows Installer identifiers and operators; quoted values may contain Unicode.
- Product and publisher names must be nonempty and at most 72 UTF-8 input bytes. Launch-condition messages, destination segments, and shortcut arguments are limited to 255 UTF-8 bytes; custom folder names to 72 and shortcut names to 124 bytes. These are byte limits, so
éuses two bytes and😀uses four. - Windows filename punctuation, reserved names, traversal, and trailing dots or spaces are rejected. Unicode case collisions are rejected using invariant Windows UTF-16 case mappings. Names are preserved without normalization.
- Built-in UI labels are English and the package language is 1033. Unicode metadata does not translate the installer UI.
- License files use UTF-8 RTF source, at most 64 KiB. Unicode text is converted into RTF Unicode escapes for display, including emoji surrogate pairs. Existing RTF escapes remain valid; converted text must fit the MSI string limit of 65,535 bytes.
Payload file contents are copied unchanged and can contain UTF-8 or any other bytes.
Current constraints
- Generated installers target Windows only and require Windows testing.
- Packages are per-machine and require administrative privileges to install.
- Unsafe destination paths are rejected as
UnsafeDestinationPath. - Code signing is external to Setupidity.
- Bundles, patches, per-user installation, services, environment variables, file associations, registry authoring beyond Setupidity’s own metadata, and arbitrary MSI table authoring are not currently exposed.
- Only embedded media is emitted.
The acceptance suites and their intentional comparison boundaries remain documented in tests/acceptance/README.md.