Skip to content

Add Zen Browser as a macOS FMA#44126

Merged
allenhouchins merged 1 commit intomainfrom
allenhouchins-zen-fma
Apr 24, 2026
Merged

Add Zen Browser as a macOS FMA#44126
allenhouchins merged 1 commit intomainfrom
allenhouchins-zen-fma

Conversation

@allenhouchins
Copy link
Copy Markdown
Member

@allenhouchins allenhouchins commented Apr 24, 2026

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

  • Added Zen Browser metadata to the maintained apps input (zen.json) and output (apps.json) files, making it available in the maintained apps list. [1] [2]
  • Created a new versioned output file for Zen Browser (zen/darwin.json), including installer and uninstaller scripts, version information, and download details.

Frontend/UI Updates

  • Added a new React SVG icon component for Zen Browser (Zen.tsx).
  • Registered the Zen icon in the icon index and mapped the "zen" software name to the new icon, enabling its display in the UI. [1] [2]

Summary by CodeRabbit

  • New Features
    • Added support for Zen Browser on macOS with installation and uninstallation capabilities.
    • Added Zen Browser icon to the application interface.

@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 24, 2026

Codecov Report

❌ Patch coverage is 50.00000% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 63.40%. Comparing base (cc5fa22) to head (ad536bc).
⚠️ Report is 6 commits behind head on main.

Files with missing lines Patch % Lines
...ontend/pages/SoftwarePage/components/icons/Zen.tsx 50.00% 1 Missing ⚠️
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              
Flag Coverage Δ
frontend 54.79% <50.00%> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@allenhouchins allenhouchins marked this pull request as ready for review April 24, 2026 15:44
@allenhouchins allenhouchins requested a review from a team as a code owner April 24, 2026 15:44
Copilot AI review requested due to automatic review settings April 24, 2026 15:44
@fleet-release fleet-release requested a review from eashaw April 24, 2026 15:44
Copy link
Copy Markdown

@claude claude Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@allenhouchins allenhouchins merged commit bc94128 into main Apr 24, 2026
24 of 25 checks passed
@allenhouchins allenhouchins deleted the allenhouchins-zen-fma branch April 24, 2026 15:44
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 24, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: d627f0d3-790b-4631-b6dc-bc4db7dbc7f0

📥 Commits

Reviewing files that changed from the base of the PR and between be8bc58 and ad536bc.

⛔ Files ignored due to path filters (1)
  • website/assets/images/app-icon-zen-60x60@2x.png is excluded by !**/*.png
📒 Files selected for processing (5)
  • ee/maintained-apps/inputs/homebrew/zen.json
  • ee/maintained-apps/outputs/apps.json
  • ee/maintained-apps/outputs/zen/darwin.json
  • frontend/pages/SoftwarePage/components/icons/Zen.tsx
  • frontend/pages/SoftwarePage/components/icons/index.ts

Walkthrough

This 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
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch allenhouchins-zen-fma

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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,
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
zen: Zen,
zen: Zen,
"zen browser": Zen,

Copilot uses AI. Check for mistakes.
import type { SVGProps } from "react";

const Zen = (props: SVGProps<SVGSVGElement>) => (
<svg xmlns="http://www.w3.org/2000/svg" width={32} height={32} {...props}>
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Suggested change
<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}
>

Copilot uses AI. Check for mistakes.
}
],
"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",
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Suggested change
"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",

Copilot uses AI. Check for mistakes.
"slug": "zen/darwin",
"platform": "darwin",
"unique_identifier": "app.zen-browser.zen",
"description": "Zen Browser is a Gecko based web browser."
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hyphenate the compound modifier: change "Gecko based" to "Gecko-based".

Suggested change
"description": "Zen Browser is a Gecko based web browser."
"description": "Zen Browser is a Gecko-based web browser."

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants