Skip to content
CAI
Software that uses CAICheck a score

d12frosted/homebrew-emacs-plus

57.2

Adequate · 19 September 2026

5k

lines of production code

Ruby

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is a Homebrew tap that provides versioned formulae and pre-built casks for Emacs on macOS. It manages the build process by applying macOS-specific patches, enabling native compilation, and integrating community-contributed icons and performance fixes. The infrastructure supports multiple Emacs versions, from legacy releases to the latest development builds, while handling post-installation tasks like code signing and quarantine removal.

How it got here

2016–2020 — Repository restructuring and macOS integration

7 changes.

The project reorganized its repository structure with modern tooling and documentation while splitting Emacs formulae into versioned taps. Significant effort focused on patching Emacs versions 26 through 32 for macOS, adding native compilation, dark mode support, and accessibility fixes. A new build configuration system was introduced to manage community patches, icons, and environment variables for cask installations.

2021–2026 — macOS feature expansion and tooling

11 changes.

This period focused on extending macOS-specific capabilities, including support for undecorated rounded frames, frame transparency, and native Tahoe liquid glass icons. It also introduced comprehensive community patch management tools, improved TTY and font rendering performance, and established pre-built cask distributions for stable and development branches.

Features

Add community icon and patch registry tooling

New scripts are introduced to manage and validate community-contributed icons and patches. \create-community-icon.rb\ and \create-community-patch.rb\ provide interactive wizards to add new items to the \community/\ directory, handling metadata and registry updates. \validate-icons.rb\ and \validate-registry.rb\ ensure data integrity by checking file existence, metadata completeness, and patch compatibility. \generate-icon-previews.rb\ and \generate-tahoe-assets\ automate the creation of visual previews and macOS Tahoe-compatible \Assets.car\ files from source icons.

scripts · high confidence

Adds configurable frame transparency and background blur for macOS

This patch introduces configurable frame transparency and background blur support for macOS (Cocoa frames) in Emacs 31. Users can now set the \alpha-background\ frame parameter to control window opacity and the \ns-background-blur\ parameter to apply a dynamic blur effect to the frame background. Additionally, the \ns-alpha-elements\ parameter allows fine-grained control over which UI elements (such as the default face, fringes, or glyph backgrounds) are rendered with transparency. The patch modifies the Emacs source code to integrate these CGS API calls and provides documentation on how to configure these features in your Emacs setup.

community/patches/frame-transparency · high confidence

The \community/icons\ directory now provides a centralized gallery of community-maintained Emacs icons. Users can select an icon by name in their \\~/.config/emacs-plus/build.yml\ for both formula and cask installations. The gallery includes standard \.icns\ icons and new Tahoe-compliant icons (such as \dragon-plus\ and \liquid-glass\) that use \Assets.car\ for native macOS Tahoe liquid glass effects. A generated README displays previews and credits for all available icons.

community/icons · high confidence

Introduce pre-built Emacs+ casks for stable, next, and master branches

Users can now install pre-built Emacs+ applications via Homebrew Cask using three distinct packages: \emacs-plus-app\ (stable, currently Emacs 31.1), \emacs-plus-app@next\ (release branch, currently Emacs 31.1.50), and \emacs-plus-app@master\ (development, currently Emacs 32.0.50). These casks provide arm64 binaries for macOS 14 (Sonoma) and later, automatically handling post-installation setup such as quarantine removal, custom icon application, and symlink creation. The casks conflict with each other and with the existing \emacs-plus\ formula, ensuring users choose between pre-built binaries or source compilation.

Casks · high confidence

New build configuration system with community patches, icons, and native compilation fixes

This change introduces a new \build.yml\ configuration system (parsed by \BuildConfig.rb\) that allows users to specify custom icons, community patches, and revision pins for specific Emacs versions. It adds a community registry system for patches and icons, supporting both local file paths and external URLs, with version-mapped values. The \CaskEnv.rb\ module now handles environment injection for cask installations, including native compilation support via \LIBRARY\_PATH\ and \native\_comp\_driver\_options\_el\ to fix \.eln\ linking issues. \IconApplier.rb\ manages icon application for both formula and cask builds, including Tahoe Assets.car support. \PlistExtras.rb\ declares TCC usage descriptions and disables macOS 26 AutoFill. \EmacsBase.rb\ integrates the new patch and icon resolution, while \CaskPostflight.rb\ and \CaskPostflightCLI.rb\ orchestrate the cask post-install steps including quarantine removal, environment injection, icon application, and re-signing.

Library · high confidence

New opt-in patch for CJK font line-height rendering on macOS

A new community patch, \mac-font-use-typo-metrics\, is available for Emacs 29, 30, and 31 on macOS. It fixes line-height calculation for CJK fonts by reading typographic metrics from the OS/2 table instead of the hhea table, resolving issues like partial screen rendering, clipped text, and misalignment in vterm or other pixel-sensitive modes. Users can enable this by adding \mac-font-use-typo-metrics\ to their \\~/.config/emacs-plus/build.yml\ patches list and rebuilding. Note that this may cause reduced line height with some Latin-only fonts that do not set the USE\_TYPO\_METRICS flag.

community/patches/mac-font-use-typo-metrics · high confidence

Repository structure reorganized with new development tooling and documentation

The repository has been restructured to support modern development workflows and clearer documentation. A new Makefile replaces the previous build script, providing standardized targets for testing, validating build configurations, and building or installing formulae and casks locally. Documentation has been migrated from Markdown to Org mode (README.org), and a comprehensive changelog (NEWS.org) has been added to track notable changes, bug fixes, and feature updates. Additionally, new configuration files have been introduced: .rubocop.yml enforces Ruby style guidelines for formulae and casks, .dir-locals.el sets Emacs-specific variables, and .gitignore excludes local build artifacts and system files. The legacy README.md has been removed in favor of the new Org-based documentation.

(repo-wide) · high confidence

Behavioural changes

Emacs 26: Fixes for unexec, accessibility, and color fonts on macOS

This update applies three patches to Emacs 26 for macOS. It fixes a bug in the unexec mechanism (used for saving images) by correcting region alignment and merging logic in src/unexmacosx.c. It also corrects the accessibility role for Emacs windows from TextField to Window in src/nsterm.m, and allows color bitmap fonts to be used if their family is explicitly specified, rather than blocking them entirely, in src/macfont.m.

patches/emacs-26 · high confidence

Emacs 29: round undecorated frames and tree-sitter compatibility

This update adds support for Emacs 29 by introducing a new \undecorated-round\ frame parameter for macOS, which allows undecorated frames to have rounded corners while preserving their geometry when toggled. It also includes a tree-sitter compatibility fix that updates the code to use the \ts\_language\_abi\_version\ function instead of the deprecated \ts\_language\_version\, ensuring correct grammar library loading.

patches/emacs-29 · high confidence

Emacs 32 build target added with macOS NS scroll crash fix

The package now supports building Emacs version 32. To ensure stability on macOS, the build includes a fix for a crash occurring during scrolling in the NS (Cocoa) interface, which is applied by symlinking the patch from the Emacs 31 patch set.

patches/emacs-32 · high confidence

Emacs formulae split into versioned taps with native compilation and macOS fixes

The single \emacs-plus\ formula has been replaced by versioned formulae (\emacs-plus@26\ through \emacs-plus@32\), each targeting a specific Emacs release. This change introduces native compilation (AOT) as the default for Emacs 30+, adds WebP support for Emacs 30+, and includes patches to fix macOS window roles, system appearance, and scroll crashes. It also removes the deprecated \emacs-plus\ formula and updates build dependencies to ensure compatibility with modern macOS versions.

Formula · high confidence

Improved TTY read performance on macOS

A new community patch, aggressive-read-buffering, is available for Emacs 29, 30, and 31. It modifies the \emacs\_intr\_read\ function in \src/sysdep.c\ to handle macOS's 1024-byte TTY/pty buffer limit by looping with a short delay to read remaining data, significantly improving performance when processing large quantities of output.

community/patches/aggressive-read-buffering · high confidence

Update default emacs-plus alias to version 31 and add master alias for version 32

The default \emacs-plus\ alias now points to version 31 (via \[e-mail redacted]\), replacing previous defaults. Additionally, a new \emacs-plus@master\ alias has been introduced, pointing to version 32 (via \[e-mail redacted]\), allowing users to access the latest development build.

Aliases · high confidence

macOS Cocoa patches for Emacs 27

This update applies a suite of patches to Emacs 27 for macOS Cocoa, introducing several behavioral changes and new capabilities. It adds support for system appearance changes (light/dark mode) on macOS 10.14+ via a new hook and variable, fixes code signing issues on Apple Silicon (ARM) by updating the Makefile, and resolves a freeze issue with ligatures in the mode line by allowing pure-ASCII unibyte string composition. Additionally, it improves accessibility by correcting the window role, prevents unwanted frame refocusing on Cocoa, enforces an undecorated window style, and enables xwidgets (Webkit) support on macOS alongside new keybindings for webkit sessions.

patches/emacs-27 · high confidence

macOS UI and appearance improvements for Emacs 28

This update applies several patches to Emacs 28 on macOS to enhance the user interface and system integration. It introduces a 'no title bar' option that can optionally retain rounded window corners, removes the automatic frame refocusing behavior when a frame is deleted, and fixes the accessibility role to correctly identify Emacs windows. Additionally, it improves support for macOS Mojave (10.14) and later by updating the dark appearance handling and adding hooks to react to system-wide appearance changes (light/dark mode).

patches/emacs-28 · high confidence

Fixes

Emacs 30 macOS patches: Tahoe scrolling fix, undecorated round frames, and tree-sitter ABI update

This location adds a suite of patches for Emacs 30 on macOS. It fixes scrolling lag and input handling on macOS 26 (Tahoe) by disabling specific event processing features, and refreshes the x-colors list during NS window initialization to ensure the full palette is available at runtime. It introduces support for undecorated frames with round corners via a new \undecorated-round\ frame parameter. Additionally, it updates tree-sitter compatibility to use the \ts\_language\_abi\_version\ function, correcting version mismatch checks, and ensures the system appearance hook correctly uses the \ns\_appearance\_dark\_aqua\ type on macOS 10.14+. A symlink patch reuses the window role fix from Emacs 28.

patches/emacs-30 · high confidence

macOS-specific patches for Emacs 31

This update adds several patches to the Emacs 31 build target for macOS. It fixes a crash in the NS scroll code (bug\#81585) that occurred when toggling off the header-line with pixel-scroll-precision-mode enabled. It also ensures x-colors are refreshed during NS window system initialization to correct color lists captured in headless dump environments. Additionally, it introduces support for undecorated frames with round corners, allowing users to create frames without decorations and with rounded corners, and adds a hook to react to macOS system appearance changes (light/dark mode) so themes can be updated automatically.

patches/emacs-31 · high confidence

Test coverage

Added test suites for cask postflight, build configuration, and PATH escaping

Added comprehensive test coverage for the cask postflight logic (including quarantine removal, environment injection, and code-signing), the build configuration parser (validating YAML structure and field constraints), and the AppleScript escaping used by Emacs Client.app. Additional tests verify the CaskEnv PATH injection behavior, the maintainer metadata formatting, PlistExtras usage descriptions, the cask SHA update script, and the URL resolver's patch path resolution.

tests · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 57.

Lenses

  • Code Health 92
  • Architecture 96
  • Maturity 61
  • Readiness 61
  • Security 45

Changes since last survey

  • 300 commits — 267 feature/other, 33 fixes

By area

  • Casks/[e-mail redacted] — 180 commits
  • Casks/[e-mail redacted] — 35 commits
  • (root) — 29 commits
  • .github/workflows — 17 commits
  • Casks/emacs-plus-app.rb — 17 commits
  • Formula/[e-mail redacted] — 4 commits
  • Library/EmacsBase.rb — 3 commits
  • community/icons — 3 commits
  • community/patches — 3 commits
  • Library/CaskEnv.rb — 2 commits
  • Formula/[e-mail redacted] — 1 commit
  • Formula/[e-mail redacted] — 1 commit
  • Formula/[e-mail redacted] — 1 commit
  • Formula/[e-mail redacted] — 1 commit
  • Formula/[e-mail redacted] — 1 commit
  • Formula/[e-mail redacted] — 1 commit
  • patches/emacs-32 — 1 commit

Notable commits

  • fix: ci(build-app): fix libgccjit native-comp build on gcc 16 / macOS arm64 (#963)
  • fix: fix(build-app): sync emacs-30 cask patch list with formula (#977)
  • fix: fix(cask): keep the url outside on_arm so brew tap validates on Intel
  • fix: fix(cask): only remove quarantine xattr instead of clearing all
  • fix: fix(ci): build tree-sitter from source when there is no Intel bottle
  • fix: fix(ci): stop a failed Intel build from blocking arm64 releases
  • fix: fix(ci): trust the emacs-plus tap before tapping it
  • fix: fix(ci): update Homebrew before installing formulas
  • fix: fix(emacs-plus-app): add Homebrew site-lisp to cask build load-path
  • fix: fix(emacs-plus@30): add explicit version to prevent nil when using custom revision
  • fix: fix(emacs-plus@30,31): refresh x-colors during NS window system init
  • fix: fix(emacs-plus@31): re-add fix-ns-x-colors patch
  • fix: fix(emacs-plus@31): remove fix-ns-x-colors patch (merged upstream)
  • fix: fix(emacs-plus@31,32): fix NS scroll crash on macOS (bug#81585) (#983)
  • fix: fix(emacs-plus@32): fix broken patch SHA for round-undecorated-frame (#945)
  • fix: fix(icons): correct retro-emacs-logo attribution and regenerate gallery
  • fix: fix(icons): make README generator faithful and non-destructive
  • fix: fix(patches): update emacs-31 frame-transparency patch for upstream context
  • fix: fix: disable macOS 26 Tahoe AutoFill (Emacs) process (#947)
  • fix: fix: don't let one failed cask env step skip the rest (#969)
  • …and 280 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

d12frosted/homebrew-emacs-plus was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 19 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 049678bbc258bf6e5d7f54ce75849ed6691b3393 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-13a154b7f5d1.