Ця сторінка описує Sigil 0.1.0-alpha.
Цю сторінку ще не перекладено українською, тому вона показана англійською.
Installer wizard¶
When you produce an exe-format package (see Packaging formats), Sigil ships your app inside a branded 800x500 Windows wizard. The wizard host is a stock Sigil binary; everything user-visible is driven from the installer: and parameters: blocks of sigil.yaml.
Screen flow¶
The screen list is built at runtime from your manifest. Welcome, Choose Install Location, Installing and Finish are always rendered; License, the built-in Options page, and your declared custom screens are the conditional ones, in this order:
- Welcome — branded splash with app name + version.
- Choose Install Location — always rendered, immediately after Welcome, whether or not your manifest declares any
parameters:at all. It is not tied to declaring a parameter namedinstall_dir— see the warning under Parameters. Includes a TextBox, Browse..., and a live disk-space readout viaDriveInfo. When the manifest setsinstaller.scope: auto, this screen also carries the user / machine scope toggle, and flipping it recomputes the default path for the chosen scope. On an upgrade, forced downgrade or same-version reinstall in the same scope the screen opens on the folder the app is already installed in, so re-running aSetup.exenever moves the app unless the user picks another folder (R112). See Upgrades. - License — the real license text from
installer.license, shown only when the manifest declares one. Next is disabled until the user accepts. - Options — the built-in components page, shown only when at least one
installer.optionscomponent is enabled. Rendered as checkboxes: the built-ins first (desktop shortcut, Start Menu, add to PATH, file associations), then any app-definedcomponents[]in declared order. The generated desktop and Start Menu shortcuts targetinstaller.run_after_install.pathwhen it is declared, and otherwise{install_dir}\<app.name>.exe(R101); there is no separatetarget:field, so declarerun_after_install— or write your ownshortcut_createstep — when the app's executable is not named after the app. Each checkbox starts at its manifestdefault, except on an upgrade or reinstall, where it starts at what the user chose last time — the install records every resolved option with its uninstall state (R98). A/Poverride on the command line beats both, alockedcomponent always shows its manifest default, and a component new in this version starts at its default. See Upgrades. - N x custom screens — one page per
installer.screens[]entry, in declared order. See Custom screens. - Installing — progress feed driven by the step engine.
- Finish — completion summary.
Three further screens exist but are not part of that linear flow — the wizard diverts to them:
- CloseApps — reached when running applications hold the install directory open. The check happens when you press Next on the screen before Installing, and the manifest's
installer.hooks.pre_installsteps run first — so a hook that stops your app (its own--quit, say) clears it before the wizard looks; Next shows "Preparing to install…" while they run, and they run only once per wizard run. Close for me asks the Restart Manager to shut the listed applications down; the screen stays responsive while it waits, and if anything is still running afterwards it lists what is left and says Setup could not close it. An app the Restart Manager cannot close — a tray app with no window, or a background process its GUI restarts — is what apre_installteardown hook is for. - DowngradeBlocked — jumped to at startup when the installed version is newer than this package; the run ends with exit code
3. - Failed — the terminal screen for a failed install.
/S on the command line suppresses every interactive screen and runs the manifest end-to-end using parameter defaults plus any /PName=Value overrides. See Parameters.
The other two wizards¶
The same host binary also renders two smaller flows:
- Uninstall. Double-clicking
<install_dir>\uninstall.exewith no flags, or pressing Uninstall in Apps & features / Add or Remove Programs (itsUninstallStringcarries no/S): Confirm → [Close apps] → Progress → Done | Failed. Close apps appears only when an application is still holding the install after thepre_uninstallhooks have run; it is the install wizard's Close-applications screen, and nothing has been removed while it shows. A script or deployment tool that wants no window runs the registeredQuietUninstallString, which adds/Sand skips all of it — see Uninstaller. - Headed
/Update. A single status window rather than a paged flow: Checking → Downloading → LaunchingChild → UpToDate | Done | Failed. Headless/Updateshows none of it.
Brand slots¶
The wizard's chrome is themed from installer.brand:
installer:
icon: ./brand/setup.ico
brand:
logo: ./brand/logo.svg
hero: ./brand/hero.png
primaryColor: "#1F2937"
accentColor: "#3B82F6"
Slots — this is the complete list. installer.brand is additionalProperties: false, so any other key fails sigil validate with SIG0010:
| Field | What it does |
|---|---|
logo |
Header logo (SVG or PNG). A relative path resolves against the manifest file's directory. |
hero |
Welcome-screen hero artwork (SVG or PNG). A relative path resolves against the manifest file's directory. |
primaryColor |
Primary button + accent fill. |
accentColor |
Secondary accent (progress + links). |
The colour keys are camelCase, unlike most of the manifest.
primary_colorandaccent_colorare refused (R80): the schema listed them until then while the parser read only the camelCase pair, so a snake_case manifest passedsigil validateand packed with no brand colours at all, silently falling back to the defaults. A wrong spelling is now a validation error rather than an unbranded installer.
logo,heroandinstaller.licensepaths are manifest-relative (R96), the same base asinstaller.icon— not relative tobuild.source. A declaredlogoorherothat cannot be read packs with the non-fatal warningSIG0251and the wizard renders without it; an unreadable licence file isSIG0250.
All colours are #RRGGBB hex — the schema enforces the pattern. The full light and dark palette is derived from those two colours at pack time by the brand generator; there is no gradient, sidebar or per-surface colour field to set. BrandTokenEmitter enforces WCAG-AA contrast against white text at pack time; failing combos surface as a pack-time diagnostic, not a runtime surprise.
Installer icon¶
installer:
icon: ./brand/setup.ico
The .ico is stamped into the produced setup.exe's Explorer icon, into the wizard process, and into the deployed uninstall.exe. Omit the field and Sigil uses a bundled default (the Saki / Alexandre Moore icon, credited in the OSS README).
The rest of the file's identity — the name, publisher, version and copyright Explorer shows under Properties → Details — comes from the app section, including the optional app.copyright. See Installer file properties.
Per-parameter widget selection¶
The wizard picks a widget per parameter from its declared shape:
| Manifest declaration | Widget | widget: override |
|---|---|---|
type: enum with 4 or fewer values: |
radio group | dropdown |
type: enum with 5 or more values: |
dropdown | radio |
type: enum plus source: { ... } |
dropdown, HTTPS-fetched on page-attach — never a radio group | (none) |
type: bool |
checkbox | switch |
type: string |
text input | textarea |
type: int |
number input | slider |
type: path |
path input | (none) |
type: secret |
masked input | (none) |
The widget: column lists the only override each type honours; any other value falls through to the default. Set one with the { param, widget } form of a screen field.
Dynamic dropdowns defer their fetch until every ${parameters.X} referenced in source.url has a non-empty value, then cache the result for the page lifetime. Full mechanics in Parameters.
Custom screens (installer.screens)¶
Custom wizard pages come from installer.screens[] — an ordered list, one page per entry — and nowhere else:
installer:
screens:
- id: server
title: "Server Settings"
subtitle: "Where this workstation reports to."
fields:
- server_ip
- param: log_level
widget: dropdown
- id: privacy
title: "Privacy"
when: "parameters.edition != 'community'"
fields:
- enable_telemetry
| Field | Required | What it does |
|---|---|---|
id |
yes | Stable identifier for the page. |
title |
yes | Page heading and rail label. A LocalizedText — a plain string, or a per-language map. |
subtitle |
- | Secondary line under the heading. Also LocalizedText. |
when |
- | Expression gating the page. Evaluated at navigation time, not when the flow is built, so a page can become visible after an earlier field is set — and is skipped when it is false. |
fields |
yes | The parameters to render, in order. Each entry is either a bare parameter name or a { param, widget } object that overrides the widget choice. |
Rules:
- A
fieldsentry naming a parameter that does not exist is dropped; the page renders without it. - A parameter no screen names is never rendered, even with
install_time: true. It resolves to its default or a/PName=Valueoverride. - There is no reserved
install_dirparameter. The Choose Install Location screen is a fixed part of the flow, wired to the engine's own{install_dir}resolution — it does not read a manifest parameter of that name. Do not declare one; see the warning in Parameters.
Known issue (R79): the parameter-level
screen:field does not build pages. The schema still acceptsscreen:on a parameter and the manifest reference still describes it as grouping parameters onto wizard pages. It does not: the value is written into a sidecar nothing reads, and no page is produced from it. Useinstaller.screens[].
Silent install¶
setup.exe /S /D="C:\Apps\MyApp" /Pedition=professional
/S skips every screen and runs the step list non-interactively. /D=path overrides the install directory (see the setup.exe reference); any /PName=Value tokens override the matching install_time: true parameter default — the P prefix is required, a bare /Name=Value is rejected. /Poption.<Name>=<Value> overrides an installer.options.components[] entry. Undeclared parameter and component names are rejected at parse time. Bool values write back as the literal strings True / False. On a silent upgrade or reinstall, a component with no /P override takes the value the previous install recorded rather than its manifest default — the same chain the Options screen opens on.