Add Zen Browser as a macOS FMA#44126
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #44126 +/- ##
==========================================
- Coverage 63.40% 63.40% -0.01%
==========================================
Files 2628 2629 +1
Lines 211127 211129 +2
Branches 9499 9380 -119
==========================================
+ Hits 133856 133857 +1
- Misses 64922 64923 +1
Partials 12349 12349
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Claude Code Review
This repository is configured for manual code reviews. Comment @claude review to trigger a review and subscribe this PR to future pushes, or @claude review once for a one-time review.
Tip: disable this comment in your organization's Code Review settings.
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (5)
WalkthroughThis pull request adds support for Zen Browser to the application. It includes a new app manifest entry defining Zen Browser's metadata, including its unique identifier, installer format (DMG), and distribution slug for macOS. A managed-app definition file is created with version 1.19.8b, containing DMG installer details and shell scripts for installation and uninstallation on macOS. Additionally, a new Zen icon component is added to the frontend and registered in the software icon mapping to enable visual representation of the Zen Browser application throughout the interface. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Adds Zen Browser as a maintained macOS app across backend metadata/scripts and frontend icon support.
Changes:
- Added Zen Browser metadata to maintained-app inputs/outputs and registered it in
apps.json. - Introduced a versioned macOS output config for Zen Browser with installer/uninstaller scripts.
- Added a Zen icon component and mapped it in the SoftwarePage icon registry.
Reviewed changes
Copilot reviewed 5 out of 6 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| frontend/pages/SoftwarePage/components/icons/index.ts | Registers Zen icon import and maps a software-name key to the icon component. |
| frontend/pages/SoftwarePage/components/icons/Zen.tsx | Adds a Zen icon component for UI display. |
| ee/maintained-apps/outputs/zen/darwin.json | Defines Zen Browser macOS version metadata plus install/uninstall script refs. |
| ee/maintained-apps/outputs/apps.json | Adds Zen Browser entry to the maintained apps list. |
| ee/maintained-apps/inputs/homebrew/zen.json | Adds Zen Browser input metadata for generation/maintenance. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| "yubico authenticator": YubicoAuthenticator, | ||
| "yubikey manager": YubikeyManager, | ||
| zed: Zed, | ||
| zen: Zen, |
There was a problem hiding this comment.
The new app is named "Zen Browser" in apps.json, but the icon map key added here is zen. If the UI lookup uses a normalized app name (as suggested by other keys like "yubico authenticator"), the Zen icon may not resolve. Consider mapping the normalized display name as well (e.g., add a \"zen browser\" key pointing to Zen) or align the key with whatever identifier the UI uses for lookups.
| zen: Zen, | |
| zen: Zen, | |
| "zen browser": Zen, |
| import type { SVGProps } from "react"; | ||
|
|
||
| const Zen = (props: SVGProps<SVGSVGElement>) => ( | ||
| <svg xmlns="http://www.w3.org/2000/svg" width={32} height={32} {...props}> |
There was a problem hiding this comment.
This <svg> lacks common accessibility attributes and scaling metadata. Consider following the project’s icon conventions by adding a viewBox (so the icon scales predictably) and setting appropriate accessibility defaults (e.g., aria-hidden=\"true\" for decorative icons, or a <title> + role=\"img\" when it conveys meaning).
| <svg xmlns="http://www.w3.org/2000/svg" width={32} height={32} {...props}> | |
| <svg | |
| xmlns="http://www.w3.org/2000/svg" | |
| width={32} | |
| height={32} | |
| viewBox="0 0 32 32" | |
| aria-hidden="true" | |
| focusable="false" | |
| {...props} | |
| > |
| } | ||
| ], | ||
| "refs": { | ||
| "045f019e": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Zen.app\"\nsudo rmdir '~/Library/Caches/Mozilla'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Zen'\ntrash $LOGGED_IN_USER '~/Library/Caches/Mozilla/updates/Applications/Zen Browser'\ntrash $LOGGED_IN_USER '~/Library/Caches/Mozilla/updates/Applications/Zen'\ntrash $LOGGED_IN_USER '~/Library/Caches/Zen'\ntrash $LOGGED_IN_USER '~/Library/Preferences/app.zen-browser.zen.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/org.mozilla.com.zen.browser.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/app.zen-browser.zen.savedState'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/org.mozilla.com.zen.browser.savedState'\n", |
There was a problem hiding this comment.
In the uninstall script, sudo rmdir '~/Library/Caches/Mozilla' uses single quotes, so ~ will not expand and the command will target a literal path (and rmdir will also fail if the directory is non-empty). Replace this with a removal method consistent with the rest of the script (e.g., use the existing trash helper for the user cache path, or remove the expanded absolute path without single quotes).
| "045f019e": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Zen.app\"\nsudo rmdir '~/Library/Caches/Mozilla'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Zen'\ntrash $LOGGED_IN_USER '~/Library/Caches/Mozilla/updates/Applications/Zen Browser'\ntrash $LOGGED_IN_USER '~/Library/Caches/Mozilla/updates/Applications/Zen'\ntrash $LOGGED_IN_USER '~/Library/Caches/Zen'\ntrash $LOGGED_IN_USER '~/Library/Preferences/app.zen-browser.zen.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/org.mozilla.com.zen.browser.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/app.zen-browser.zen.savedState'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/org.mozilla.com.zen.browser.savedState'\n", | |
| "045f019e": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Zen.app\"\ntrash $LOGGED_IN_USER '~/Library/Caches/Mozilla'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Zen'\ntrash $LOGGED_IN_USER '~/Library/Caches/Mozilla/updates/Applications/Zen Browser'\ntrash $LOGGED_IN_USER '~/Library/Caches/Mozilla/updates/Applications/Zen'\ntrash $LOGGED_IN_USER '~/Library/Caches/Zen'\ntrash $LOGGED_IN_USER '~/Library/Preferences/app.zen-browser.zen.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/org.mozilla.com.zen.browser.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/app.zen-browser.zen.savedState'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/org.mozilla.com.zen.browser.savedState'\n", |
| "slug": "zen/darwin", | ||
| "platform": "darwin", | ||
| "unique_identifier": "app.zen-browser.zen", | ||
| "description": "Zen Browser is a Gecko based web browser." |
There was a problem hiding this comment.
Hyphenate the compound modifier: change "Gecko based" to "Gecko-based".
| "description": "Zen Browser is a Gecko based web browser." | |
| "description": "Zen Browser is a Gecko-based web browser." |
This pull request adds support for the Zen Browser across the application, including its metadata, installation scripts, and UI icon. The changes ensure Zen Browser is now recognized as a maintained app, can be installed/uninstalled via scripts, and displays its icon in the frontend.
Zen Browser Integration
zen.json) and output (apps.json) files, making it available in the maintained apps list. [1] [2]zen/darwin.json), including installer and uninstaller scripts, version information, and download details.Frontend/UI Updates
Zen.tsx).Summary by CodeRabbit