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.
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:- The latest version of Granola, installed by your MDM.
- A managed setting,
DisableAutoUpdate, that turns off the built-in updater so the two updaters don’t compete. - 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:- It checks for a newer production release of Granola, the same version people get from granola.ai. If Granola is already current, it stops.
- If Granola isn’t running, it installs the update straight away.
- 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.
- If now isn’t a good time, the script leaves Granola alone and exits. It tries again on its next run.
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 fromhttps://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.
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
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:
.mobileconfig file:
granola-managed-updates.mobileconfig
granola-managed-updates.mobileconfig
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.Granola update script
Granola update script
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.Jamf Pro
Jamf Pro
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:- In Settings > Computer Management > Scripts, add the update script.
- In Computers > Policies, create a policy and add the script to it.
- Set the trigger to Recurring Check-in and the execution frequency to Ongoing.
- Scope the policy to the Macs that have the profile.
- In Settings > Computer Management > Check-in, set the check-in frequency to Every 15 minutes.
Iru (formerly Kandji)
Iru (formerly Kandji)
Profile: Add a Custom Profile Library Item, upload the
.mobileconfig file, and assign it to your Blueprints.Script:- Add a Custom Script Library Item and assign it to the same Blueprints.
- Set Execution Frequency to Run every 15 min.
- Paste the update script into Audit Script. Leave Remediation Script turned off.
Microsoft Intune
Microsoft Intune
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:- In Devices > macOS > Scripts, add a script and upload the update script as a
.shfile. - Set Run script as signed-in user to No, so it runs as root.
- Set Script frequency to Every 15 minutes.
- Set Hide script notifications on devices to Yes. Otherwise people see an “IT is configuring your computer” notification every 15 minutes.
- Assign the script to the same Macs as the profile.
JumpCloud
JumpCloud
Profile: Create a Mac policy from the MDM Custom Configuration Profile template, upload the
.mobileconfig file, and apply it to your Macs.Script:- In Device Management > Commands, create a command with the type Mac.
- Set Run As to root, and paste the update script into the command field.
- Set Event to Run as Repeating, repeating by Minute, every 15.
- Set Timeout After to at least
1800seconds, so a slow download isn’t cut off. - Bind the command to the same Macs as the profile.
Rippling
Rippling
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.Other MDM tools
Other MDM tools
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, usesudo 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 ownAppData\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:
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 intoC:\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.
