A native macOS app to generate Microsoft Edge Managed Favorites configuration files for enterprise deployment via Group Policy (GPO) and Microsoft Intune.
All code come from Atlassian Rovo Dev (anthropic.claude-sonnet-4-5-20250929-v1:0)

This app helps IT administrators create and manage Microsoft Edge favorites that can be deployed to users across an organization. It generates properly formatted configuration files for:
- Windows devices (via Group Policy or Intune) — device-wide
- macOS devices (via Intune) — device-wide
- A specific audience, any platform (via the Edge management service's Cloud Policy) — per-profile, assignable to an Entra ID group, works on Windows/macOS/iOS/Android from one policy
The first two channels write into the OS-level Managed Preferences domain, so every browser profile on the device gets the same favorites. The Cloud Policy channel is resolved per the identity signed into the Edge profile instead, so it's the one to reach for when only part of your organization should get a given set of favorites. See Deployment Scenarios below.
Instead of manually creating complex JSON or Plist files, you use a simple, intuitive interface to:
- Add favorites (name + URL)
- Generate configuration files automatically
- Copy or export them for deployment
- 🎨 Native macOS Design - Modern, fluid interface with animations
- ⌨️ Keyboard Shortcuts - Fast workflow (⌘N to add, ⌘S to export, ⌘⇧C to copy)
- 💾 Persistent Storage - Your favorites are saved automatically
- 📋 Multiple Formats - Generates JSON (Windows GPO/Settings Catalog, Cloud Policy) and Plist (macOS Intune), switchable via tabs in the output panel
- 🎯 Target Groups - Maintain extra favorites for a specific audience (e.g. an Entra group) alongside the base set, either merged in as a subfolder or replacing the base set for that audience — exported as its own ready-to-paste Cloud Policy value
- 🗂️ Profiles - Keep several fully independent environments (e.g. "OnPrem", "HomeOffice") in one app, each with its own favorites, target groups, and toplevel name — switch via the sidebar
- 🚀 Export Ready - One-click export or copy to clipboard
- ⚙️ Configurable - Customize each profile's toplevel name
- macOS 15.0 (Sequoia) or later
- Xcode 16 or later (for building from source)
- Download the latest release from GitHub Releases
- Unzip
ManagedFavsGenerator-vX.X.X.zip - Move
ManagedFavsGenerator.appto your Applications folder - Launch the app
# Clone the repository
git clone <repository-url>
cd ManagedFavsGenerator
# Build
swift build -c release
# Run
.build/release/ManagedFavsGeneratorOr open Package.swift in Xcode and press ⌘R.
Since this app is not notarized by Apple, macOS Gatekeeper will block it on first launch. You need to allow it manually.
Remove the quarantine attribute to bypass Gatekeeper:
# Navigate to where you saved the app
cd ~/Downloads
# Remove quarantine flag
xattr -cr ManagedFavsGenerator.app
# Now open normally
open ManagedFavsGenerator.appExplanation:
xattr= Extended attributes tool-c= Clear all attributes-r= Recursive (for app bundles)
- Try to open
ManagedFavsGenerator.app - macOS shows: "ManagedFavsGenerator.app can't be opened because it is from an unidentified developer"
- Click OK
- Open System Settings → Privacy & Security
- Scroll down to Security section
- Click Open Anyway next to the blocked app message
- Click Open in the confirmation dialog
- App will launch successfully
Screenshot:
System Settings → Privacy & Security
┌─────────────────────────────────────────┐
│ Security │
│ "ManagedFavsGenerator.app" was blocked │
│ [Open Anyway] │
└─────────────────────────────────────────┘
- Right-click (or Control-click) on
ManagedFavsGenerator.app - Select Open from context menu
- macOS shows modified dialog with Open button
- Click Open
- App will launch and be remembered for future launches
Verify the download integrity using checksums:
# Download checksums
curl -L -O https://github.com/dernerl/ManagedFavsGenerator/releases/download/vX.X.X/checksums.txt
# Verify ZIP file
shasum -a 256 ManagedFavsGenerator-vX.X.X.zip
cat checksums.txt
# Both SHA-256 hashes should matchThe screenshots below predate the profile sidebar and tabbed layout introduced after v1.1.0 — button locations described in the text are current, refreshed screenshots are pending.
The left-hand rail lists your profiles — fully independent environments (e.g. "OnPrem", "HomeOffice"), each with its own favorites, target groups, and toplevel name. Nothing is shared between them.
- Click a profile's avatar to switch to it
- Click + at the bottom of the rail to create a new one
- Right-click a profile to Rename or Delete it (a profile's favorites and target groups are deleted with it; you always keep at least one)
With the Favorites tab selected in the left pane, press ⌘N or click Add Favorite:
- Name: Display name (e.g., "Company Portal")
- URL: Full URL including
https://
Add Folders
Press ⌘⇧N or click Add Folder to organize favorites hierarchically (one level deep).

Import existing configurations from other sources or backups — into the currently active profile:
- Click Import JSON in the toolbar or press ⌘I
- Dialog opens with text editor
- Paste your JSON configuration
- Click Import
- Perfect for quick imports, testing, or snippets
- Click Import Plist in the toolbar or press ⌘⇧I
- Select
.plistfile from your system - Supports full Plist files and Intune fragments
- Automatically handles files without XML headers
The right pane always shows one output at a time — pick it with the tab strip at the top: JSON, Plist, Cloud Policy, and one tab per non-empty Target Group. The description and action buttons next to the tabs update for whichever is selected.
- Used for on-premises Group Policy
- Used for Intune Settings Catalog (Windows)
- Click Copy or press ⌘⇧C
- Used for Intune Device Configuration Profiles
- Click Export or press ⌘S to save as a file
- Or click Copy
- Same JSON schema as the GPO/Settings Catalog output — paste it as the
ManagedFavoritesvalue of a Cloud configuration policy in the Microsoft 365 Admin Center - Resolved per signed-in Edge profile and assignable to an Entra ID group, so it reaches only the intended audience instead of the whole device
- Click Copy or press ⌘⇧C
If part of your organization needs extra favorites that the rest shouldn't get, switch to the Target Groups tab in the left pane and click Add Group instead of maintaining a second document:
- Merge into base set: the base favorites stay, the group is appended as its own subfolder — assign as an additive, lower-priority Cloud policy
- Replace base set: the group becomes its own toplevel folder, replacing the base set for that audience — assign as the highest-priority Cloud policy for that Entra group, since
ManagedFavoritesdoes not merge across policies (the highest-priority policy wins completely)
Each non-empty Target Group gets its own tab in the output panel, generated the same way as the base set.
The toplevel name (default: managedFavs) is the root key in your configuration — and belongs to the active profile. Change it in Settings (⌘,); switch profiles first if you meant to edit a different one's.
See deployment guides below for Windows GPO, Intune Windows, Intune macOS, or the Edge management service's Cloud Policy.
Favicons load automatically when URL is entered. Display favicons next to favorite entries to make them visually recognizable.
For organizations using Active Directory and Group Policy:
- Copy the JSON output from the app
- Open Group Policy Management Console
- Navigate to:
Computer Configuration → Administrative Templates → Microsoft Edge → Favorites - Enable "Configure favorites" policy
- Paste the JSON configuration
- Link the GPO to the appropriate Organizational Unit (OU)
- Run
gpupdate /forceon client machines
Documentation:
For cloud-managed Windows devices:

- Copy the JSON output from the app
- In Microsoft Intune admin center:
Devices → Configuration profiles - Create profile:
- Platform: Windows 10 and later
- Profile type: Settings catalog
- Add settings: Search for "Microsoft Edge" → "Favorites"
- Enable "Configure favorites" and paste JSON
- Assign to device groups
- Devices will sync and apply the policy
Documentation:
For targeting a specific audience instead of a whole device — Windows, macOS, iOS, and Android in one policy:
- Copy the Cloud Policy (JSON) output from the app
- In the Microsoft 365 Admin Center:
Settings → Microsoft Edge - Create a configuration policy:
- Type: Cloud (not the Intune type — that one is Windows-only)
- Setting: Managed favorites → paste the JSON as the
ManagedFavoritesvalue
- Assign the policy to an Entra ID group (e.g. a dynamic group for a naming pattern, or a static group for a team)
- Set policy priority — if you're also assigning a base-set policy to a broader group, put the more specific policy at higher priority (
ManagedFavoritesdoes not merge across policies; the highest-priority assigned policy wins completely for a given profile) - Fully quit and restart Edge on the client (⌘Q, not just closing the window) — cloud policies also refresh automatically roughly every 90 minutes
Why this instead of GPO/Intune for a partial rollout: GPO and the Intune "Preference file" profile both land in the OS-level Managed Preferences domain, which every browser profile on the device reads identically — there's no way to target "just this profile" through either channel, regardless of how the config file itself was produced. The Edge management service's Cloud policy type is resolved through the Entra identity signed into the profile instead, which is what makes per-audience targeting possible without replacing the policy for every other user of that device.
Precedence gotcha: if the same device also receives ManagedFavorites from a GPO or an Intune device profile, that value wins over the Cloud policy — check edge://policy on the client to see which source is actually active before assuming the Cloud policy isn't working.
Documentation:
- ManagedFavorites policy reference (see "Per Profile: Yes")
- Get started with configuration policies — Microsoft Edge management service
For cloud-managed macOS devices:
- Export the Plist from the app (⌘S)
- In Microsoft Intune admin center:
Devices → Configuration profiles - Create profile:
- Platform: macOS
- Profile type: Templates → Preference file
- Upload the
.plistfile - Set preference domain:
com.microsoft.Edge - Assign to device groups
- Devices will sync and apply the configuration
Documentation:
{
"managedFavs": [
{
"toplevel_name": "Company",
"name": "Intranet",
"url": "https://intranet.company.com"
},
{
"toplevel_name": "Company",
"name": "Support Portal",
"url": "https://support.company.com"
}
]
}The app generates a complete macOS Configuration Profile with:
ManagedFavoritesarray containing your favorites- Proper payload structure for Intune deployment
- Unique UUIDs for identification
Windows (GPO):
- Run
gpupdate /forceto apply policies immediately - Check policy status:
gpresult /r - Verify Edge is managed:
edge://policy
Windows (Intune):
- Wait for device sync (can take up to 8 hours, or force sync)
- Check policy status in Intune portal
- Verify Edge is up to date
macOS (Intune):
- Force device sync from Company Portal
- Check profile installation: System Settings → Profiles
- Verify Edge is installed and up to date
Cloud Policy (Edge management service):
- Check
edge://policyon the client — it shows both the effective value and its source (Cloud vs. Platform) - If the source shown is Platform, a GPO or Intune device profile is winning; that always takes precedence over a Cloud policy
- Confirm the signed-in profile's account is actually a member of the assigned Entra ID group
- Fully quit Edge (⌘Q) and reopen — cloud policies apply on restart, not live
- ✅ Ensure all URLs start with
https://orhttp:// - ✅ Check for special characters in names
- ✅ Verify JSON/Plist is properly formatted (app does this automatically)
- ✅ Ensure toplevel name doesn't contain spaces or special characters
- ✅ Favorites not saved: Check file permissions in
~/Library/Application Support/ - ✅ Export fails: Verify write permissions for target directory
- ✅ App won't start: Ensure macOS 15+ and try rebuilding
You can verify which favicon provider (Google or DuckDuckGo) the app is using in real-time:
# Live stream of favicon loading logs
log stream --predicate 'subsystem == "ManagedFavsGenerator" AND category == "Favicons"' --level info --style compactExample output:
Loading favicon for 'github.com' using Google provider: https://www.google.com/s2/favicons?domain=github.com&sz=32
Loading favicon for 'microsoft.com' using DuckDuckGo provider: https://icons.duckduckgo.com/ip3/microsoft.com.ico
To change the provider:
- Open Settings (⌘,)
- Navigate to Appearance section
- Select your preferred Favicon Provider:
- Google: More reliable, comprehensive coverage
- DuckDuckGo: Privacy-focused, no tracking
Changes take effect immediately without restart.
For developers and technical documentation, see AGENTS.md - Development guidelines, architecture, and best practices.
- Microsoft Edge Enterprise landing page
- Microsoft Edge for Business
- Microsoft Edge Policy documentation
- Microsoft Edge - managed Favorites
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
- App Issues: Open an issue in this repository
- Edge Policy Questions: Check Microsoft Edge documentation
- Intune/GPO Questions: Consult Microsoft documentation or your IT team
Made with ❤️ for IT Administrators