> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zappl.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Preferences

> If you are looking to customise the JSON Schema in Jamf Pro or iMazing for other MDMs, you can use this guide to understand the purpose of each preference key.

<Note>The screenshots in this guide show the UI when using the custom preference schema for Jamf Pro, but each preference's underlying key name has also been included so non-Jamf Pro customers can still identify and configure the correct preference. If you're not using Jamf Pro, we'd recommend using [iMazing Profile Editor](https://imazing.com/profile-editor) to configure your preferences, or using our [sample plist](https://latestinstaller.zappl.co/Resources/Minimal%20Plist/Zappl%20Preferences%20Sample.plist?v=3.0.0) as a starting point.</Note>

#### Preference Structure

The configuration profile is comprised of three main preference dictionaries; the **General Options**, the **Scheduled Update Prompt Options** and the **Forced Update Prompt Options**.

<img width="300" src="https://mintcdn.com/daretechnology/pZcemu2XpINoT_Wm/images/json-structure.webp?fit=max&auto=format&n=pZcemu2XpINoT_Wm&q=85&s=ecbc28e0851b3e453245eb6a2f209938" data-path="images/json-structure.webp" />

The scheduled and forced update prompt options share identical preference keys that serve the same purpose for their respective prompt mechanisms, although the forced update prompt options require fewer preferences.

This is because deferrals and grace periods for forced update prompts are configured on a per-app basis when marking apps for forced updates, and because the forced update prompt feature requires slightly less functionality overall.

<Note>To customise AppBar preferences, refer to the [AppBar Preferences](/appbar/appbar-preferences) guide.</Note>

## Schema Preference Key Guide

#### General Options

<AccordionGroup>
  <Accordion title="Activation Token" icon="asterisk">
    **Key:** `activationToken`

    <Info>**This key is required to activate and use Zappl.**</Info>
    Enter your unique customer activation token. If you do not know this, please [contact our Support team](mailto:helpdesk@dare.tech).
  </Accordion>

  <Accordion title="Public Key" icon="asterisk">
    **Key:** `publicKey`

    <Info>**This key is required to activate and use Zappl.**</Info>
    Enter your unique customer public key. If you do not know this, please [contact our Support team](mailto:helpdesk@dare.tech).
  </Accordion>

  <Accordion title="Enable Compliance Reporting" icon="square-check">
    **Key:** `enableReporting`

    <Info>**This key is set to `true` by default.**</Info>
    By default, Zappl submits daily compliance reports to the [Zappl Portal](https://portal.zappl.co). To prevent Zappl from submitting compliance reports, uncheck this option.

    **This option requires at least v2.1.0**

    <Note>During your Zappl trial, it may be useful to put Zappl into "Report-Only" mode before allowing updates. This lets you see your compliance status before and after Zappl updates apps. To enable this, ensure this option is checked and that **Allow Background Updates** and **Allow Scheduled Update Prompts** are both unchecked. Once Zappl has collected compliance stats, simply enable these two options to allow Zappl to update apps and report your updated compliance status.</Note>
  </Accordion>

  <Accordion title="Allow Background Updates" icon="square-check">
    **Key:** `backgroundUpdates`

    <Info>**This key is set to `true` by default.**</Info>
    When enabled, Zappl attempts to silently update apps in the background on a recurring interval. If an app is not in use when an update is available, it will be updated without any prompts being shown to the user. Leaving this enabled is recommended to ensure updates are applied as quickly as possible with minimal user disruption.

    If you wish to disable all updates, this is the first of two settings that need to be unchecked, the second being the [Allow Scheduled Update Prompts](/customise/preferences#allow-scheduled-update-prompts) option.
  </Accordion>

  <Accordion title="Allow Scheduled Update Prompts" icon="square-check">
    **Key:** `updatePrompts`

    <Info>**This key is set to `true` by default.**</Info>
    By default, Zappl prompts users to quit Apps that need to update on a regular recurring interval which can be configured in the **Scheduled Update Prompt Options**.

    If you wish to disable the *recurring scheduled update prompts* and only attempt to install updates silently when Apps are not in use, uncheck this option and check the [Allow Background Updates](/customise/preferences#allow-background-updates) option only.

    If you wish to disable *all updates*, this is the second of two settings that need to be unchecked along with the [Allow Background Updates](/customise/preferences#allow-background-updates) option.
  </Accordion>

  <Accordion title="Download Stagger Window" icon="timer">
    **Key:** `downloadStaggerWindow`

    <Info>**This key is set to `60` by default.**</Info>
    Sets a stagger window in minutes that spreads update downloads across your devices. Each device will randomly pick a time within this window to check for and download new updates after they are released. Increasing this value is recommended for large sites to reduce network load. The default and minimum value is 60 minutes and the maximum is 360 minutes (6 hours).

    <Note>Longer stagger windows (e.g., 6 hours) may directly impact compliance figures in the portal, as devices could take up to the configured window duration to download new updates after release.</Note>
  </Accordion>

  <Accordion title="Automatic Self Updates" icon="square-check">
    **Key:** `autoUpdate`

    <Info>**This key is set to `true` by default.**</Info>
    By default, Zappl will update itself when new major and point releases are available.

    If you wish to disable this and either stay on a specific Zappl version, or push out updates for Zappl manually, **uncheck** this option.
  </Accordion>

  <Accordion title="Automatically Install AppBar" icon="square-check">
    **Key:** `autoInstallAppBar`

    <Info>**This key is set to `true` by default.**</Info>
    When enabled, Zappl automatically installs the [AppBar](/appbar/introduction) menu bar application.

    Uncheck this option if you do not wish to use AppBar in your environment, or if you prefer to deploy AppBar manually.

    <Note>To customise AppBar preferences, refer to the [AppBar Preferences](/appbar/appbar-preferences) guide.</Note>
  </Accordion>

  <Accordion title="Enable Liquid Glass Effect" icon="wand-magic-sparkles">
    **Key:** `enableLiquidGlass`

    <Info>**This key is set to `true` by default.**</Info>
    When enabled, Zappl update prompts use the macOS Liquid Glass visual style introduced in macOS 26 Tahoe. Uncheck to use the standard flat appearance on all supported macOS versions.

    <Note>This option has no effect on macOS versions prior to macOS 26 Tahoe.</Note>
  </Accordion>

  <Accordion title="Allowed Installs" icon="list-ul">
    **Key:** `allowedAppInstalls`

    By default, all Apps within the Zappl [App Catalog](https://zappl.co/app-catalog/) are available for installs. If you prefer to limit which Apps can be installed by Zappl, specify the Apps you wish to allow in this array.

    You can specify as many unique identifiers as you wish, using the [App Catalog](https://zappl.co/app-catalog/) unique identifiers for each App.

    <Note>If you wish to allow installs for all Apps within the catalog with the exception of a select few Apps, skip configuring this setting and use the [Excluded Installs](/customise/preferences#excluded-installs) setting. If you specify an App in this list which is also in the [Excluded Installs](/customise/preferences#excluded-installs) list, the exclusion will override this setting.</Note>

    <Frame caption="Example | Only Zoom, Google Chrome and Microsoft Excel are allowed installs and any other App installs will not be allowed via Zappl.">
      <img src="https://mintcdn.com/daretechnology/U85uvC5AROFPwwzV/images/prefs-allowed-installs.webp?fit=max&auto=format&n=U85uvC5AROFPwwzV&q=85&s=875bf94d1385168c24c635e6d56f74aa" alt="Allowed Updates" width="350" data-path="images/prefs-allowed-installs.webp" />
    </Frame>
  </Accordion>

  <Accordion title="Excluded Installs" icon="ban">
    **Key:** `excludedAppInstalls`

    By default, all Apps within the Zappl [App Catalog](https://zappl.co/app-catalog/) are available for installs. If you wish to allow installs for all Apps in the catalog with the exception of only a few Apps, specify the Apps you wish to exclude in this array.

    You can specify as many unique App identifiers as you wish, using the [App Catalog](https://zappl.co/app-catalog/) unique identifiers for each App.

    <Note>If you wish to only allow installs for some specific Apps within our catalog, skip this setting and instead use the [Allowed Installs](/customise/preferences#allowed-installs) setting to create your allowed installations list. If you specify an App exclusion which is also in the [Allowed Installs](/customise/preferences#allowed-installs) list, only the exclusion will be respected.</Note>

    <Frame caption="Example | All Apps in the catalog can be installed by Zappl with the exception of WhatsApp and Facebook Messenger.">
      <img src="https://mintcdn.com/daretechnology/0YSFTXEnqR47NZF9/images/prefs-exclude-installs.webp?fit=max&auto=format&n=0YSFTXEnqR47NZF9&q=85&s=51690440b800bb68a1361824ef254183" alt="Allowed Updates" width="350" data-path="images/prefs-exclude-installs.webp" />
    </Frame>
  </Accordion>

  <Accordion title="Allowed Updates" icon="list-ul">
    **Key:** `allowedAppUpdates`

    By default, all Apps within the Zappl [App Catalog](https://zappl.co/app-catalog/) will be updated if installed. If you prefer to limit which Apps can be updated by Zappl, specify the Apps you wish to allow in this array.

    You can specify as many unique identifiers as you wish, using the [App Catalog](https://zappl.co/app-catalog/) unique identifiers for each App.

    <Note>If you wish to allow updates for all Apps within the catalog with the exception of a select few Apps, skip configuring this setting and use the [Excluded Updates](/customise/preferences#excluded-updates) setting. If you specify an App in this list which is also in the \[Excluded Updates]\(/customise/preferences#excluded-updates] list, the exclusion will override this setting.</Note>

    <Frame caption="Example | Zappl will only update Zoom, Google Chrome and Microsoft Excel and all other Apps will be ignored.">
      <img src="https://mintcdn.com/daretechnology/U85uvC5AROFPwwzV/images/prefs-allowed-updates.webp?fit=max&auto=format&n=U85uvC5AROFPwwzV&q=85&s=360adfd45e1a1113af01f72b7d3491f2" alt="Allowed Updates" width="350" data-path="images/prefs-allowed-updates.webp" />
    </Frame>
  </Accordion>

  <Accordion title="Excluded Updates" icon="ban">
    **Key:** `excludedAppUpdates`

    By default, all Apps within the Zappl [App Catalog](https://zappl.co/app-catalog/) will be updated if installed. If you wish to allow updates for all Apps in the catalog with the exception of only a few Apps, specify the Apps you wish to allow in this array.

    You can specify as many unique App identifiers as you wish, using the [App Catalog](https://zappl.co/app-catalog/) unique identifiers for each App.

    <Note>If you wish to only allow updates for some specific Apps within our catalog, skip this setting and instead use the [Allowed Updates](/customise/preferences#allowed-updates) setting to create your allowed update list. If you specify an exclusion App which is also in the [Allowed Updates](/customise/preferences#allowed-updates) list, only the exclusion will be respected.</Note>

    <Frame caption="Example | All Apps within the App Catalog will be updated by Zappl if installed, with the exception of Jamf Connect and Cato Client.">
      <img src="https://mintcdn.com/daretechnology/0YSFTXEnqR47NZF9/images/prefs-exclude-updates.webp?fit=max&auto=format&n=0YSFTXEnqR47NZF9&q=85&s=4537c959b6c4c4e30e9ed0c0d2cffaa4" alt="Allowed Updates" width="350" data-path="images/prefs-exclude-updates.webp" />
    </Frame>
  </Accordion>
</AccordionGroup>

<br />

#### ONLY Scheduled Update Prompt Options

<AccordionGroup>
  <Accordion title="Run Frequency Options" icon="filter-list">
    **Key:** `runFrequency.runType`

    Although the scheduled cached update check is run on a frequent basis every day, the preferences in the Run Frequency Options dictionary ensure that users are only prompted to install updates on a specified frequency, e.g. once every week.

    <br />

    First, use the **Run Frequency Option** dropdown to define a method of frequently prompting users to update.

    <img src="https://mintcdn.com/daretechnology/0YSFTXEnqR47NZF9/images/prefs-run-frequency.webp?fit=max&auto=format&n=0YSFTXEnqR47NZF9&q=85&s=e734c93aa30fbe4379e4833f3f331270" alt="Run Frequency Option" width="264" height="94" data-path="images/prefs-run-frequency.webp" />

    [`Specify Patch Frequency`](/customise/preferences#specify-patch-frequency-preferences)
    Select this option if you prefer not to tie the updates to a specified weekday and instead run updates on a recurring frequency, *e.g. once every day, once every week etc*.

    <br />

    [`Specify Recurring Patch Day`](/customise/preferences#specific-patch-day-preferences)
    Select this option if you want to specify a day of each week to prompt users if they have pending updates, *e.g. every Tuesday*.

    <br />

    When you select one of these two options, preferences that relate to each option automatically populate.

    <img src="https://mintcdn.com/daretechnology/0YSFTXEnqR47NZF9/images/prefs-run-frequency-gif.gif?s=052f90cff54443eb10d1917adea27e5c" alt="Run Frequency Options" width="536" height="356" data-path="images/prefs-run-frequency-gif.gif" />
  </Accordion>

  <Accordion title="Specific Patch Frequency Preferences" icon="timer">
    #### Frequency to Prompt Users

    **Key:** `runFrequency.frequencyOption`

    Use this dropdown to select how often you want to prompt users to update.

    <img src="https://mintcdn.com/daretechnology/0YSFTXEnqR47NZF9/images/prefs-prompt-user-freq.webp?fit=max&auto=format&n=0YSFTXEnqR47NZF9&q=85&s=7633524530a80e339d1cae035afe22c9" alt="Frequency to Prompt Users" width="252" height="149" data-path="images/prefs-prompt-user-freq.webp" />

    #### Frequency Elapsed Behaviour

    **Key:** `runFrequency.frequencyElapsedMode`

    This dropdown determines how Zappl should behave if the user defers the update. Selecting the `Single Prompt Mode` option will ensure that if the user defers the update, they will not get prompted to update again until the configured frequency has elapsed again, e.g. one week later.<br />Alternatively, select `Recurring Prompt Mode` if you prefer to prompt the user on a recurring basis after deferring until the update is installed.

    <img src="https://mintcdn.com/daretechnology/0YSFTXEnqR47NZF9/images/prefs-freq-elapsed.webp?fit=max&auto=format&n=0YSFTXEnqR47NZF9&q=85&s=9c1ebb7f2043538a421c31e4cf70796c" alt="Frequency Elapsed Behaviour" width="257" height="84" data-path="images/prefs-freq-elapsed.webp" />

    <Note>When selecting `Recurring Prompt Mode`, the 'Recurring Prompt Mode Deferral Window - Patch Frequency' field (**Key:** `runFrequency.deferralWindow`) appears and allows you to define a minimum deferral period in minutes. <img src="https://mintcdn.com/daretechnology/0YSFTXEnqR47NZF9/images/prefs-recur-prompt-deferral.webp?fit=max&auto=format&n=0YSFTXEnqR47NZF9&q=85&s=cf2d837b31f3d3ffff0bc98fa2042f0d" alt="Recurring Prompt Mode Deferral Window - Patch Frequency" width="680" height="103" data-path="images/prefs-recur-prompt-deferral.webp" /></Note>
  </Accordion>

  <Accordion title="Specific Patch Day Preferences" icon="calendar-day">
    #### Patch Day

    **Key:** `runFrequency.patchDay`

    Use this dropdown to select a day of the week to prompt users to update when updates are pending.

    <img src="https://mintcdn.com/daretechnology/0YSFTXEnqR47NZF9/images/prefs-patch-day.webp?fit=max&auto=format&n=0YSFTXEnqR47NZF9&q=85&s=b7a7fdf57b0733d09b520e16a0c9b5e6" alt="Patch Day" width="371" height="100" data-path="images/prefs-patch-day.webp" />

    #### Missed Update Prompts

    **Key:** `runFrequency.missedUpdatePrompt`

    Selecting this option ensures that if a computer is offline on the defined weekly patch day, the user can be prompted to update at the next available opportunity as opposed to waiting until the next patch day. Leave this **unchecked** if you prefer to ensure that prompts are only ever displayed on the configured patch day.

    <img src="https://mintcdn.com/daretechnology/0YSFTXEnqR47NZF9/images/prefs-missed-update-prompts.webp?fit=max&auto=format&n=0YSFTXEnqR47NZF9&q=85&s=e718a138c84200d0e41b193ef9c64187" alt="Missed Update Prompts" width="1562" height="186" data-path="images/prefs-missed-update-prompts.webp" />

    #### Patch Day Prompt Frequency

    **Key:** `runFrequency.patchDayFrequency`

    This dropdown helps you determine how frequently users are prompted to update on the configured patch day when they defer an update.<br />Selecting the `Single Prompt Mode` option ensures that when a user defers the update, they won't get prompted to update until the following week on the configured patch day.<br />If you prefer to prompt the user to update on a recurring basis on the configured patch day, select the `Recurring Prompt Mode` option. <img src="https://mintcdn.com/daretechnology/0YSFTXEnqR47NZF9/images/prefs-patch-day-prompt-freq.webp?fit=max&auto=format&n=0YSFTXEnqR47NZF9&q=85&s=4418000d886713502367bb4758838336" alt="Patch Day Prompt Frequency" width="260" height="91" data-path="images/prefs-patch-day-prompt-freq.webp" />

    <Note>When selecting `Recurring Prompt Mode`, the `Recurring Prompt Mode Deferral Window (Patch Day)` field (**Key:** `runFrequency.patchDayDeferralWindow`) appears and allows you to define a minimum deferral period in minutes. <img src="https://mintcdn.com/daretechnology/0YSFTXEnqR47NZF9/images/prefs-patch-day-prompt-recurring.webp?fit=max&auto=format&n=0YSFTXEnqR47NZF9&q=85&s=26236f53352a1a2074790cb9558413e7" alt="Patch Day Prompt Frequency (Recurring Prompt)" width="458" height="240" data-path="images/prefs-patch-day-prompt-recurring.webp" /></Note>

    <Warning>If Zappl finds no preferences configuration profile, the default behaviour is to prompt users to update **once every week** with **single prompt mode** enabled.</Warning>

    #### Week(s) of Month

    **Key:** `runFrequency.patchDayWeeks`

    Allows you to select specific weeks of the month to prompt users on your configured patch day. By default, all weeks are enabled. If you prefer to prompt users less frequently, e.g., only on the first monthly occurence of your desired patch day, uncheck all other weeks.
    <Note>This option requires at least version 2.0.0 of Zappl.</Note>

    <img src="https://mintcdn.com/daretechnology/FednuKf212fAPdci/images/weeks-of-month.webp?fit=max&auto=format&n=FednuKf212fAPdci&q=85&s=6315a48fd78740726d79b26705daa3ef" alt="Week(s) of Month" width="1626" height="984" data-path="images/weeks-of-month.webp" />
  </Accordion>

  <Accordion title="Deferral Options" icon="hourglass-clock">
    **Key:** `deferralConfiguration.deferralOption`

    <Info>Use this preference dictionary to configure your desired deferral behaviour.</Info>

    <Note>This preference is unique to the **Scheduled Update Prompt Options** dictionary. Deferral options for Forced Updates are configured when marking Apps for [Forced Updates](/apps/updates#forced-updates).</Note>

    #### Specify Deferral Limit

    **Key:** `deferralConfiguration.specifyLimit` (selected via `deferralConfiguration.deferralOption: specifyDeferralLimit`)

    Configuring a deferral limit for updates ensures that users cannot defer the update indefinitely. The deferral limit you configure here is how many times the user will be allowed to defer the update before being forced to install the update. Use the **Deferral Limit** field to specify your desired deferral limit.

    <img src="https://mintcdn.com/daretechnology/0YSFTXEnqR47NZF9/images/prefs-specify-deferral-limit.webp?fit=max&auto=format&n=0YSFTXEnqR47NZF9&q=85&s=0f01c5d6869e8f14408c61f8baf0ff4f" alt="Specify Deferral Limit" width="622" height="268" data-path="images/prefs-specify-deferral-limit.webp" />

    #### Disable Deferral Limit

    **Key:** `deferralConfiguration.deferralOption: disableDeferralLimit`

    Selecting this option will allow users to defer the update indefinitely. We recommend only using this option if you plan to create a workflow which utilises forcing the update on demand.

    <img src="https://mintcdn.com/daretechnology/U85uvC5AROFPwwzV/images/prefs-disable-deferral-limit.webp?fit=max&auto=format&n=U85uvC5AROFPwwzV&q=85&s=2c02adc0aeb39090d850c3c10023f197" alt="Disable Deferral Limit" width="620" height="151" data-path="images/prefs-disable-deferral-limit.webp" />

    #### Disable Deferrals

    **Key:** `deferralConfiguration.deferralOption: disableDeferrals`

    Selecting this option will mean that users will not be given any opportunity to defer and will instead be given a [Grace Period](/customise/preferences#grace-period) to save any work before the updates are automatically installed.

    <img src="https://mintcdn.com/daretechnology/U85uvC5AROFPwwzV/images/prefs-disable-deferrals.webp?fit=max&auto=format&n=U85uvC5AROFPwwzV&q=85&s=397ea4300c7bb9172a6aa566f355ab75" alt="Disable Deferrals" width="620" height="158" data-path="images/prefs-disable-deferrals.webp" />
  </Accordion>

  <Accordion title="Grace Period in Minutes" icon="hourglass-half">
    **Key:** `gracePeriodMinutes`

    <Info>This preference is unique to the **Scheduled Update Prompt Options** dictionary. Deferral options for Forced Updates are configured when marking Apps for [Forced Updates](/apps/updates#forced-updates).</Info>

    This is the amount of time in **minutes** a user is given to save work before updates install automatically when deferrals are either not available or not configured.<br />By default this value is `15` minutes, therefore you only need to configure this preference if you wish to decrease or increase the default grace period.

    <img src="https://mintcdn.com/daretechnology/0YSFTXEnqR47NZF9/images/prefs-grace-period.webp?fit=max&auto=format&n=0YSFTXEnqR47NZF9&q=85&s=81a89bc5163819bad2e960185710e617" alt="Grace Period (Minutes)" width="611" height="175" data-path="images/prefs-grace-period.webp" />
  </Accordion>

  <Accordion title="Multiple Apps Prompt Title" icon="text">
    **Key:** `multipleAppsTitle`

    <Info>This preference is only present in the **Scheduled Update Prompt Options** dictionary. This is because Forced Updates are always performed on a per-App basis, therefore all forced update prompts relate to a single App.</Info>

    Use this preference to customise the default title shown on any update prompt when more than one App updates are pending.

    <img src="https://mintcdn.com/daretechnology/U85uvC5AROFPwwzV/images/prefs-custom-multi-app-title.webp?fit=max&auto=format&n=U85uvC5AROFPwwzV&q=85&s=5da2e207bb78f80f81ba6cd908df508e" alt="Custom Multiple Apps Title" width="556" height="169" data-path="images/prefs-custom-multi-app-title.webp" />
  </Accordion>

  <Accordion title="App List Type" icon="bars">
    **Key:** `appListType`

    <Info>This preference is only present in the **Scheduled Update Prompt Options** dictionary. This is because Forced Updates are performed on a per-App basis and therefore do not contain App lists.</Info>

    This preference determines how to list Apps that have pending updates on the update prompts displayed to the user.

    <img src="https://mintcdn.com/daretechnology/U85uvC5AROFPwwzV/images/prefs-app-list-type.webp?fit=max&auto=format&n=U85uvC5AROFPwwzV&q=85&s=0cb86ee90479f87a772fc030bf0a8320" alt="App List Type" width="267" height="192" data-path="images/prefs-app-list-type.webp" />

    #### Vertical List

    **Key:** `appListType: vertical`

    <Note>This is the default setting.</Note>
    When configured, Apps will be displayed at the bottom of the prompt in a vertical scrollable list along with their icon and the pending version that will be installed by the update.

    <img src="https://mintcdn.com/daretechnology/zJ8P2KQON8JWH5bQ/images/prefs-app-list-vertical.webp?fit=max&auto=format&n=zJ8P2KQON8JWH5bQ&q=85&s=adc5c6a99fce3679ba691011f16327b0" alt="Vertical List UX" width="1272" height="842" data-path="images/prefs-app-list-vertical.webp" />

    #### Horizontal List

    **Key:** `appListType: horizontal`

    Select this option if you prefer to display Apps in a basic comma separated list.

    <img src="https://mintcdn.com/daretechnology/zJ8P2KQON8JWH5bQ/images/prefs-app-list-horizontal.webp?fit=max&auto=format&n=zJ8P2KQON8JWH5bQ&q=85&s=6a6ddfaca4ad12ee07e0c4f738729a7b" alt="Horizontal List UX" width="1272" height="570" data-path="images/prefs-app-list-horizontal.webp" />
  </Accordion>
</AccordionGroup>

<br />

#### Scheduled **AND** Forced Update Prompt Options

<AccordionGroup>
  <Accordion title="Run Limitation Options" icon="gear">
    **Key:** `runLimitations`

    You can use the Run Limitation Options dictionary to apply exclusions to the frequency options you previously configured for **Scheduled Updates**. The same options are also available in the **Forced Updates** dictionary to allow you to limit when Zappl is permitted to prompt users to update any Apps that have been marked for forced updates.<br />A checkbox is available and by default ticked for each day of the week. If there is a particular day of the week you want to ensure update prompts are never displayed to the user, simply **uncheck** the box next to the day. This is useful when using the [Specify Patch Frequency](/customise/preferences#specific-patch-frequency-preferences) option, or when specifying a patch day with the [Missed Update Prompts](/customise/preferences#specific-patch-day-preferences) option checked.

    <img src="https://mintcdn.com/daretechnology/0YSFTXEnqR47NZF9/images/prefs-run-limits-checkbox.webp?fit=max&auto=format&n=0YSFTXEnqR47NZF9&q=85&s=2317257c2c7aac50e7dc8414fc2af996" alt="Run Limitation Options" width="373" height="66" data-path="images/prefs-run-limits-checkbox.webp" />

    <Note>If you have specified a weekly patch day, and that patch day is then *unchecked* in the run limitation options, the run limitation for that day will be ignored and the user will still be prompted to update on the configured patch day.</Note>

    Each day also offers the option to define an allowed update time window. Selecting an allowed time window means that whenever Zappl runs outside of that window, update prompts will be skipped and Zappl will exit with no further action.<br />By default, the start time is `12.00am` and the end time is `11.59pm`, but you can easily change this on a per-day basis by modifying the values in the fields.

    <img src="https://mintcdn.com/daretechnology/0YSFTXEnqR47NZF9/images/prefs-run-limits-allowed-time.webp?fit=max&auto=format&n=0YSFTXEnqR47NZF9&q=85&s=ea3e27e67b3b7b2e38b59c41d38b7c0e" alt="Run Limitation - Allowed Update Times" width="1676" height="494" data-path="images/prefs-run-limits-allowed-time.webp" />

    If you want to define an exclusion time window, e.g. do not prompt between `2pm` and `4pm` but allow prompts for the rest of the day, simply reverse the timestamps as shown below.

    <img src="https://mintcdn.com/daretechnology/0YSFTXEnqR47NZF9/images/prefs-run-limits-excluded-time.webp?fit=max&auto=format&n=0YSFTXEnqR47NZF9&q=85&s=9525cf467ef6fecf9923624298df8929" alt="Run Limitation - Excluded Update Times" width="1692" height="504" data-path="images/prefs-run-limits-excluded-time.webp" />
  </Accordion>

  <Accordion title="Icon" icon="wand-magic-sparkles">
    **Key:** `customIcon`

    By default, the icon displayed on the left hand side of the update prompts is your **Jamf Self Service icon** for *scheduled updates*, and the **App icon** for *forced updates*.

    <img src="https://mintcdn.com/daretechnology/zJ8P2KQON8JWH5bQ/images/prefs-custom-icon.webp?fit=max&auto=format&n=zJ8P2KQON8JWH5bQ&q=85&s=6cb0cf1cc2092af3bd9e5b34eac5375d" alt="Custom Icon" width="1272" height="842" data-path="images/prefs-custom-icon.webp" />

    If you wish to change this to a different image, specify the path of an image to use in this field.

    <img src="https://mintcdn.com/daretechnology/U85uvC5AROFPwwzV/images/prefs-custom-icon-path.webp?fit=max&auto=format&n=U85uvC5AROFPwwzV&q=85&s=db8d1102ebad30662a4a5eda5a9f5d53" alt="Custom Icon Path" width="508" height="162" data-path="images/prefs-custom-icon-path.webp" />
  </Accordion>

  <Accordion title="Initial Prompt Icon Overlay" icon="wand-magic-sparkles">
    **Key:** `initialPromptOverlayIcon`

    Configuring this option allows you to overlay a second icon on the bottom right corner of the main icon.

    By default, no icon overlay is configured, but you can specify a valid `.png`, .`jpg` or `.icns` file here to add one. To use the Jamf Self Service icon as the overlayed icon, type in `selfService`.

    <Frame caption="Here we're using this feature with a custom info icon.">
      <img src="https://mintcdn.com/daretechnology/zJ8P2KQON8JWH5bQ/images/prefs-initial-prompt-icon-overlay.webp?fit=max&auto=format&n=zJ8P2KQON8JWH5bQ&q=85&s=f8e81cb2a602c74e20c30e19fda9eab7" alt="Initial Prompt Icon Overlay UX" width="912" height="538" data-path="images/prefs-initial-prompt-icon-overlay.webp" />
    </Frame>
  </Accordion>

  <Accordion title="Single App Prompt Title" icon="wand-magic-sparkles">
    **Key:** `singleAppTitle`

    Use this preference to customise the default title shown on any update prompt when there is 1 pending App update. You can define the name of the App using the `appName` variable.

    <img src="https://mintcdn.com/daretechnology/U85uvC5AROFPwwzV/images/prefs-custom-single-app-title.webp?fit=max&auto=format&n=U85uvC5AROFPwwzV&q=85&s=aca3ea5862f49a66a3cd86d1d91125a2" alt="Single App Prompt Title" width="516" height="167" data-path="images/prefs-custom-single-app-title.webp" />

    <Note>In the **Forced Update** options dictionary, this preference uses the key `customTitle` and is labelled `Title`. This is because forced updates are always performed on a per-App basis, so all forced update prompts relate to a single App.</Note>
  </Accordion>

  <Accordion title="Show Info Button" icon="circle-info">
    **Key:** `showInfoButton`

    <Info>**This key is set to `true` by default.**</Info>
    When enabled, an info button is displayed on update prompts. Clicking this button opens a popover containing additional context about the update, such as what the update process involves and how deferrals work.

    Set this to `false` to hide the info button from all prompts.

    <img src="https://mintcdn.com/daretechnology/zJ8P2KQON8JWH5bQ/images/prefs-info-button.webp?fit=max&auto=format&n=zJ8P2KQON8JWH5bQ&q=85&s=175e66c2480b18e345d9e053c2913db3" alt="Prompt Info Button" width="1272" height="842" data-path="images/prefs-info-button.webp" />
  </Accordion>

  <Accordion title="Initial Prompt Info Popover" icon="circle-info">
    **Key:** `initialPromptInfoPopover`

    Use this preference to customise the text displayed in the info popover on the **initial update prompt** — the prompt shown when deferrals are available.

    If not configured, a default message is displayed that explains the update process and deferral behaviour.

    When writing your custom message, you can use formatting and variables to personalise the content. For all available options, see [Message Variables](/customise/message-variables).

    <img src="https://mintcdn.com/daretechnology/zJ8P2KQON8JWH5bQ/images/prefs-initial-info-popover.webp?fit=max&auto=format&n=zJ8P2KQON8JWH5bQ&q=85&s=22a5aa9496e21c5957bb27d59686eebb" alt="Initial Prompt Info Popover" width="1528" height="842" data-path="images/prefs-initial-info-popover.webp" />

    <Note>This preference is available in both the **Scheduled** and **Forced Update** options dictionaries.</Note>
  </Accordion>

  <Accordion title="Grace Period Prompt Info Popover" icon="circle-info">
    **Key:** `gracePeriodPromptInfoPopover`

    Use this preference to customise the text displayed in the info popover on the **grace period prompt** — the prompt shown when no deferrals are available and the countdown timer is active.

    If not configured, a default message is displayed that explains the update process.

    When writing your custom message, you can use formatting and variables to personalise the content. The `gracePeriod` variable is particularly useful here as it dynamically displays the configured grace period duration. For all available options, see [Message Variables](/customise/message-variables).

    <img src="https://mintcdn.com/daretechnology/zJ8P2KQON8JWH5bQ/images/prefs-graceperiod-info-popover.webp?fit=max&auto=format&n=zJ8P2KQON8JWH5bQ&q=85&s=712c7657551360292a89baeb37a9cbed" alt="Grace Period Prompt Info Popover" width="1528" height="850" data-path="images/prefs-graceperiod-info-popover.webp" />

    <Note>This preference is available in both the **Scheduled** and **Forced Update** options dictionaries.</Note>
  </Accordion>

  <Accordion title="Defer Button Label" icon="arrow-pointer">
    **Key:** `customDeferButton`

    Use this preference to change the label on the button used to defer updates.

    <img src="https://mintcdn.com/daretechnology/U85uvC5AROFPwwzV/images/prefs-custom-defer-button.webp?fit=max&auto=format&n=U85uvC5AROFPwwzV&q=85&s=84b29ff563d1d8965d94e21a21050634" alt="Defer Button Label" width="430" height="160" data-path="images/prefs-custom-defer-button.webp" />
  </Accordion>

  <Accordion title="Update Button Label" icon="arrow-pointer">
    **Key:** `customUpdateButton`

    Use this preference to change the label on the button used to run updates.

    <img src="https://mintcdn.com/daretechnology/U85uvC5AROFPwwzV/images/prefs-custom-update-button.webp?fit=max&auto=format&n=U85uvC5AROFPwwzV&q=85&s=516318c793038be54138cdea15f9b495" alt="Update Button Label" width="482" height="168" data-path="images/prefs-custom-update-button.webp" />
  </Accordion>

  <Accordion title="Prompt Refresh Interval" icon="rotate">
    **Key:** `refreshInterval`

    This is the length of time in seconds that the update prompts pull focus. Without the prompts regularly pulling focus, it is easy for the user to swipe away and ignore the update prompt without choosing to either defer or update.

    The default value is `60` seconds. If you find this too aggressive, you can change the value to suit your needs. The minimum allowed value is `30` seconds.
  </Accordion>

  <Accordion title="Do Not Disturb Applications" icon="snooze">
    **Key:** `acceptableAppBundleIDs`

    Use this preference to define any Apps which if detected as being in the foreground will cause the update prompt to skip.<br />It is recommended that you configure this preference and add any video conferencing or presentation software used across your estate. This will ensure that users don't get prompted to update whilst on a conference call or when presenting.<br />To define an App, you must first get the bundle identifier of the App. To do so, paste the below command into Terminal on a macOS computer that has the App installed (replacing `zoom.us.app` with the name of the App you want to define).

    ```bash theme={null}
    defaults read /Applications/zoom.us.app/Contents/Info.plist CFBundleIdentifier
    ```

    Copy the resulting bundle identifier to your clipboard and paste it into the `Do Not Disturb Application Bundle ID` preference. You can add as many App bundle identifiers as you require by clicking the **Add Do Not Disturb Application Bundle ID** button.

    <img src="https://mintcdn.com/daretechnology/U85uvC5AROFPwwzV/images/prefs-dnd-apps.webp?fit=max&auto=format&n=U85uvC5AROFPwwzV&q=85&s=ebde6808a8870fc77e08bad9bd9658ab" alt="DND Applications" width="881" height="467" data-path="images/prefs-dnd-apps.webp" />
  </Accordion>

  <Accordion title="Do Not Disturb Application Assertions" icon="snooze">
    **Key:** `acceptableAppAssertions`

    <Tip>An **application assertion** is when an app actively declares that it needs to use a specific system resource, like the microphone, camera, or location services.</Tip>

    Use this preference to ensure that updates are skipped if an application is using assertions. If an application is using the system microphone or playing audio, it should be marked as using assertions.<br />This is useful in scenarios where a user may be in a meeting using a web-based client like Google Meets without a camera on, as the assertion used by the web browser would prevent the update from interrupting the meeting.<br />You can add as many assertion apps as you wish, ensuring to use the correct assertion name format. To get the required assertion name format, run `/usr/bin/pmset -g assertions` in Terminal while the application is running and using assertions.

    <img src="https://mintcdn.com/daretechnology/U85uvC5AROFPwwzV/images/prefs-dnd-app-assertions.webp?fit=max&auto=format&n=U85uvC5AROFPwwzV&q=85&s=7491bd2affd77bd4e88008585453baec" alt="DND Application Assertions" width="883" height="296" data-path="images/prefs-dnd-app-assertions.webp" />
  </Accordion>

  <Accordion title="Respect Do Not Disturb Mode" icon="snooze">
    **Key:** `acceptableDNDMode`

    <Info>**This key is set to `true` by default.**</Info>
    Use this preference to ensure that if macOS Do Not Disturb mode is enabled, update prompts are skipped.<br />Setting this as `true` will skip the update prompts, setting as `false` will prompt users while Do Not Disturb mode is detected.
  </Accordion>

  <Accordion title="Do Not Disturb Camera Usage" icon="snooze">
    **Key:** `acceptableCameraUsage`

    <Info>**This key is set to `true` by default.**</Info>
    Use this preference to ensure that if the camera is detected as being actively in use, the update will be skipped.<br />We recommend setting this as `true` to ensure that users are not interrupted whilst on conference calls.
  </Accordion>

  <Accordion title="Do Not Disturb Screen Sharing" icon="snooze">
    **Key:** `acceptableScreenSharing`

    <Info>**This key is set to `true` by default.**</Info>
    Use this preference to ensure that if screen sharing is detected as being actively in use, the update will be skipped.
  </Accordion>

  <Accordion title="Show Update Progress Prompt" icon="wand-magic-sparkles">
    **Key:** `updateProgressPrompt`

    <Info>**This key is set to `true` by default.**</Info>
    When enabled, a small progress prompt is displayed in the corner of the screen while updates are being installed. Disable to run updates silently without any progress indicator.

    <img src="https://mintcdn.com/daretechnology/zJ8P2KQON8JWH5bQ/images/prefs-update-progress-prompt-ux.webp?fit=max&auto=format&n=zJ8P2KQON8JWH5bQ&q=85&s=0b9b9cc4191b7d28e0f142baecee381d" alt="Show Update Progress Prompt" width="772" height="204" data-path="images/prefs-update-progress-prompt-ux.webp" />
  </Accordion>

  <Accordion title="Update Progress Prompt Position" icon="wand-magic-sparkles">
    **Key:** `updateProgressPosition`

    The update progress prompt is the small prompt that contains an update progress bar and information around the update whilst the update is running.

    <img src="https://mintcdn.com/daretechnology/zJ8P2KQON8JWH5bQ/images/prefs-update-progress-prompt-ux.webp?fit=max&auto=format&n=zJ8P2KQON8JWH5bQ&q=85&s=0b9b9cc4191b7d28e0f142baecee381d" alt="Update Progress Prompt UX" width="772" height="204" data-path="images/prefs-update-progress-prompt-ux.webp" />

    The default position of this prompt is the `top right` corner of the screen. This position can be modified using the dropdown within this preference.

    <img src="https://mintcdn.com/daretechnology/0YSFTXEnqR47NZF9/images/prefs-update-progress-prompt.webp?fit=max&auto=format&n=0YSFTXEnqR47NZF9&q=85&s=45d703d2edf9ba987c34b7e6d9067df2" alt="Update Progress Prompt Options" width="655" height="378" data-path="images/prefs-update-progress-prompt.webp" />
  </Accordion>

  <Accordion title="Update Progress Prompt Overlay Icon" icon="wand-magic-sparkles">
    **Key:** `updateProgressOverlayIcon`

    Use this preference to add an overlay icon to the update progress prompts. When updates are running, the main icon displayed is the icon for the App currently being updated. The overlay icon will be displayed on the bottom right corner of the App icon.<br />You can specify either a path to a valid `.png`, `.jpg` or `.icns` file, or use the `selfService` variable for the Jamf Self Service icon.

    <img src="https://mintcdn.com/daretechnology/zJ8P2KQON8JWH5bQ/images/prefs-update-progress-overlay-icon-ux.webp?fit=max&auto=format&n=zJ8P2KQON8JWH5bQ&q=85&s=f25f55ba79799a73c250630c1d0a8a88" alt="Update Progress Prompt Overlay Icon UX" width="772" height="204" data-path="images/prefs-update-progress-overlay-icon-ux.webp" />
  </Accordion>

  <Accordion title="Automatically Relaunch Apps" icon="browser">
    **Key:** `autoRelaunchApps`

    <Info>**This key is set to `true` by default.**</Info>
    With this set as `true`, Zappl silently relaunches the app as soon as the update completes providing that the app was in use prior to the update.<br />Set this as `false` to skip relaunching apps.
  </Accordion>

  <Accordion title="Send Completion Notification" icon="check">
    **Key:** `displayCompletePrompt`

    <Info>**This key is set to `true` by default.**</Info>
    When enabled, a macOS notification is sent to the user once all updates are complete. Disable to suppress the completion notification.

    <img src="https://mintcdn.com/daretechnology/zJ8P2KQON8JWH5bQ/images/prefs-complete-message.webp?fit=max&auto=format&n=zJ8P2KQON8JWH5bQ&q=85&s=d6ce8bbd26b57312726f897ed4c0beb7" alt="Send Completion Notification" width="756" height="288" data-path="images/prefs-complete-message.webp" />
  </Accordion>
</AccordionGroup>
