CINXE.COM
FAQ (Frequently Asked Questions) — Homebrew Documentation
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Security-Policy" content="default-src 'none'; connect-src https://D9HG3G8GS4-dsn.algolia.net; font-src data: https://fonts.gstatic.com; img-src 'self' https://avatars2.githubusercontent.com https://avatars.githubusercontent.com; object-src 'none'; script-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net ; style-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net; "> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>FAQ (Frequently Asked Questions) — Homebrew Documentation</title> <!-- Begin Jekyll SEO tag v2.8.0 --> <meta name="generator" content="Jekyll v3.10.0"> <meta property="og:title" content="FAQ (Frequently Asked Questions)"> <meta property="og:locale" content="en_US"> <meta name="description" content="Documentation for the missing package manager for macOS (or Linux)."> <meta property="og:description" content="Documentation for the missing package manager for macOS (or Linux)."> <link rel="canonical" href="https://docs.brew.sh/FAQ"> <meta property="og:url" content="https://docs.brew.sh/FAQ"> <meta property="og:site_name" content="Homebrew Documentation"> <meta property="og:image" content="https://docs.brew.sh/assets/img/homebrew-256x256.png"> <meta property="og:type" content="website"> <meta name="twitter:card" content="summary_large_image"> <meta property="twitter:image" content="https://docs.brew.sh/assets/img/homebrew-256x256.png"> <meta property="twitter:title" content="FAQ (Frequently Asked Questions)"> <meta name="twitter:site" content="@MacHomebrew"> <meta property="article:publisher" content="https://www.facebook.com/machomebrew/"> <script type="application/ld+json"> {"@context":"https://schema.org","@type":"WebPage","description":"Documentation for the missing package manager for macOS (or Linux).","headline":"FAQ (Frequently Asked Questions)","image":"https://docs.brew.sh/assets/img/homebrew-256x256.png","publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://docs.brew.sh/assets/img/homebrew.svg"}},"url":"https://docs.brew.sh/FAQ"}</script> <!-- End Jekyll SEO tag --> <meta name="viewport" content="width=device-width"> <link rel="icon" href="/assets/img/favicon.ico" sizes="48x48"> <link rel="icon" href="/assets/img/homebrew.svg" sizes="any" type="image/svg+xml"> <link rel="apple-touch-icon" href="/assets/img/apple-touch-icon.png"> <link rel="stylesheet" href="/assets/css/style.css" type="text/css" media="screen"> <link rel="preconnect" href="https://D9HG3G8GS4-dsn.algolia.net" crossorigin> <link rel="preload" href="https://cdn.jsdelivr.net/npm/@docsearch/css@3/dist/style.min.css" as="style" media="screen" onload="this.onload=null;this.rel='stylesheet'"> </head> <body> <div id="wrap"> <div id="header"> <img alt="Homebrew Documentation logo" src="/assets/img/homebrew.svg" width="128" height="128"> <h1><a href="/">Homebrew Documentation</a></h1> <div id="search-container"></div> </div> <div id="page"> <h1 id="faq-frequently-asked-questions">FAQ (Frequently Asked Questions)</h1> <ul id="markdown-toc"> <li><a href="#is-there-a-glossary-of-terms-around" id="markdown-toc-is-there-a-glossary-of-terms-around">Is there a glossary of terms around?</a></li> <li><a href="#how-do-i-update-my-local-packages" id="markdown-toc-how-do-i-update-my-local-packages">How do I update my local packages?</a></li> <li><a href="#how-do-i-stop-certain-formulae-from-being-updated" id="markdown-toc-how-do-i-stop-certain-formulae-from-being-updated">How do I stop certain formulae from being updated?</a></li> <li><a href="#how-do-i-uninstall-homebrew" id="markdown-toc-how-do-i-uninstall-homebrew">How do I uninstall Homebrew?</a></li> <li><a href="#how-do-i-keep-old-versions-of-a-formula-when-upgrading" id="markdown-toc-how-do-i-keep-old-versions-of-a-formula-when-upgrading">How do I keep old versions of a formula when upgrading?</a></li> <li><a href="#why-does-brew-upgrade-formula-or-brew-install-formula-also-upgrade-a-bunch-of-other-stuff" id="markdown-toc-why-does-brew-upgrade-formula-or-brew-install-formula-also-upgrade-a-bunch-of-other-stuff">Why does <code class="language-plaintext highlighter-rouge">brew upgrade <formula></code> or <code class="language-plaintext highlighter-rouge">brew install <formula></code> also upgrade a bunch of other stuff?</a></li> <li><a href="#where-does-stuff-get-downloaded" id="markdown-toc-where-does-stuff-get-downloaded">Where does stuff get downloaded?</a></li> <li><a href="#my-mac-apps-dont-find-homebrew-utilities" id="markdown-toc-my-mac-apps-dont-find-homebrew-utilities">My Mac <code class="language-plaintext highlighter-rouge">.app</code>s don’t find Homebrew utilities!</a></li> <li><a href="#how-do-i-contribute-to-homebrew" id="markdown-toc-how-do-i-contribute-to-homebrew">How do I contribute to Homebrew?</a></li> <li><a href="#why-do-you-compile-everything" id="markdown-toc-why-do-you-compile-everything">Why do you compile everything?</a></li> <li><a href="#why-should-i-install-homebrew-in-the-default-location" id="markdown-toc-why-should-i-install-homebrew-in-the-default-location">Why should I install Homebrew in the default location?</a></li> <li><a href="#why-is-the-default-installation-prefix-opthomebrew-on-apple-silicon" id="markdown-toc-why-is-the-default-installation-prefix-opthomebrew-on-apple-silicon">Why is the default installation prefix <code class="language-plaintext highlighter-rouge">/opt/homebrew</code> on Apple Silicon?</a></li> <li><a href="#why-is-the-default-installation-prefix-homelinuxbrewlinuxbrew-on-linux" id="markdown-toc-why-is-the-default-installation-prefix-homelinuxbrewlinuxbrew-on-linux">Why is the default installation prefix <code class="language-plaintext highlighter-rouge">/home/linuxbrew/.linuxbrew</code> on Linux?</a></li> <li><a href="#why-does-homebrew-say-sudo-is-bad" id="markdown-toc-why-does-homebrew-say-sudo-is-bad">Why does Homebrew say sudo is bad?</a></li> <li><a href="#why-isnt-a-particular-command-documented" id="markdown-toc-why-isnt-a-particular-command-documented">Why isn’t a particular command documented?</a></li> <li><a href="#why-havent-you-merged-my-pull-request" id="markdown-toc-why-havent-you-merged-my-pull-request">Why haven’t you merged my pull request?</a></li> <li><a href="#can-i-edit-formulae-myself" id="markdown-toc-can-i-edit-formulae-myself">Can I edit formulae myself?</a></li> <li><a href="#can-i-make-new-formulae" id="markdown-toc-can-i-make-new-formulae">Can I make new formulae?</a></li> <li><a href="#how-do-i-get-a-formula-from-someone-elses-pull-request" id="markdown-toc-how-do-i-get-a-formula-from-someone-elses-pull-request">How do I get a formula from someone else’s pull request?</a></li> <li><a href="#why-was-a-formula-deleted-or-disabled" id="markdown-toc-why-was-a-formula-deleted-or-disabled">Why was a formula deleted or disabled?</a></li> <li><a href="#homebrew-is-a-poor-name-its-too-generic-why-was-it-chosen" id="markdown-toc-homebrew-is-a-poor-name-its-too-generic-why-was-it-chosen">Homebrew is a poor name, it’s too generic; why was it chosen?</a></li> <li><a href="#what-does-keg-only-mean" id="markdown-toc-what-does-keg-only-mean">What does “keg-only” mean?</a></li> <li><a href="#how-can-i-specify-different-configure-arguments-for-a-formula" id="markdown-toc-how-can-i-specify-different-configure-arguments-for-a-formula">How can I specify different configure arguments for a formula?</a></li> <li><a href="#why-cant-i-open-a-mac-app-from-an-unidentified-developer" id="markdown-toc-why-cant-i-open-a-mac-app-from-an-unidentified-developer">Why can’t I open a Mac app from an “unidentified developer”?</a></li> <li><a href="#why-arent-some-apps-included-during-brew-upgrade" id="markdown-toc-why-arent-some-apps-included-during-brew-upgrade">Why aren’t some apps included during <code class="language-plaintext highlighter-rouge">brew upgrade</code>?</a></li> <li><a href="#why-do-my-cask-apps-lose-their-dock-position--launchpad-position--permission-settings-when-i-run-brew-upgrade" id="markdown-toc-why-do-my-cask-apps-lose-their-dock-position--launchpad-position--permission-settings-when-i-run-brew-upgrade">Why do my cask apps lose their Dock position / Launchpad position / permission settings when I run <code class="language-plaintext highlighter-rouge">brew upgrade</code>?</a></li> </ul> <h2 id="is-there-a-glossary-of-terms-around">Is there a glossary of terms around?</h2> <p>The Formula Cookbook has a list of <a href="/Formula-Cookbook#homebrew-terminology">Homebrew terminology</a>.</p> <h2 id="how-do-i-update-my-local-packages">How do I update my local packages?</h2> <p>First update all package definitions (formulae) and Homebrew itself:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew update </code></pre></div></div> <p>You can now list which of your installed packages (kegs) are outdated with:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew outdated </code></pre></div></div> <p>Upgrade everything with:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew upgrade </code></pre></div></div> <p>Or upgrade a specific formula with:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew upgrade <formula> </code></pre></div></div> <h2 id="how-do-i-stop-certain-formulae-from-being-updated">How do I stop certain formulae from being updated?</h2> <p>To stop something from being updated/upgraded:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew pin <formula> </code></pre></div></div> <p>To allow that formulae to update again:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew unpin <formula> </code></pre></div></div> <p>Note that pinned, outdated formulae that another formula depends on need to be upgraded when required, as we do not allow formulae to be built against outdated versions. If this is not desired, you can instead use <code class="language-plaintext highlighter-rouge">brew extract</code> to <a href="/How-to-Create-and-Maintain-a-Tap">maintain your own copy of the formula in a tap</a>.</p> <h2 id="how-do-i-uninstall-homebrew">How do I uninstall Homebrew?</h2> <p>To uninstall Homebrew, run the <a href="https://github.com/homebrew/install#uninstall-homebrew">uninstall script from the Homebrew/install repository</a>.</p> <h2 id="how-do-i-keep-old-versions-of-a-formula-when-upgrading">How do I keep old versions of a formula when upgrading?</h2> <p>Homebrew automatically uninstalls old versions of each formula that is upgraded with <code class="language-plaintext highlighter-rouge">brew upgrade</code>, and periodically performs additional cleanup every 30 days.</p> <p>To <strong>disable</strong> automatic <code class="language-plaintext highlighter-rouge">brew cleanup</code>:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>export HOMEBREW_NO_INSTALL_CLEANUP=1 </code></pre></div></div> <p>To disable automatic <code class="language-plaintext highlighter-rouge">brew cleanup</code> only for formulae <code class="language-plaintext highlighter-rouge">foo</code> and <code class="language-plaintext highlighter-rouge">bar</code>:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>export HOMEBREW_NO_CLEANUP_FORMULAE=foo,bar </code></pre></div></div> <p>When automatic <code class="language-plaintext highlighter-rouge">brew cleanup</code> is disabled, if you uninstall a formula, it will only remove the latest version you have installed. It will not remove all versions of the formula that you may have installed in the past. Homebrew will continue to attempt to install the newest version it knows about when you run <code class="language-plaintext highlighter-rouge">brew upgrade</code>. This can be surprising.</p> <p>In this case, to remove a formula entirely, you may run <code class="language-plaintext highlighter-rouge">brew uninstall --force <formula></code>. Be careful as this is a destructive operation.</p> <h2 id="why-does-brew-upgrade-formula-or-brew-install-formula-also-upgrade-a-bunch-of-other-stuff">Why does <code class="language-plaintext highlighter-rouge">brew upgrade <formula></code> or <code class="language-plaintext highlighter-rouge">brew install <formula></code> also upgrade a bunch of other stuff?</h2> <p>Homebrew doesn’t support arbitrary mixing and matching of formula versions, so everything a formula depends on, and everything that depends on it in turn, needs to be upgraded to the latest version as that’s the only combination of formulae we test. As a consequence any given <code class="language-plaintext highlighter-rouge">upgrade</code> or <code class="language-plaintext highlighter-rouge">install</code> command can upgrade many other (seemingly unrelated) formulae, especially if something important like <code class="language-plaintext highlighter-rouge">python</code> or <code class="language-plaintext highlighter-rouge">openssl</code> also needed an upgrade.</p> <h2 id="where-does-stuff-get-downloaded">Where does stuff get downloaded?</h2> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew --cache </code></pre></div></div> <p>Which is usually: <code class="language-plaintext highlighter-rouge">~/Library/Caches/Homebrew</code></p> <h2 id="my-mac-apps-dont-find-homebrew-utilities">My Mac <code class="language-plaintext highlighter-rouge">.app</code>s don’t find Homebrew utilities!</h2> <p>GUI apps on macOS don’t have Homebrew’s prefix in their <code class="language-plaintext highlighter-rouge">PATH</code> by default. If you’re on Mountain Lion or later, you can fix this by running <code class="language-plaintext highlighter-rouge">sudo launchctl config user path "$(brew --prefix)/bin:${PATH}"</code> and then rebooting, as documented in <code class="language-plaintext highlighter-rouge">man launchctl</code>. Note that this sets the <code class="language-plaintext highlighter-rouge">launchctl</code> <code class="language-plaintext highlighter-rouge">PATH</code> for <em>all users</em>. For earlier versions of macOS, see <a href="https://developer.apple.com/legacy/library/qa/qa1067/_index.html">this page</a>.</p> <h2 id="how-do-i-contribute-to-homebrew">How do I contribute to Homebrew?</h2> <p>Read our <a href="https://github.com/Homebrew/brew/blob/HEAD/CONTRIBUTING.md#contributing-to-homebrew">contribution guidelines</a>.</p> <h2 id="why-do-you-compile-everything">Why do you compile everything?</h2> <p>Homebrew provides pre-built binary packages for many formulae. These are referred to as <a href="/Bottles">bottles</a> and are available at <a href="https://github.com/Homebrew/homebrew-core/packages">https://github.com/Homebrew/homebrew-core/packages</a>.</p> <p>If available, bottled binaries will be used by default except under the following conditions:</p> <ul> <li>The <code class="language-plaintext highlighter-rouge">--build-from-source</code> option is invoked.</li> <li>No bottle is available for the machine’s currently running OS version. (Bottles for macOS are generated only for supported macOS versions.)</li> <li>Homebrew is installed to a prefix other than the default (although some bottles support this).</li> <li>Formula options were passed to the install command. For example, <code class="language-plaintext highlighter-rouge">brew install <formula></code> will try to find a bottled binary, but <code class="language-plaintext highlighter-rouge">brew install --with-foo <formula></code> will trigger a source build.</li> </ul> <p>We aim to bottle everything.</p> <h2 id="why-should-i-install-homebrew-in-the-default-location">Why should I install Homebrew in the default location?</h2> <p>Homebrew’s pre-built binary packages (known as <a href="/Bottles">bottles</a>) of many formulae can only be used if you install in the default installation prefix, otherwise they have to be built from source. Building from source takes a long time, is prone to failure, and is not supported. The default prefix is:</p> <ul> <li><code class="language-plaintext highlighter-rouge">/opt/homebrew</code> for macOS on Apple Silicon,</li> <li><code class="language-plaintext highlighter-rouge">/usr/local</code> for macOS on Intel, and</li> <li><code class="language-plaintext highlighter-rouge">/home/linuxbrew/.linuxbrew</code> for Linux.</li> </ul> <p>Do yourself a favour and install to the default prefix so that you can use our pre-built binary packages. <em>Pick another prefix at your peril!</em></p> <h2 id="why-is-the-default-installation-prefix-opthomebrew-on-apple-silicon">Why is the default installation prefix <code class="language-plaintext highlighter-rouge">/opt/homebrew</code> on Apple Silicon?</h2> <p>The prefix <code class="language-plaintext highlighter-rouge">/opt/homebrew</code> was chosen to allow installations in <code class="language-plaintext highlighter-rouge">/opt/homebrew</code> for Apple Silicon and <code class="language-plaintext highlighter-rouge">/usr/local</code> for Rosetta 2 to coexist and use bottles.</p> <h2 id="why-is-the-default-installation-prefix-homelinuxbrewlinuxbrew-on-linux">Why is the default installation prefix <code class="language-plaintext highlighter-rouge">/home/linuxbrew/.linuxbrew</code> on Linux?</h2> <p>The prefix <code class="language-plaintext highlighter-rouge">/home/linuxbrew/.linuxbrew</code> was chosen so that users without admin access can still benefit from precompiled binaries via a <code class="language-plaintext highlighter-rouge">linuxbrew</code> role account. If you do not yourself have admin privileges, consider asking your admin staff to create a <code class="language-plaintext highlighter-rouge">linuxbrew</code> role account for you with home directory <code class="language-plaintext highlighter-rouge">/home/linuxbrew</code>.</p> <h2 id="why-does-homebrew-say-sudo-is-bad">Why does Homebrew say sudo is bad?</h2> <p><strong>tl;dr</strong> Sudo is dangerous, and you installed TextMate.app without sudo anyway.</p> <p>Homebrew refuses to work using sudo.</p> <p>You should only ever sudo a tool you trust. Of course, you can trust Homebrew 😉 — but do you trust the multi-megabyte Makefile that Homebrew runs? Developers often understand C++ far better than they understand <code class="language-plaintext highlighter-rouge">make</code> syntax. It’s too high a risk to sudo such stuff. It could modify (or upload) any files on your system. And indeed, we’ve seen some build scripts try to modify <code class="language-plaintext highlighter-rouge">/usr</code> even when the prefix was specified as something else entirely.</p> <p>We use the macOS sandbox to stop this but this doesn’t work when run as the <code class="language-plaintext highlighter-rouge">root</code> user (which also has read and write access to almost everything on the system).</p> <p>Did you <code class="language-plaintext highlighter-rouge">chown root /Applications/TextMate.app</code>? Probably not. So is it that important to <code class="language-plaintext highlighter-rouge">chown root wget</code>?</p> <p>If you need to run Homebrew in a multi-user environment, consider creating a separate user account specifically for use of Homebrew.</p> <h2 id="why-isnt-a-particular-command-documented">Why isn’t a particular command documented?</h2> <p>If it’s not in <a href="/Manpage"><code class="language-plaintext highlighter-rouge">man brew</code></a>, it’s probably an <a href="/External-Commands">external command</a> with documentation available using <code class="language-plaintext highlighter-rouge">--help</code>.</p> <h2 id="why-havent-you-merged-my-pull-request">Why haven’t you merged my pull request?</h2> <p>If all maintainer feedback has been addressed and all tests are passing, bump it with a “bump” comment. Sometimes we miss requests and there are plenty of them. In the meantime, rebase your pull request so that it can be more easily merged.</p> <h2 id="can-i-edit-formulae-myself">Can I edit formulae myself?</h2> <p>Yes! It’s easy! If <code class="language-plaintext highlighter-rouge">brew tap</code> doesn’t show <code class="language-plaintext highlighter-rouge">homebrew/core</code>, set yourself up to edit a local copy:</p> <ol> <li>Set <code class="language-plaintext highlighter-rouge">HOMEBREW_NO_INSTALL_FROM_API=1</code> in your shell environment,</li> <li>Run <code class="language-plaintext highlighter-rouge">brew tap --force homebrew/core</code> and wait for the clone to complete, then</li> <li>Run <code class="language-plaintext highlighter-rouge">brew edit <formula></code> to open the formula in <code class="language-plaintext highlighter-rouge">EDITOR</code>.</li> </ol> <p>You don’t have to submit modifications back to <code class="language-plaintext highlighter-rouge">homebrew/core</code>, just edit the formula to what you personally need and <code class="language-plaintext highlighter-rouge">brew install <formula></code>. As a bonus, <code class="language-plaintext highlighter-rouge">brew update</code> will merge your changes with upstream so you can still keep the formula up-to-date <strong>with</strong> your personal modifications!</p> <p>Note that if you are editing a core formula or cask you must set <code class="language-plaintext highlighter-rouge">HOMEBREW_NO_INSTALL_FROM_API=1</code> before using <code class="language-plaintext highlighter-rouge">brew install</code> or <code class="language-plaintext highlighter-rouge">brew update</code> otherwise they will ignore your local changes and default to the API.</p> <p>To undo all changes you have made to any of Homebrew’s repositories, run <code class="language-plaintext highlighter-rouge">brew update-reset</code>. It will revert to the upstream state on all Homebrew’s repositories.</p> <h2 id="can-i-make-new-formulae">Can I make new formulae?</h2> <p>Yes! It’s easy! If you already have a local copy of <code class="language-plaintext highlighter-rouge">homebrew/core</code> (see above), just use the <a href="/Manpage#create-options-url"><code class="language-plaintext highlighter-rouge">brew create</code> command</a>. Homebrew will then open the formula in <code class="language-plaintext highlighter-rouge">EDITOR</code> so you can edit it, but it probably already installs; try it: <code class="language-plaintext highlighter-rouge">brew install <formula></code>. If you encounter any issues, run the command with the <code class="language-plaintext highlighter-rouge">--debug</code> switch like so: <code class="language-plaintext highlighter-rouge">brew install --debug <formula></code>, which drops you into a debugging shell.</p> <p>If you want your new formula to be part of <code class="language-plaintext highlighter-rouge">homebrew/core</code> or want to learn more about writing formulae, then please read the <a href="/Formula-Cookbook">Formula Cookbook</a>.</p> <h2 id="how-do-i-get-a-formula-from-someone-elses-pull-request">How do I get a formula from someone else’s pull request?</h2> <p>Ensure you have a <a href="#can-i-edit-formulae-myself">local copy of <code class="language-plaintext highlighter-rouge">homebrew/core</code></a>, then:</p> <div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew update brew <span class="nb">install </span>gh <span class="nb">cd</span> <span class="s2">"</span><span class="si">$(</span>brew <span class="nt">--repository</span> homebrew/core<span class="si">)</span><span class="s2">"</span> gh <span class="nb">pr </span>checkout pull_request_number </code></pre></div></div> <h2 id="why-was-a-formula-deleted-or-disabled">Why was a formula deleted or disabled?</h2> <p>Use <code class="language-plaintext highlighter-rouge">brew log <formula></code> to find out! Likely because it had <a href="/Acceptable-Formulae">unresolved issues</a> and/or <a href="https://formulae.brew.sh/analytics/">our analytics</a> indicated it was not widely used.</p> <p>For disabled and deprecated formulae, running <code class="language-plaintext highlighter-rouge">brew info <formula></code> will also provide an explanation.</p> <h2 id="homebrew-is-a-poor-name-its-too-generic-why-was-it-chosen">Homebrew is a poor name, it’s too generic; why was it chosen?</h2> <p>Homebrew’s creator @mxcl wasn’t too concerned with the beer theme and didn’t consider that the project may actually prove popular. By the time Max realised that it was popular, it was too late. However, today, the first Google hit for “homebrew” is not beer related 😉</p> <h2 id="what-does-keg-only-mean">What does “keg-only” mean?</h2> <p>It means the formula is installed only into the Cellar and is not linked into the default prefix. This means most tools will not find it. You can see why a formula was installed as keg-only, and instructions for including it in your <code class="language-plaintext highlighter-rouge">PATH</code>, by running <code class="language-plaintext highlighter-rouge">brew info <formula></code>.</p> <p>You can <a href="/How-to-Build-Software-Outside-Homebrew-with-Homebrew-keg-only-Dependencies">modify a tool’s build configuration</a> to find keg-only dependencies. Or, you can link in the formula if you need to with <code class="language-plaintext highlighter-rouge">brew link <formula></code>, though this can cause unexpected behaviour if you are shadowing macOS software.</p> <h2 id="how-can-i-specify-different-configure-arguments-for-a-formula">How can I specify different configure arguments for a formula?</h2> <p><code class="language-plaintext highlighter-rouge">brew edit <formula></code> and edit the formula directly. Currently there is no other way to do this.</p> <h2 id="why-cant-i-open-a-mac-app-from-an-unidentified-developer">Why can’t I open a Mac app from an “unidentified developer”?</h2> <p>Chances are that certain apps will give you a popup message like this:</p> <p><img src="assets/img/docs/gatekeeper-unidentified-message.png" width="532" alt="Gatekeeper unidentified developer message"></p> <p>This is a <a href="https://support.apple.com/en-us/HT202491">security feature from Apple</a>. The single most important thing to know is that <strong>you can allow individual apps to be exempt from this feature.</strong> This allows the app to run while the rest of the system remains under protection.</p> <p><strong>Always leave system-wide protection enabled,</strong> and disable it only for specific apps as needed.</p> <p>If you’re sure you want to trust the app, you can disable protection for it by right-clicking its icon and choosing <em>Open</em>:</p> <p><img src="assets/img/docs/right-click-choose-open.png" width="312" style="margin-left:60px" alt="Right-click the app and choose Open"></p> <p>In the resulting dialog, click the <em>Open</em> button to have macOS permanently allow the app to run on this Mac. <strong>Don’t do this unless you’re sure you trust the app.</strong></p> <p><img src="assets/img/docs/gatekeeper-unidentified-open.png" width="532" alt="Gatekeeper unidentified developer open prompt"></p> <p>Alternatively, you may provide the <a href="https://github.com/Homebrew/homebrew-cask/blob/HEAD/USAGE.md#options"><code class="language-plaintext highlighter-rouge">--no-quarantine</code> switch</a> at install time to not add this feature to a specific app.</p> <h2 id="why-arent-some-apps-included-during-brew-upgrade">Why aren’t some apps included during <code class="language-plaintext highlighter-rouge">brew upgrade</code>?</h2> <p>After running <code class="language-plaintext highlighter-rouge">brew upgrade</code>, you may notice some casks you think should be upgrading, aren’t.</p> <p>As you’re likely aware, a lot of macOS software can upgrade itself:</p> <p><img src="assets/img/docs/sparkle-test-app-software-update.png" width="600" alt="Sparkle update window"></p> <p>That could cause conflicts when used in tandem with Homebrew Cask’s <code class="language-plaintext highlighter-rouge">upgrade</code> mechanism.</p> <p>When software uses its built-in mechanisms to upgrade itself, it happens without Homebrew Cask’s knowledge, causing both versions get out of sync. If you were to then upgrade through Homebrew Cask while we have a lower version of the software on record, you’d get a downgrade.</p> <p>There are a few ideas to fix this problem:</p> <ul> <li>Try to prevent the software’s automated updates. It wouldn’t be a universal solution and may cause it to break. Most software on Homebrew Cask is closed-source, so we’d be guessing. This is also why pinning casks to a version isn’t available.</li> <li>Try to extract the installed software’s version and compare it to the cask, deciding what to do at that time. It’d be a complicated solution that would break other parts of our methodology, such as using versions to interpolate <code class="language-plaintext highlighter-rouge">url</code> values (a definite win for maintainability). This solution also isn’t universal, as many software developers are inconsistent in their versioning schemes (and app bundles are meant to have two version strings) and it doesn’t work for all types of software we support.</li> </ul> <p>So we let software be. Anything installed with Homebrew Cask should behave the same as if it were installed manually. But since we also want to support software that doesn’t self-upgrade, we add <a href="https://github.com/Homebrew/homebrew-cask/blob/aa461148bbb5119af26b82cccf5003e2b4e50d95/Casks/a/alfred.rb#L18"><code class="language-plaintext highlighter-rouge">auto_updates true</code></a> to casks for software that does, which excludes them from <code class="language-plaintext highlighter-rouge">brew upgrade</code>.</p> <p>Casks which use <a href="https://docs.brew.sh/Cask-Cookbook#version-latest"><code class="language-plaintext highlighter-rouge">version :latest</code></a> are also excluded, because we have no way to track their installed version. It helps to ask the developers of such software to provide versioned releases (i.e. include the version in the path of the download <code class="language-plaintext highlighter-rouge">url</code>).</p> <p>If you still want to force software to be upgraded via Homebrew Cask, you can reference it specifically in the <code class="language-plaintext highlighter-rouge">upgrade</code> command:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew upgrade <cask> </code></pre></div></div> <p>Or use the <code class="language-plaintext highlighter-rouge">--greedy</code> switch:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew upgrade --greedy </code></pre></div></div> <p>Refer to the <code class="language-plaintext highlighter-rouge">upgrade</code> section of the <a href="/Manpage"><code class="language-plaintext highlighter-rouge">brew</code> manual page</a> for more details.</p> <h2 id="why-do-my-cask-apps-lose-their-dock-position--launchpad-position--permission-settings-when-i-run-brew-upgrade">Why do my cask apps lose their Dock position / Launchpad position / permission settings when I run <code class="language-plaintext highlighter-rouge">brew upgrade</code>?</h2> <p>Homebrew has two possible strategies to update cask apps: uninstalling the old version and reinstalling the new one, or replacing the contents of the app with the new contents. With the uninstall/reinstall strategy, <a href="https://github.com/Homebrew/brew/pull/15138">macOS thinks the app is being deleted without any intent to reinstall it</a>, and so it removes some internal metadata for the old app, including where it appears in the Dock and Launchpad and which permissions it’s been granted. The content replacement strategy works around this by treating the upgrade as an in-place upgrade. However, starting in macOS Ventura, these in-place upgrades are only allowed when the updater application (in this case, the terminal running Homebrew) has <a href="https://github.com/Homebrew/brew/pull/15483">certain permissions granted</a>. Either the “App Management” or “Full Disk Access” permission will suffice.</p> <p>Homebrew defaults to in-place upgrades when it has the necessary permissions. Otherwise, it will use the uninstall/reinstall strategy.</p> </div> </div> <a href="https://github.com/Homebrew/brew/edit/master/docs/FAQ.md"><img id="forkme" src="/assets/img/forkme_right_gray_6d6d6d.svg" alt="Fork me on GitHub"></a> <script> function loadLanguage(lang) { if (lang === null) { return; } else if (lang === 'en') { window.location.assign('/'); } else { window.location.assign('/' + lang); } } function loadAnchors() { anchors.options = { placement: 'left', visible: 'hover', }; anchors.add('#page > h2, #page > h3, #page > h4, #page > h5, #page > h6'); }; function loadSearch(lang, site) { docsearch(Object.assign( { searchParameters: { facetFilters: ['site: ' + site] } }, { initialQuery: new URLSearchParams(window.location.search).get('search') }, { placeholder: "Search Documentation" }, {"apiKey":"e3369d62b2366b374c54b2c5a2835a00","indexName":"brew_all","appId":"D9HG3G8GS4","container":"#search-container"} )); }; let escapeHTML = (identity) => identity; if (window.trustedTypes && window.trustedTypes.createPolicy) { let policy = trustedTypes.createPolicy( "forceInner", { createHTML: (to_escape) => to_escape } ); escapeHTML = (html) => policy.createHTML(html); }; async function setupCopyables() { if (navigator.clipboard) { for (const element of document.getElementsByClassName('copyable')) { let text = element.innerText.trim(); if (text.startsWith('$')) { text = text.substr(1).trimLeft(); } const button = document.createElement('button'); button.innerHTML = escapeHTML('📋'); button.setAttribute('aria-label', 'Copy to clipboard'); button.onclick = () => { navigator.clipboard.writeText(text); button.innerHTML = escapeHTML('✅'); setTimeout(() => button.innerHTML=escapeHTML('📋'), 1000); } element.appendChild(button); } } } window.addEventListener("DOMContentLoaded", function() { setupCopyables(); }); </script> <script src="https://cdn.jsdelivr.net/npm/anchor-js@5.0.0/anchor.min.js" integrity="sha256-aQmOEF2ZD4NM/xt4hthzREIo/2PFkOX/g01WjxEV7Ys=" crossorigin="anonymous" onload="loadAnchors()" async></script> <script src="https://cdn.jsdelivr.net/npm/@docsearch/js@3/dist/umd/index.min.js" onload="loadSearch('', 'docs')" async></script> </body> </html>