Skip to main content
Granola releases updates about twice a week, and the desktop app is built to install them itself. On many devices you don’t need to manage updates at all. This guide helps you work out whether your setup needs managed updates, and how to set them up if it does. To configure other app settings with MDM, see Configure Granola with MDM.

How Granola updates itself

While Granola is running, it checks for a new version about every 10 minutes and downloads it in the background. It installs the update when it can restart without getting in anyone’s way: not while someone is recording or transcribing a meeting, and not while they’re actively using the app. This only works if the signed-in person is allowed to replace Granola’s app files, which usually means they installed Granola themselves. Whether they can depends on how Granola was installed:

Why Granola needs to stay up to date

We regularly release new features, performance improvements, bug fixes and security updates, and we want everyone to get them as soon as possible. We usually release twice a week. If you set up managed updates as described below, these updates won’t disrupt anyone: they install in the background while people aren’t using Granola. We don’t currently support updating on a slower schedule. If Granola falls behind the current release, people are prompted to update:
  • More than 4 weeks out of date: people see a prompt asking them to update. They can choose Later for now.
  • More than 6 weeks out of date: Granola can’t be used until it’s updated.
If the people using your devices can’t install updates themselves, they can’t act on these prompts and need you to update Granola for them. So if you turn off Granola’s built-in updater, make sure the managed update script below is running. It’s what keeps Granola current.

Set up managed updates on macOS

Managed updates replace Granola’s built-in updater with a script that your MDM runs as root. Because the script has admin rights, nobody sees a password prompt. You’ll set up three things:
  1. The latest version of Granola, installed by your MDM.
  2. A managed setting, DisableAutoUpdate, that turns off the built-in updater so the two updaters don’t compete.
  3. The Granola update script, run by your MDM every 15 minutes.

What the script does

Each time it runs, the script makes one attempt to update Granola:
  1. It checks for a newer production release of Granola, the same version people get from granola.ai. If Granola is already current, it stops.
  2. If Granola isn’t running, it installs the update straight away.
  3. If Granola is running, it asks Granola whether now is a good time. Granola only agrees when nobody is recording or transcribing, using the Granola camera, or actively using the app. Granola then quits, the update installs, and Granola reopens.
  4. If now isn’t a good time, the script leaves Granola alone and exits. It tries again on its next run.
Running every 15 minutes means updates install soon after release, in a gap between meetings, without interrupting anyone. A less frequent schedule doesn’t make updates less disruptive. It makes them less likely to happen. A once-a-day run during working hours often lands while someone is in a meeting, so the update is skipped until the next day, and possibly the day after. Devices then drift out of date and reach the update prompts.

Step 1: Deploy the latest version of Granola

Before you turn on managed updates, use your MDM to deploy the latest version of Granola to every Mac. Download it from https://api.granola.ai/v1/download-latest. Do this even on Macs that already have Granola. The script can only update Granola 7.466.0 or later, and people who installed Granola a while ago may be on an older version. The script also checks that:
  • Granola is installed at /Applications/Granola.app, not in another folder or as an alias.
  • The app is owned by root and standard users can’t change it.
MDM deployments normally meet these requirements. If someone installed Granola themselves by dragging it into Applications, the app belongs to them rather than root, so deploy over it. To check a Mac, run:
The output should look like root drwxr-xr-x.

Step 2: Turn off Granola’s built-in updater

Deploy a configuration profile with this setting:
  • Preference domain: com.granola.app
  • Key: DisableAutoUpdate
  • Type: Boolean
  • Value: true
Deploy it at the device (computer) level, not to users. The script reads the device-level setting and won’t run without it. If you already deploy a com.granola.app profile, for example to set DisableOAuth, add DisableAutoUpdate to that profile instead of creating a second one. Some MDMs ask for a property list for the preference domain. Use this one:
Others ask for a complete configuration profile. Save this one as a .mobileconfig file:

Step 3: Add the update script

Add this script to your MDM exactly as it is. It doesn’t take any parameters. It’s a short launcher: it checks that the installed Granola app is genuine, then runs the full updater that ships inside the app.

Step 4: Set it up in your MDM

Deploy the profile from Step 2, then schedule the script from Step 3 to run as root every 15 minutes on the same Macs. Use only this script to update Granola. If your MDM has an app catalog or patching feature that also updates Granola, turn it off for Granola, because those tools don’t use Granola’s checks for meetings in progress. Don’t add a step that quits Granola, either. The script handles that safely.
Profile: In Computers > Configuration Profiles, create a profile with an Application & Custom Settings payload. Choose Upload, set the preference domain to com.granola.app, and upload the property list. Set the profile’s level to Computer Level.Script:
  1. In Settings > Computer Management > Scripts, add the update script.
  2. In Computers > Policies, create a policy and add the script to it.
  3. Set the trigger to Recurring Check-in and the execution frequency to Ongoing.
  4. Scope the policy to the Macs that have the profile.
  5. In Settings > Computer Management > Check-in, set the check-in frequency to Every 15 minutes.
The check-in frequency applies to all policies in your Jamf instance. If yours is set to a longer interval, the Granola policy runs on that schedule instead.
Profile: Add a Custom Profile Library Item, upload the .mobileconfig file, and assign it to your Blueprints.Script:
  1. Add a Custom Script Library Item and assign it to the same Blueprints.
  2. Set Execution Frequency to Run every 15 min.
  3. Paste the update script into Audit Script. Leave Remediation Script turned off.
Iru always runs custom scripts as root, so there’s nothing else to set.
Profile: In Devices > macOS > Configuration, create a policy from the Preference file template. Set the preference domain name to com.granola.app, upload the property list, and assign the policy to your Macs.Script:
  1. In Devices > macOS > Scripts, add a script and upload the update script as a .sh file.
  2. Set Run script as signed-in user to No, so it runs as root.
  3. Set Script frequency to Every 15 minutes.
  4. Set Hide script notifications on devices to Yes. Otherwise people see an “IT is configuring your computer” notification every 15 minutes.
  5. Assign the script to the same Macs as the profile.
Intune only reports the result of the script’s first run. To check later runs, look at the logs on the Mac. See Confirm managed updates are working.
Profile: Create a Mac policy from the MDM Custom Configuration Profile template, upload the .mobileconfig file, and apply it to your Macs.Script:
  1. In Device Management > Commands, create a command with the type Mac.
  2. Set Run As to root, and paste the update script into the command field.
  3. Set Event to Run as Repeating, repeating by Minute, every 15.
  4. Set Timeout After to at least 1800 seconds, so a slow download isn’t cut off.
  5. Bind the command to the same Macs as the profile.
Profile: In IT > Device Management > Configurations, upload the .mobileconfig file on the macOS tab, then deploy it to your Macs. Upload it from a Mac, because Rippling may not save .mobileconfig uploads from other operating systems.Script: Add the update script as a custom Bash script, choose a Recurring schedule, and target the same Macs. Rippling runs custom scripts as root. Choose a 15-minute interval if it’s offered, or the shortest one available.
Managed updates work with any MDM, including Mosyle, Addigy, Omnissa Workspace ONE and FleetDM, as long as it can:
  • Deploy a device-level configuration profile or managed preference for com.granola.app.
  • Run a script as root every 15 minutes.
  • Let the script run for up to 30 minutes, since downloading and installing an update can take a while on a slow connection.

Confirm managed updates are working

Run the script on a test Mac, then check its output in your MDM’s logs. To run it straight away, use sudo jamf policy in Jamf Pro or sudo iru run in Iru. Each line of output starts with [Granola updater launcher] or [Granola updater], and errors start with ERROR:.

Windows

Granola’s Windows installer installs Granola for the person who runs it, in their own AppData\Local\Programs folder. They own those files, so Granola can update itself without admin rights or an approval prompt. You don’t need to manage updates on Windows.

Deploy Granola to Windows PCs

Run the installer as the signed-in person rather than as the system, so Granola is installed into their profile. For example, in Microsoft Intune, add it as a Windows app (Win32) with Install behavior set to User. To install silently, add /S:
Download the latest installer from https://api.granola.ai/v1/download-latest-windows.

If Granola is in C:\Program Files

Granola doesn’t support installing for all users on Windows. If Granola was installed into C:\Program Files, for example by passing a custom install folder, people need admin approval for every update, so Granola falls behind and eventually stops working. Uninstall that copy, then deploy Granola for each person. From then on, Granola keeps itself up to date.