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.


Previous: Examples · Next: Platforms

View source · Edit this page