{"id":13815542,"url":"https://github.com/d12frosted/homebrew-emacs-plus","last_synced_at":"2026-06-27T07:00:40.320Z","repository":{"id":37390637,"uuid":"55288882","full_name":"d12frosted/homebrew-emacs-plus","owner":"d12frosted","description":"Emacs Plus formulae for the Homebrew package manager","archived":false,"fork":false,"pushed_at":"2026-06-21T09:37:04.000Z","size":142160,"stargazers_count":2885,"open_issues_count":7,"forks_count":216,"subscribers_count":44,"default_branch":"master","last_synced_at":"2026-06-21T11:22:50.619Z","etag":null,"topics":["brew","doom-emacs","emacs","homebrew","spacemacs"],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/d12frosted.png","metadata":{"files":{"readme":"README.org","changelog":"NEWS.org","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"d12frosted","patreon":"d12frosted"}},"created_at":"2016-04-02T10:17:48.000Z","updated_at":"2026-06-21T09:37:08.000Z","dependencies_parsed_at":"2026-02-17T07:05:35.238Z","dependency_job_id":null,"html_url":"https://github.com/d12frosted/homebrew-emacs-plus","commit_stats":{"total_commits":582,"total_committers":93,"mean_commits":6.258064516129032,"dds":"0.33333333333333337","last_synced_commit":"5f1f625f43d498dcb9a931e0f351bfdaeb41cd1b"},"previous_names":[],"tags_count":207,"template":false,"template_full_name":null,"purl":"pkg:github/d12frosted/homebrew-emacs-plus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d12frosted%2Fhomebrew-emacs-plus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d12frosted%2Fhomebrew-emacs-plus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d12frosted%2Fhomebrew-emacs-plus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d12frosted%2Fhomebrew-emacs-plus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/d12frosted","download_url":"https://codeload.github.com/d12frosted/homebrew-emacs-plus/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d12frosted%2Fhomebrew-emacs-plus/sbom","scorecard":{"id":315532,"data":{"date":"2025-08-11","repo":{"name":"github.com/d12frosted/homebrew-emacs-plus","commit":"cd8d57de9ac25d9822567ea4d51d5c67d791d7ab"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.9,"checks":[{"name":"Code-Review","score":9,"reason":"Found 26/28 approved changesets -- score normalized to 9","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":2,"reason":"1 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/emacs-29.yml:1","Warn: no topLevel permission defined: .github/workflows/emacs-30.yml:1","Warn: no topLevel permission defined: .github/workflows/emacs-31.yml:1","Warn: no topLevel permission defined: .github/workflows/emacs.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-EmacsIcon1.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-EmacsIcon2.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-EmacsIcon3.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-EmacsIcon4.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-EmacsIcon5.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-EmacsIcon6.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-EmacsIcon7.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-EmacsIcon8.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-EmacsIcon9.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-c9rgreen-sonoma.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-cacodemon.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-dragon.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-elrumo1.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-elrumo2.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-emacs-card-blue-deep.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-emacs-card-british-racing-green.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-emacs-card-carmine.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-emacs-card-green.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-gnu-head.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-memeplex-slim.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-memeplex-wide.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-alecive-flatwoken.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-asingh4242.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-azhilin.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-bananxan.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-black-dragon.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-black-gnu-head.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-black-variant.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-bokehlicia-captiva.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-cg433n.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-doom.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-doom3.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-mzaplotnik.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-nuvola.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-orange.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-paper.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-papirus.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-pen-3d.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-pen-black.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-pen-lds56.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-pen.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-purple-flat.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-sexy-v1.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-sexy-v2.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-sjrmanning.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-vscode.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern-yellow.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-modern.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-nobu417-big-sur.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-retro-emacs-logo.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-retro-gnu-meditate-levitate.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-retro-sink-bw.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-retro-sink.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-savchenkovaleriy-big-sur-3d.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-savchenkovaleriy-big-sur-curvy-3d.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-savchenkovaleriy-big-sur.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-skamacs.yml:1","Warn: no topLevel permission defined: .github/workflows/icon-spacemacs.yml:1","Warn: no topLevel permission defined: .github/workflows/online.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/emacs-29.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/emacs-29.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/emacs-29.yml:61: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/emacs-29.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/emacs-30.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/emacs-30.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/emacs-30.yml:60: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/emacs-30.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/emacs-31.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/emacs-31.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/emacs-31.yml:60: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/emacs-31.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/emacs.yml:44: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/emacs.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/emacs.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/emacs.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/emacs.yml:67: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/emacs.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-EmacsIcon1.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-EmacsIcon1.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-EmacsIcon2.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-EmacsIcon2.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-EmacsIcon3.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-EmacsIcon3.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-EmacsIcon4.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-EmacsIcon4.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-EmacsIcon5.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-EmacsIcon5.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-EmacsIcon6.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-EmacsIcon6.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-EmacsIcon7.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-EmacsIcon7.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-EmacsIcon8.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-EmacsIcon8.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-EmacsIcon9.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-EmacsIcon9.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-c9rgreen-sonoma.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-c9rgreen-sonoma.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-cacodemon.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-cacodemon.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-dragon.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-dragon.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-elrumo1.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-elrumo1.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-elrumo2.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-elrumo2.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-emacs-card-blue-deep.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-emacs-card-blue-deep.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-emacs-card-british-racing-green.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-emacs-card-british-racing-green.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-emacs-card-carmine.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-emacs-card-carmine.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-emacs-card-green.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-emacs-card-green.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-gnu-head.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-gnu-head.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-memeplex-slim.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-memeplex-slim.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-memeplex-wide.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-memeplex-wide.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-alecive-flatwoken.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-alecive-flatwoken.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-asingh4242.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-asingh4242.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-azhilin.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-azhilin.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-bananxan.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-bananxan.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-black-dragon.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-black-dragon.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-black-gnu-head.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-black-gnu-head.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-black-variant.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-black-variant.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-bokehlicia-captiva.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-bokehlicia-captiva.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-cg433n.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-cg433n.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-doom.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-doom.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-doom3.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-doom3.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-mzaplotnik.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-mzaplotnik.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-nuvola.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-nuvola.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-orange.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-orange.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-paper.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-paper.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-papirus.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-papirus.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-pen-3d.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-pen-3d.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-pen-black.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-pen-black.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-pen-lds56.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-pen-lds56.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-pen.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-pen.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-purple-flat.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-purple-flat.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-sexy-v1.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-sexy-v1.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-sexy-v2.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-sexy-v2.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-sjrmanning.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-sjrmanning.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-vscode.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-vscode.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern-yellow.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern-yellow.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-modern.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-modern.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-nobu417-big-sur.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-nobu417-big-sur.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-retro-emacs-logo.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-retro-emacs-logo.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-retro-gnu-meditate-levitate.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-retro-gnu-meditate-levitate.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-retro-sink-bw.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-retro-sink-bw.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-retro-sink.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-retro-sink.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-savchenkovaleriy-big-sur-3d.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-savchenkovaleriy-big-sur-3d.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-savchenkovaleriy-big-sur-curvy-3d.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-savchenkovaleriy-big-sur-curvy-3d.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-savchenkovaleriy-big-sur.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-savchenkovaleriy-big-sur.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-skamacs.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-skamacs.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/icon-spacemacs.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/icon-spacemacs.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/online.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/d12frosted/homebrew-emacs-plus/online.yml/master?enable=pin","Info:   0 out of  67 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 28 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T00:06:48.660Z","repository_id":37390637,"created_at":"2025-08-18T00:06:48.660Z","updated_at":"2025-08-18T00:06:48.660Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34844346,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-27T02:00:06.362Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["brew","doom-emacs","emacs","homebrew","spacemacs"],"created_at":"2024-08-04T04:03:34.472Z","updated_at":"2026-06-27T07:00:40.305Z","avatar_url":"https://github.com/d12frosted.png","language":"Ruby","funding_links":["https://github.com/sponsors/d12frosted","https://patreon.com/d12frosted","https://www.patreon.com/d12frosted"],"categories":["Ruby"],"sub_categories":[],"readme":"#+begin_html\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"256px\" src=\"images/emacs.png\" alt=\"Banner\"\u003e\n\u003c/p\u003e\n\u003ch1 align=\"center\"\u003eEmacs Plus\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/d12frosted/homebrew-emacs-plus/actions/workflows/build.yml\"\u003e\n    \u003cimg src=\"https://github.com/d12frosted/homebrew-emacs-plus/actions/workflows/build.yml/badge.svg\" alt=\"Build Status\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/d12frosted/homebrew-emacs-plus/actions/workflows/nightly.yml\"\u003e\n    \u003cimg src=\"https://github.com/d12frosted/homebrew-emacs-plus/actions/workflows/nightly.yml/badge.svg\" alt=\"Nightly Status\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/d12frosted/homebrew-emacs-plus/actions/workflows/build-app.yml\"\u003e\n    \u003cimg src=\"https://github.com/d12frosted/homebrew-emacs-plus/actions/workflows/build-app.yml/badge.svg\" alt=\"Cask Build Status\"\u003e\n  \u003c/a\u003e\n\n  \u003ca href=\"https://github.com/sponsors/d12frosted\"\u003e\u003cimg alt=\"Sponsor\" src=\"https://img.shields.io/badge/Sponsor-d12frosted-pink?logo=githubsponsors\u0026logoColor=white\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n#+end_html\n\n** About\n\nEmacs+ is [[https://www.gnu.org/software/emacs/emacs.html][→ GNU Emacs]] formulae for macOS [[https://brew.sh][→ Homebrew]] package manager. It offers a wide range of extra functionality over regular [[https://formulae.brew.sh/formula/emacs#default][→ Emacs]] package. Emacs+ intent is to give the most of 'plus' stuff by default, leaving only controversial options as opt-in. Please refer to [[#options][→ Options]] section for more information.\n\n#+begin_src bash\n  $ brew tap d12frosted/emacs-plus\n\n  # Homebrew 6.0+ won't load non-official taps until you trust them. If an\n  # install reports an \"untrusted tap\", run `brew trust d12frosted/emacs-plus`\n  # (or trust a single formula/cask) and retry. See https://docs.brew.sh/Tap-Trust.\n\n  # Pre-built binaries (fast, ~1 min)\n  $ brew install --cask emacs-plus-app          # latest stable\n  $ brew install --cask emacs-plus-app@master   # nightly from master\n\n  # Build from source (customizable, ~30 min)\n  $ brew install emacs-plus        [options]    # latest stable\n  $ brew install emacs-plus@master [options]    # from master\n#+end_src\n\n#+begin_html\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"60%\" src=\"images/screenshot-01.png\" alt=\"Screenshot\"\u003e\n\u003c/p\u003e\n#+end_html\n\nFeel free to open an issue or contact me via email if you face any issues, questions or feature requests. I love pull requests, so do send them. You might want to check [[docs/development-guidelines.org][→ Development guidelines]] to have better understanding on how to contribute.\n\nFor recent changes, see [[./NEWS.org][→ News]].\n\n** Table of Contents :TOC_3:\n  - [[#about][About]]\n  - [[#install][Install]]\n    - [[#pre-built-binaries-cask][Pre-built binaries (Cask)]]\n    - [[#build-from-source-formula][Build from source (Formula)]]\n    - [[#installing-from-feature-branch][Installing from feature branch]]\n  - [[#reinstall][Reinstall]]\n  - [[#build-configuration][Build Configuration]]\n    - [[#available-options][Available Options]]\n    - [[#native-compilation-environment-cask][Native Compilation Environment (Cask)]]\n  - [[#emacs-32][Emacs 32]]\n    - [[#included][Included]]\n    - [[#options][Options]]\n    - [[#no-title-bar][No title bar]]\n  - [[#emacs-31][Emacs 31]]\n    - [[#included-1][Included]]\n    - [[#options-1][Options]]\n    - [[#no-title-bar-1][No title bar]]\n  - [[#emacs-30][Emacs 30]]\n    - [[#included-2][Included]]\n    - [[#options-2][Options]]\n    - [[#no-title-bar-2][No title bar]]\n  - [[#emacs-29][Emacs 29]]\n    - [[#included-3][Included]]\n    - [[#options-3][Options]]\n    - [[#no-title-bar-3][No title bar]]\n  - [[#features-explained][Features explained]]\n    - [[#injected-path][Injected PATH]]\n    - [[#detecting-emacs-plus][Detecting Emacs Plus]]\n    - [[#emacs-clientapp][Emacs Client.app]]\n    - [[#no-titlebar][No Titlebar]]\n    - [[#xwidgets-webkit][Xwidgets (webkit)]]\n    - [[#system-appearance-change][System appearance change]]\n    - [[#gccemacs][gccemacs]]\n  - [[#community-features][Community Features]]\n  - [[#icons][Icons]]\n  - [[#emacs-configuration][Emacs configuration]]\n  - [[#known-issues][Known Issues]]\n    - [[#emacs-dependency-in-other-formulas][=emacs= dependency in other formulas]]\n  - [[#old-versions][Old versions]]\n    - [[#emacs-28][Emacs 28]]\n    - [[#emacs-27][Emacs 27]]\n    - [[#emacs-26][Emacs 26]]\n  - [[#faq][FAQ]]\n    - [[#how-to-pin-a-specific-commit][How to pin a specific commit]]\n  - [[#screenshots][Screenshots]]\n  - [[#acknowledgements][Acknowledgements]]\n\n** Install\n\n*** Pre-built binaries (Cask)\n\nFor fast installation without compilation (~1 min), pre-built binaries are available:\n\n#+begin_src bash\n  $ brew tap d12frosted/emacs-plus\n  $ brew install --cask emacs-plus-app           # latest stable\n  $ brew install --cask emacs-plus-app@master    # nightly from master\n#+end_src\n\nCask builds are self-contained applications with all dependencies bundled. They include:\n\n- Native compilation (AOT)\n- =xwidgets=, =tree-sitter=, =mailutils=\n- =Emacs.app= and =Emacs Client.app=\n- Default Emacs icon\n\n*Cask vs Formula:*\n\n| Feature              | Cask (=--cask=)        | Formula                   |\n|----------------------+------------------------+---------------------------|\n| Install time         | ~1 minute (download)   | ~30 minutes (compile)     |\n| Custom build options | No                     | Yes (icons, patches, etc) |\n| macOS versions       | ARM64: 13+, Intel: 15+ | Any supported             |\n| Architectures        | ARM64 and Intel        | Any                       |\n\n*Note:* Cask builds are architecture and macOS version specific. ARM64 has dedicated builds for Sonoma (14), Sequoia (15), and Tahoe (26); Ventura (13) users get the Sonoma build. Intel has a single Sequoia (15) build.\n\nUse the *formula* if you need custom icons, patches, or specific build options. Use the *cask* for quick installation with sensible defaults.\n\n*** Build from source (Formula)\n\nFor custom build options (~30 min compile time):\n\n#+begin_src bash\n  $ brew tap d12frosted/emacs-plus\n  $ brew install emacs-plus        [options]    # latest stable\n  $ brew install emacs-plus@master [options]    # from master\n#+end_src\n\nVersioned formulas are also available: =emacs-plus@32=, =emacs-plus@31=, =emacs-plus@30=, =emacs-plus@29=, etc. The =emacs-plus@master= alias points to the current development version (=emacs-plus@32=).\n\nBy default, formulas build Cocoa Emacs with =gnutls=, =librsvg=, =libxml2=, =tree-sitter=, =webp=, native compilation, dynamic modules, and multicolor fonts. See [[#options][→ Options]] for customization.\n\n*** Installing from feature branch\n\nSometimes you might want to install from a feature branch. In that case you can switch the branch in the tap and install Emacs+ again.\n\nPrerequisites are:\n\n- Emacs+ is tapped (e.g. =brew tap d12frosted/emacs-plus=).\n- =jq= is available (e.g. =brew install jq=).\n\nOpen terminal and type the following commands (don't forget to use correct Emacs+ version, branch and options):\n\n#+begin_src bash\n  $ brew uninstall emacs-plus@29\n  $ cd $(brew tap-info --json d12frosted/emacs-plus@29 | jq -r '.[0].path') \u0026\u0026 git switch BRANCH\n  $ brew install emacs-plus@29 [OPTIONS]\n#+end_src\n\n** Reinstall\n\nIf you wish to reinstall =emacs-plus= with you should not use =reinstall= command of =brew= (not related to this formula, it's a general advice). Instead, you should =uninstall= a package and then =install= it with desired options.\n\nAvoid =reinstall= even if you want to =reinstall= with the same set of options, otherwise you will likely to get compilation errors! For example, [[https://github.com/d12frosted/homebrew-emacs-plus/issues/218][#218]] and [[https://github.com/d12frosted/homebrew-emacs-plus/issues/321][#321]].\n\nIn short, =brew= doesn't really support options. They break time to time ([[https://github.com/Homebrew/brew/issues/4793][brew#4793]], [[https://github.com/Homebrew/brew/issues/7397][brew#7397]], [[https://github.com/Homebrew/brew/issues/7498][brew#7498]] to show a few).\n\n#+BEGIN_SRC bash\n  $ brew uninstall emacs-plus\n  $ brew install emacs-plus [options]\n#+END_SRC\n\n** Build Configuration\n\nEmacs+ can be configured using =~/.config/emacs-plus/build.yml=. This file controls options that are applied during installation (formula) or post-installation (cask).\n\nThe configuration file is searched in this order:\n1. Path specified by =HOMEBREW_EMACS_PLUS_BUILD_CONFIG= environment variable\n2. =~/.config/emacs-plus/build.yml=\n3. =~/.emacs-plus-build.yml= (fallback)\n\n#+begin_src yaml\n# Example build.yml\nicon: dragon-plus\npatches:\n  - fix-window-role\ninject_path: true\n#+end_src\n\n*** Available Options\n\n| Option        | Default | Description                                                                  |\n|---------------+---------+------------------------------------------------------------------------------|\n| =icon=        | /none/  | Custom icon to apply. See [[./community/icons/README.md][→ Icons Gallery]] for available icons.               |\n| =patches=     | /none/  | (Formula only) List of community patches to apply. See [[#community-features][→ Community Features]]. |\n| =revision=    | /none/  | (Formula only) Pin Emacs source to a specific git revision.                  |\n| =inject_path= | =true=  | (Formula only) Inject user's PATH into Emacs.app. See [[#injected-path][→ Injected PATH]].     |\n\nFor more customization options, see [[#community-features][→ Community Features]] for patches and [[#icons][→ Icons]] for icon customization.\n\n** Emacs 32\n\n*** Included\n\nBy default =emacs-plus@32= uses the following features.\n\n- Injected =PATH= value from user shell (see separate section explaining this feature).\n- Cocoa version, e.g. builds =Emacs.app= and =Emacs Client.app= (see [[#emacs-clientapp][→ Emacs Client.app]] for details).\n- Unconditional support for =gnutls=, =librsvg=, =webp=, =libxml2=, =little-cms2=, =tree-sitter= and dynamic modules.\n- Build with native compilation.\n\n*** Options\n\n| Option                    | Description                                                               |\n|---------------------------+---------------------------------------------------------------------------|\n| =--with-compress-install= | build with compressed install optimization                                |\n| =--with-dbus=             | build with dbus support                                                   |\n| =--with-debug=            | build with debug symbols and debugger friendly optimizations              |\n| =--with-mailutils=        | build with mailutils support                                              |\n| =--with-x11=              | build with x11 support (disables Cocoa, no =Emacs.app= bundle)            |\n| =--with-xwidgets=         | build [[#xwidgets-webkit][→ with xwidgets]] support                                             |\n| =--without-cocoa=         | build a non-Cocoa version of Emacs (terminal only, no =Emacs.app= bundle) |\n\n*Note:* Options =--with-x11= and =--without-cocoa= produce terminal/X11 builds that do not include =Emacs.app=. Icon options are ignored for these builds.\n\n*** No title bar\nPlease note, that ~--with-no-titlebar~ is no longer needed in Emacs 30+, since the same can be achieved natively using [[https://github.com/d12frosted/homebrew-emacs-plus#emacs-29-1][this method]].\n\n** Emacs 31\n\n*** Included\n\nBy default =emacs-plus@31= uses the following features.\n\n- Injected =PATH= value from user shell (see separate section explaining this feature).\n- Cocoa version, e.g. builds =Emacs.app= and =Emacs Client.app= (see [[#emacs-clientapp][→ Emacs Client.app]] for details).\n- Unconditional support for =gnutls=, =librsvg=, =webp=, =libxml2=, =little-cms2=, =tree-sitter= and dynamic modules.\n- Build with native compilation.\n\n*** Options\n\n| Option                    | Description                                                               |\n|---------------------------+---------------------------------------------------------------------------|\n| =--with-compress-install= | build with compressed install optimization                                |\n| =--with-dbus=             | build with dbus support                                                   |\n| =--with-debug=            | build with debug symbols and debugger friendly optimizations              |\n| =--with-mailutils=        | build with mailutils support                                              |\n| =--with-x11=              | build with x11 support (disables Cocoa, no =Emacs.app= bundle)            |\n| =--with-xwidgets=         | build [[#xwidgets-webkit][→ with xwidgets]] support                                             |\n| =--without-cocoa=         | build a non-Cocoa version of Emacs (terminal only, no =Emacs.app= bundle) |\n\n*Note:* Options =--with-x11= and =--without-cocoa= produce terminal/X11 builds that do not include =Emacs.app=. Icon options are ignored for these builds.\n\n*** No title bar\nPlease note, that ~--with-no-titlebar~ is no longer needed in Emacs 30+, since the same can be achieved natively using [[https://github.com/d12frosted/homebrew-emacs-plus#emacs-29-1][this method]].\n\n** Emacs 30\n\n*** Included\n\nBy default =emacs-plus@30= uses the following features.\n\n- Injected =PATH= value from user shell (see separate section explaining this feature).\n- Cocoa version, e.g. builds =Emacs.app= and =Emacs Client.app= (see [[#emacs-clientapp][→ Emacs Client.app]] for details).\n- Unconditional support for =gnutls=, =librsvg=, =webp=, =libxml2=, =little-cms2=, =tree-sitter= and dynamic modules.\n- Build with native compilation.\n\n*** Options\n\n| Option                    | Description                                                               |\n|---------------------------+---------------------------------------------------------------------------|\n| =--with-compress-install= | build with compressed install optimization                                |\n| =--with-ctags=            | don't remove the ctags executable that Emacs provides                     |\n| =--with-dbus=             | build with dbus support                                                   |\n| =--with-debug=            | build with debug symbols and debugger friendly optimizations              |\n| =--with-imagemagick=      | build with =imagemagick= support                                          |\n| =--with-mailutils=        | build with mailutils support                                              |\n| =--with-x11=              | build with x11 support (disables Cocoa, no =Emacs.app= bundle)            |\n| =--with-xwidgets=         | build [[#xwidgets-webkit][→ with xwidgets]] support                                             |\n| =--without-cocoa=         | build a non-Cocoa version of Emacs (terminal only, no =Emacs.app= bundle) |\n\n*Note:* Options =--with-x11= and =--without-cocoa= produce terminal/X11 builds that do not include =Emacs.app=. Icon options are ignored for these builds.\n\n*** No title bar\nPlease note, that ~--with-no-titlebar~ is no longer needed in Emacs 30, since the same can be achieved natively using [[https://github.com/d12frosted/homebrew-emacs-plus#emacs-29-1][this method]].\n\n** Emacs 29\n\n*** Included\n\nBy default =emacs-plus@29= uses the following features.\n\n- Injected =PATH= value from user shell (see separate section explaining this feature).\n- Cocoa version, e.g. builds =Emacs.app=.\n- Unconditional support for =gnutls=, =librsvg=, =libxml2=, =little-cms2=, =tree-sitter= and dynamic modules.\n\n*** Options\n\n| Option                    | Description                                                                  |\n|---------------------------+------------------------------------------------------------------------------|\n| =--with-compress-install= | build with compressed install optimization                                   |\n| =--with-ctags=            | don't remove the ctags executable that Emacs provides                        |\n| =--with-dbus=             | build with dbus support                                                      |\n| =--with-debug=            | build with debug symbols and debugger friendly optimizations                 |\n| =--with-imagemagick=      | build with =imagemagick= support                                             |\n| =--with-mailutils=        | build with mailutils support                                                 |\n| =--with-native-comp=      | build with native compilation aka [[#gccemacs][→ gccemacs]]                                 |\n| =--with-no-frame-refocus= | disables frame re-focus (ie. closing one frame does not refocus another one) |\n| =--with-x11=              | build with x11 support (disables Cocoa, no =Emacs.app= bundle)               |\n| =--with-xwidgets=         | build [[#xwidgets-webkit][→ with xwidgets]] support                                                |\n| =--without-cocoa=         | build a non-Cocoa version of Emacs (terminal only, no =Emacs.app= bundle)    |\n\n*Note:* Options =--with-x11= and =--without-cocoa= produce terminal/X11 builds that do not include =Emacs.app=. Icon options are ignored for these builds.\n\n*** No title bar\nPlease note, that ~--with-no-titlebar~ is no longer needed in Emacs 29, since the same can be achieved natively using [[https://github.com/d12frosted/homebrew-emacs-plus#emacs-29-1][this method]].\n\n** Features explained\n\n*** Injected PATH\n\n#+begin_quote\nEver find that a command works in your shell, but not in Emacs?\n\n(c) @purcell\n#+end_quote\n\nIn macOS applications are started in the login environment, meaning that all user defined environment variables are not available in application process. In the most cases it's not a big deal, but in Emacs it becomes a source of troubles as we want to use binaries from the non-standard locations (for example, those installed via package managers).\n\nThere is a wonderful solution to overcome this problem, [[https://github.com/purcell/exec-path-from-shell][purcell/exec-path-from-shell]]. As with any package that is not preinstalled with Emacs, you need to discover it first, and then install it. And while being a well known package and popular package (top 100 on MELPA), not everyone install it. In addition, with =native-comp= feature you might need it's functionality before any package is bootstrapped.\n\n**** Formula builds\n\nFor formula builds (=brew install emacs-plus@30=), Emacs+ captures your shell's PATH at install time and injects it into =Emacs.app=. This makes your PATH available whenever you start =Emacs.app= from Finder, Dock, Spotlight, =open= command, or =launchd=. This solves a wide range of problems for GUI users without the need to use [[https://github.com/purcell/exec-path-from-shell][purcell/exec-path-from-shell]].\n\nTo disable PATH injection for formula builds, set =inject_path: false= in your =build.yml= and reinstall:\n\n#+begin_src yaml\ninject_path: false\n#+end_src\n\nIn case you have a non-trivial setup relying on specific value of =PATH= inherited from current terminal session, it is advised to start Emacs using =/opt/homebrew/bin/emacs= instead of =open -n -a /path/to/Emacs.app=, because =open= messes around with =PATH= value even without Emacs+ injection. You can find more information in [[https://github.com/d12frosted/homebrew-emacs-plus/issues/469][#469]].\n\n**** Cask builds\n\nFor cask builds (=brew install --cask emacs-plus-app=), PATH injection is *not available* due to a Homebrew limitation - cask postflight doesn't have access to the user's shell environment. Native compilation still works because =LIBRARY_PATH= is injected.\n\nCask users who need their shell PATH in Emacs should use [[https://github.com/purcell/exec-path-from-shell][purcell/exec-path-from-shell]]:\n\n#+begin_src elisp\n(exec-path-from-shell-initialize)\n#+end_src\n\nIf you need full PATH injection, use the formula instead of the cask.\n\n*** Detecting Emacs Plus\n\nStarting with =emacs-plus@30=, =emacs-plus@31=, and =emacs-plus@32=, the following variables are defined in =site-start.el=:\n\n| Variable                      | Description                                                           |\n|-------------------------------+-----------------------------------------------------------------------|\n| =ns-emacs-plus-version=       | Major version of Emacs Plus (e.g., 30, 31, or 32)                     |\n| =ns-emacs-plus-injected-path= | Non-nil if user PATH was injected (formula with =inject_path: true=)  |\n\nThis allows you to detect Emacs Plus and conditionally configure your init.el:\n\n#+begin_src elisp\n(when (bound-and-true-p ns-emacs-plus-version)\n  ;; Emacs Plus specific configuration\n  )\n\n;; Skip exec-path-from-shell if PATH was already injected\n(unless (bound-and-true-p ns-emacs-plus-injected-path)\n  (exec-path-from-shell-initialize))\n\n;; Check specific version\n(when (and (bound-and-true-p ns-emacs-plus-version)\n           (\u003e= ns-emacs-plus-version 31))\n  ;; Emacs Plus 31+ specific\n  )\n#+end_src\n\nThis is useful for conditionally enabling features that are specific to Emacs Plus, such as the =ns-system-appearance-change-functions= hook.\n\n*** Emacs Client.app\n\nStarting with =emacs-plus@30=, =emacs-plus@31=, and =emacs-plus@32=, the formula includes a companion application called =Emacs Client.app=. This application provides a user-friendly way to open files in Emacs from Finder, Spotlight, and other macOS applications.\n\n**** When to use Emacs.app vs Emacs Client.app\n\n| Application        | Use Case                                                                                          |\n|--------------------+---------------------------------------------------------------------------------------------------|\n| *Emacs.app*        | Launch Emacs directly, start a new Emacs session, or when you want full control over the instance |\n| *Emacs Client.app* | Open files from Finder, set as default application for file types, quick file editing             |\n\n**** How it works\n\n=Emacs Client.app= connects to an existing Emacs daemon (or starts one automatically) using =emacsclient=. This means:\n\n- *Fast startup* - No need to launch a full Emacs instance for each file\n- *Shared session* - All files opened via Emacs Client appear in the same Emacs session\n- *Seamless integration* - Works with \"Open With\" in Finder, drag-and-drop, and can be set as the default application for text files\n- *org-protocol support* - Handles =org-protocol://= URLs for org-capture, org-roam, and other integrations\n\n**** Usage\n\nAfter installation, create aliases in =/Applications= (the formula will suggest these commands in the caveats):\n\n#+begin_src bash\n  # Get the installation prefix (use emacs-plus@30, emacs-plus@31, or emacs-plus@32)\n  PREFIX=$(brew --prefix emacs-plus@30)\n\n  # Create aliases in /Applications\n  osascript -e 'tell application \"Finder\" to make alias file to posix file \"'$PREFIX'/Emacs.app\" at posix file \"/Applications\" with properties {name:\"Emacs.app\"}'\n  osascript -e 'tell application \"Finder\" to make alias file to posix file \"'$PREFIX'/Emacs Client.app\" at posix file \"/Applications\" with properties {name:\"Emacs Client.app\"}'\n#+end_src\n\nYou can then:\n- Right-click files in Finder → \"Open With\" → \"Emacs Client\"\n- Drag files onto the Emacs Client.app icon\n- Set Emacs Client as the default application for specific file types\n- Launch from Spotlight to create a new Emacs frame\n- Use =org-protocol://= URLs from browser extensions (requires =(require 'org-protocol)= in your init file)\n\nThe implementation uses AppleScript to properly handle macOS AppleEvents, ensuring files opened from Finder are correctly passed to =emacsclient=. PATH injection works the same as in =Emacs.app= (see [[#injected-path][→ Injected PATH]]).\n\nFor more details, see [[file:docs/emacs-client-app.md][→ docs/emacs-client-app.md]].\n\n*** No Titlebar\n\n| square corners                                    | round corners                                    |\n|---------------------------------------------------+--------------------------------------------------|\n| [[/images/screenshot-no-titlebar-square-corners.png]] | [[/images/screenshot-no-titlebar-round-corners.png]] |\n\n**** Emacs 28 and Emacs 27\n\nThis patch is enabled with the =--with-no-titlebar= option for =emacs-plus@27= and =emacs-plus@28=. It is meant for use with window tiling applications like [[https://github.com/koekeishiya/yabai][→ yabai]] or [[https://github.com/ianyh/Amethyst][→ amethyst]] so that the titlebar won't take up screen real estate.\n\nUse =--with-no-titlebar-and-round-corners= option (instead of =--with-no-titlebar=), if you want to keep round corners (for example, to be consistent with other macOS applications).\n\nIf you see gaps between your emacs frames and other windows, try this:\n\n#+BEGIN_SRC emacs-lisp\n  (setq frame-resize-pixelwise t)\n#+END_SRC\n\n**** Emacs 29+\n\nIn =emacs-plus@29=, =emacs-plus@30=, =emacs-plus@31=, and =emacs-plus@32= this option is not available anymore as you can achieve the same result using Emacs Lisp by adding the following line in your =early-init.el= file:\n\n#+begin_src emacs-lisp\n  (add-to-list 'default-frame-alist '(undecorated . t))\n#+end_src\n\nAdd the following line instead for round corners:\n\n#+begin_src emacs-lisp\n  (add-to-list 'default-frame-alist '(undecorated-round . t))\n#+end_src\n\n*** Xwidgets (webkit)\n\nBrowse the web in Emacs as in modern browser.\n\nThe original [[https://www.emacswiki.org/emacs/EmacsXWidgets][→ Emacs xwidgets]] builds and works on macOS however must be used with X11 and hence not practical option on macOS. This version enables =xwidgets= on native macOS Cocoa via embedding a native webkit window.\n\nMore details can be seen here [[https://github.com/veshboo/emacs][→ Veshboo's emacs branch]].\n\n*** System appearance change\n\nThis patch is enabled by default and can't be disabled. It adds a hook, =ns-system-appearance-change-functions=, that is called once the system appearance is changed. Functions added to this hook will be called with one argument, a symbol that is either =light= or =dark=. This mainly allows loading a different theme to better match the system appearance.\n\n#+begin_src emacs-lisp\n  (defun my/apply-theme (appearance)\n    \"Load theme, taking current system APPEARANCE into consideration.\"\n    (mapc #'disable-theme custom-enabled-themes)\n    (pcase appearance\n      ('light (load-theme 'tango t))\n      ('dark (load-theme 'tango-dark t))))\n\n  (add-hook 'ns-system-appearance-change-functions #'my/apply-theme)\n#+end_src\n\nNote that this hook is also run once when Emacs is initialized, so simply adding the above to your =init.el= will allow matching the system appearance upon startup. You can also determine what the current system appearance is by inspecting the value of the =ns-system-appearance= variable.\n\nThe hook is NOT run in TTY Emacs sessions.\n\n*** gccemacs\n\n#+begin_quote\ngccemacs is a modified Emacs capable of compiling and running Emacs Lisp as native code in form of re-loadable elf files. As the name suggests this is achieved blending together Emacs and the gcc infrastructure.\n\n[[https://akrl.sdf.org/gccemacs.html][→ Andrea Corallo]]\n#+end_quote\n\nWhile =gccemacs= gives performance boost in many scenarios, this feature is still experimental and might require time and effort from your side for it to work! Use at our own risk :)\n\nPlease see official [[https://akrl.sdf.org/gccemacs.html][→ gccemacs documentation]] for more information.\n\nKnows issues:\n\n- =ld: library not found for -lSystem=. This only happens on older versions of =gcc= installed by Homebrew. Please execute =$ brew reinstall gcc libgccjit= to resolve this issue.\n- Errors during compilation of your =init.el=. Try running Emacs with =-Q= option and give it some time to compile everything (maybe run =M-x= to force compilation) - you shall see buffer =*Async-native-compile-log*= in the list of buffers.\n\n** Community Features\n\nEmacs+ supports custom patches and icons through a configuration file. This allows you to use community-maintained features or your own external resources.\n\nCreate =~/.config/emacs-plus/build.yml=:\n\n#+begin_src yaml\n# Use a community icon (see community/registry.json for available options)\nicon: modern-purple-flat\n\n# Use an external icon (requires SHA256 verification)\n# icon:\n#   url: https://example.com/my-icon.icns\n#   sha256: abc123...\n\n# Pin to a specific git revision (version-specific)\n# revision:\n#   \"30\": abc123def456\n#   \"31\": 789abcdef123\n\n# Apply community patches\n# patches:\n#   - patch-name-from-registry\n#   - my-patch:\n#       url: https://example.com/external.patch\n#       sha256: abc123...\n#   - local-patch:\n#       url: ~/.config/emacs-plus/my-local.patch\n#       sha256: abc123...\n#+end_src\n\nThen rebuild Emacs:\n\n#+begin_src bash\n$ brew reinstall emacs-plus@30\n#+end_src\n\nFor more information, see [[./community/README.md][→ Community Documentation]].\n\n** Icons\n\nEmacs+ supports 76 custom icons. To use one, add it to your =~/.config/emacs-plus/build.yml=:\n\n#+begin_src yaml\nicon: dragon-plus\n#+end_src\n\nSee the [[./community/icons/README.md][→ Icons Gallery]] for all available icons with previews.\n\n#+begin_quote\n*Note*: The =--with-*-icon= command line options are deprecated and will be removed on 2026-03-14. Please migrate to using =build.yml=.\n#+end_quote\n\n** Emacs configuration\n\nEmacs is a journey. And for some of you these projects might be inspiring.\n\n- [[https://github.com/purcell/emacs.d][→ Steve Purcell's .emacs.d]]\n- [[https://github.com/syl20bnr/spacemacs/][→ Spacemacs]]\n- [[https://github.com/hlissner/doom-emacs][→ doom-emacs]]\n- [[https://github.com/bbatsov/prelude][→ Prelude]]\n- [[https://github.com/seagle0128/.emacs.d][→ Centuar Emacs]]\n\n** Known Issues\n\nPlease checkout [[https://github.com/d12frosted/homebrew-emacs-plus/issues][→ Issues]] page for a list of all known issues. But here are several you should be aware of.\n\n*** =emacs= dependency in other formulas\n\nIn some cases (like when installing =cask=) regular =emacs= package will be required. In such cases you might want to install all dependencies manually (except for =emacs=) and then install desired package with =--ignore-dependencies= option.\n\n#+BEGIN_SRC bash\n$ brew install cask --ignore-dependencies\n#+END_SRC\n\n** Old versions\n\nThis repository provides formulas for some older version. Feel free to use them, but they are not really supported anymore.\n\n  #+begin_src bash\n  $ brew tap d12frosted/emacs-plus\n  $ brew install emacs-plus@28 [options] # install Emacs 28\n  $ brew install emacs-plus@27 [options] # install Emacs 27\n  $ brew install emacs-plus@26 [options] # install Emacs 26\n#+end_src\n\n*** Emacs 28\n\n**** Included\n\nBy default =emacs-plus@28= uses the following features.\n\n- Injected =PATH= value from user shell (see separate section explaining this feature).\n- Cocoa version, e.g. builds =Emacs.app=.\n- Unconditional support for =gnutls=, =librsvg=, =libxml2=, =little-cms2= and dynamic modules.\n\n**** Options\n\n| Option                                 | Description                                                                  |\n|----------------------------------------+------------------------------------------------------------------------------|\n| =--with-ctags=                         | don't remove the ctags executable that Emacs provides                        |\n| =--with-dbus=                          | build with dbus support                                                      |\n| =--with-debug=                         | build with debug symbols and debugger friendly optimizations                 |\n| =--with-mailutils=                     | build with mailutils support                                                 |\n| =--with-no-frame-refocus=              | disables frame re-focus (ie. closing one frame does not refocus another one) |\n| =--with-no-titlebar=                   | build [[#no-titlebar][→ without titlebar]]                                                     |\n| =--with-no-titlebar-and-round-corners= | build [[#no-titlebar][→ without titlebar]], but round corners instead of square                |\n| =--with-x11=                           | build with x11 support (disables Cocoa, no =Emacs.app= bundle)               |\n| =--with-xwidgets=                      | build [[#xwidgets-webkit][→ with xwidgets]] support                                                |\n| =--without-cocoa=                      | build a non-Cocoa version of Emacs (terminal only, no =Emacs.app= bundle)    |\n| =--with-imagemagick=                   | build with =imagemagick= support                                             |\n| =--HEAD=                               | build from =emacs-28= branch                                                 |\n| =--with-native-comp=                   | build with native compilation aka [[#gccemacs][→ gccemacs]]                                 |\n|                                        |                                                                              |\n\n*Note:* Options =--with-x11= and =--without-cocoa= produce terminal/X11 builds that do not include =Emacs.app=. Icon options are ignored for these builds.\n\n*** Emacs 27\n\n**** Included\n\nBy default =emacs-plus@27= uses the following features.\n\n- Cocoa version, e.g. builds =Emacs.app=.\n- Unconditional support for =gnutls=, =librsvg=, =libxml2=, =little-cms2= and dynamic modules.\n\n**** Options\n\n| Option                    | Description                                                                  |\n|---------------------------+------------------------------------------------------------------------------|\n| =--with-ctags=            | don't remove the ctags executable that Emacs provides                        |\n| =--with-dbus=             | build with dbus support                                                      |\n| =--with-debug=            | build with debug symbols and debugger friendly optimizations                 |\n| =--with-mailutils=        | build with mailutils support                                                 |\n| =--with-no-frame-refocus= | disables frame re-focus (ie. closing one frame does not refocus another one) |\n| =--with-no-titlebar=      | build [[#no-titlebar][→ without titlebar]]                                                     |\n| =--with-x11=              | build with x11 support (disables Cocoa, no =Emacs.app= bundle)               |\n| =--with-xwidgets=         | build [[#xwidgets-webkit][→ with xwidgets]] support                                                |\n| =--without-cocoa=         | build a non-Cocoa version of Emacs (terminal only, no =Emacs.app= bundle)    |\n| =--without-imagemagick=   | build without =imagemagick= support                                          |\n| =--HEAD=                  | build from =emacs-27= branch                                                 |\n\n*Note:* Options =--with-x11= and =--without-cocoa= produce terminal/X11 builds that do not include =Emacs.app=. Icon options are ignored for these builds.\n\n*** Emacs 26\n\nEmacs 26 comes without any available options due to [[https://github.com/d12frosted/homebrew-emacs-plus/issues/195][→ #195]].\n\n** FAQ\n\n*** How to pin a specific commit\n\nDevelopment versions (=emacs-plus@31=, =emacs-plus@32=) are built from their respective branches (=emacs-31=, =master=). Ordinarily, =brew= will update to the latest commit during installation.\n\nAs development versions are less stable than official releases, you may want to pin a specific commit. The recommended way is to use =~/.config/emacs-plus/build.yml=:\n\n#+begin_src yaml\nrevision:\n  \"31\": 6abea4d98d1d964c68a78cb9b5321071da851654\n  \"32\": abc123def456789\n#+end_src\n\nThen install or reinstall:\n\n#+begin_src bash\n  $ brew reinstall emacs-plus@30\n#+end_src\n\nThe build will display the pinned revision during installation.\n\n#+begin_quote\n*Deprecated*: Environment variables =HOMEBREW_EMACS_PLUS_30_REVISION= and =HOMEBREW_EMACS_PLUS_31_REVISION= still work but are deprecated. Please migrate to =build.yml=.\n#+end_quote\n\n** Screenshots\n\n#+BEGIN_HTML\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"images/screenshot-01.png\"\u003e\n\u003c/p\u003e\n#+END_HTML\n\n#+BEGIN_HTML\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"images/screenshot-02.png\"\u003e\n\u003c/p\u003e\n#+END_HTML\n\n** Acknowledgements\n\nMany thanks to all [[https://github.com/d12frosted/homebrew-emacs-plus/graphs/contributors][→ contributors]], issue reporters and bottle providers ([[https://github.com/wadkar][→ Sudarshan Wadkar]], [[https://github.com/jonhermansen][→ Jon Hermansen]]).\n\n* Support\n\nIf you enjoy this project, you can support its development via [[https://github.com/sponsors/d12frosted][GitHub Sponsors]] or [[https://www.patreon.com/d12frosted][Patreon]].\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fd12frosted%2Fhomebrew-emacs-plus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fd12frosted%2Fhomebrew-emacs-plus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fd12frosted%2Fhomebrew-emacs-plus/lists"}