# homebrew-emacsmacport: packaging the Emacs Mac Port for Homebrew

> The railwaycat/homebrew-emacsmacport tap packages the Emacs Mac Port, the native macOS build of GNU Emacs, as Homebrew formulas and casks. It carries the stable 28 and 29 lines plus three experimental formulae for Emacs 30, 31, and master, and it separates the taps bug reports by which upstream tree the problem belongs to.

**railwaycat/homebrew-emacsmacport** — Emacs mac port formulae for the Homebrew package manager

- Repository: https://github.com/railwaycat/homebrew-emacsmacport
- Stars: 1,766 · Forks: 137
- Language: Ruby
- License: BSD-2-Clause
- Published: 2026-10-16 · Updated: 2026-10-16 · Language: en
- Canonical page: https://hysenlabs.com/projects/railwaycat-homebrew-emacsmacport

## What the Mac Port actually is

Emacs Mac Port is an addition to GNU Emacs that provides a native GUI for OS X 10.10 through macOS 13, and the official repository lives at bitbucket.org/mituharu/emacs-mac. The tap's README is careful to put it in context. This is the Mac port addition to GNU Emacs 29, and Emacs 23 and later already contain the official GUI support via the NS or Cocoa port, so if it is good enough for you, then you do not need to try this.

That caveat is the single most important line in the document for an adopter. The Mac Port exists because the NS port does not do everything, and the project is not arguing otherwise. The full feature list is in the upstream README, and this tap is only the packaging.

The tap itself is described as providing a collection of useful Homebrew formulas and casks with popular patches, making it easier to install the Emacs Mac Port on your Mac, either building from source code or installing pre-built binaries from casks. The primary language of the repository is Ruby, since Homebrew formulas and casks are Ruby files, and the licence is BSD-2-Clause.

The last push to the repository was on 2026-10-02, and the releases are named after what they package rather than after a version of the tap itself: emacs-29.4-mac-10.1 from 2025-06-11, emacs-28.3-rc1-mac-9.2 from the same day, and emacs-29.1-mac-10.0 from 2023-08-08. The naming follows the upstream scheme, where the Emacs version comes first and the Mac port revision second.

## The formulas, and what the experimental ones track

There are five formulae, and the split between stable and experimental is the thing to understand before you install anything.

The stable ones are emacs-mac, which installs the latest version of Emacs Mac Port 29, and emacs-mac@28, which installs Emacs Mac Port 28. Then there are three built from the experimental repository: emacs-mac@30exp for Emacs Mac Port 30, emacs-mac@31exp for Emacs Mac Port 31, and emacs-mac@32exp, which is based on the GNU Emacs master branch of the experimental repo and is HEAD only, installed with brew install --HEAD emacs-mac@32exp.

The reason for that split is stated plainly. Development from the official repository slowed down after Emacs 29, specifically after version 29.4-mac-10.1, because the developer has been busy. jdtsmith forked from upstream and is doing experimental development for Emacs 30, Emacs 31, and master.

So the tap is maintaining two upstream trees at once. The official Bitbucket repository is authoritative for the 28 and 29 lines, and the jdtsmith fork is authoritative for anything 30 and above. That is why the README strongly recommends reading the jdtsmith README before installing from this tap via formula or casks for 30 and above: that README provides detailed and comprehensive instructions for building the Emacs Mac Port from source code and for debugging.

The HEAD-only variant is worth a note as well. A master-branch build is by definition a moving target, so the version of Emacs you get is whatever master was on the day the build ran.

## Tapping, and the casks

The Homebrew route is one command:

```
$ brew tap railwaycat/emacsmacport
```

After that the formulae install with the usual brew install, and the casks with brew install --cask.

The casks come in two groups. Based on Emacs 29 there is emacs-mac and emacs-mac-spacemacs-icon. Based on Emacs 28 there is emacs-mac-28 and emacs-mac-28-spacemacs-icon. The spacemacs-icon variants are there because a cask can carry an icon file, and the pair exists so you can pick the plain application or the one with the SpaceMacs icon set.

The casks are the pre-built route, and there is a matching standalone route. Pre-built bundles are available on the release page, and the README states that the bundles are the same as those from Homebrew Cask. The release page is a separate releases area in the repository, and the bundles are built by GitHub Actions.

There is a fourth route that the README mentions but does not maintain itself. Emacs mac port is available on MacPorts as emacs-mac-app and emacs-mac-app-devel, with the note that these are not maintained by the maintainer of this repository. Two more useful links are the switch meta and option key gist and a document about helper scripts and apps for starting Emacs.app.

## Where to file a bug, which is unusual to get right

The issue guidance is the most practically useful section of the README, and it is a three-way split that saves a lot of time if you follow it.

If the problem is a build error when installing or upgrading any of the formulas, if Emacs.app from a formula or a cask fails to start or freezes, or if it is another issue you are not certain about, you should open an issue on the tap repository. Those are packaging problems and they belong to the tap.

If it is a bug while using Emacs, or related to a feature of Emacs Mac Port 30 and above, the upstream repository is the place, which is the jdtsmith fork at the emacs-mac-30_1_exp branch.

And if it is any issue with Emacs Mac Port 28 and 29, the developer says to read a note first, and the note is about reproducing the bug before reporting it. If you find a bug, try to reproduce it with some official builds such as X11 or NS, and if it turns out to be specific to the Mac port, report it to the Mac port bug address. Otherwise, if it is also reproducible with the official ones, report it using M-x report-emacs-bug using the official build as such.

That last instruction is a good discipline for any platform, not just this one. A bug report that only reproduces on one port is a bug in that port, and a bug that reproduces everywhere is an upstream Emacs bug, and filing it in the wrong place means it will be closed without a fix.

The project also states that the repository is a Homebrew tap and nothing more, and the repository layout shows it: Formula/, Casks/, Aliases/, Library/, patches/, build-scripts/, icons/, and docs/.

## Conclusion

Adopt this tap if you want the Emacs Mac Port installed through Homebrew on macOS, and you are prepared to pick between the stable and experimental lines yourself. Do not adopt it if the stock NS Cocoa build of Emacs is good enough for you, because the upstream project says so directly. Verify first which formula matches the version you want, since the 30 and above formulae track an experimental fork rather than the official repository.

## FAQ

### What is the Emacs Mac Port and how does it differ from the NS build?

It is an addition to GNU Emacs providing a native GUI for OS X 10.10 to macOS 13, with the official repository at bitbucket.org/mituharu/emacs-mac. The README notes that Emacs 23 and later already contain official GUI support via the NS or Cocoa port, so if that is good enough for you, you do not need this.

### How do I install the Emacs Mac Port with Homebrew?

Enable the tap with brew tap railwaycat/emacsmacport, then install the formula you want, for example emacs-mac for the latest version of Emacs Mac Port 29. The casks, such as emacs-mac and emacs-mac-spacemacs-icon, install with brew install --cask.

### Which formulas are experimental?

emacs-mac@30exp, emacs-mac@31exp, and emacs-mac@32exp. They are built from the jdtsmith fork, because development from the official repository slowed down after Emacs 29 and 29.4-mac-10.1. The 32 variant tracks the GNU Emacs master branch and is HEAD only, installed with brew install --HEAD emacs-mac@32exp.

### Where should I report a bug with this tap?

Build errors when installing or upgrading a formula, and Emacs.app failing to start or freezing, belong on the tap repository. Bugs with Emacs itself or with Emacs Mac Port 30 and above go to the upstream jdtsmith fork, and for versions 28 and 29 the developer asks you to first try to reproduce the bug with official builds such as X11 or NS.

### Which macOS versions do the pre-built bundles support?

On Intel Macs, Ventura, macOS 13, and later. On Apple Silicon Macs, Sonoma, macOS 14, and Sequoia, macOS 15, and later. For macOS versions not on that list you are told to install from the Homebrew formula instead of the cask.

## Sources

- [Issues](https://github.com/railwaycat/homebrew-emacsmacport/issues)
- [License: BSD-2-Clause](https://github.com/railwaycat/homebrew-emacsmacport/blob/master/LICENSE)
- [railwaycat/homebrew-emacsmacport on GitHub](https://github.com/railwaycat/homebrew-emacsmacport)
- [README](https://github.com/railwaycat/homebrew-emacsmacport/blob/master/README.md)
- [Releases](https://github.com/railwaycat/homebrew-emacsmacport/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/railwaycat-homebrew-emacsmacport
