# Acceptable Formulae Some formulae should not go in [homebrew/core](https://github.com/Homebrew/homebrew-core). But there are additional [Interesting Taps and Forks](Interesting-Taps-and-Forks.md) and anyone can start their own! ### Dupes in `homebrew/core` We now accept stuff that comes with macOS as long as it uses `keg_only :provided_by_macos` to be keg-only by default. ### Versioned formulae in `homebrew/core` We now accept versioned formulae as long as they [meet the requirements](Versions.md). ### We don’t like tools that upgrade themselves Software that can upgrade itself does not integrate well with Homebrew's own upgrade functionality. ### We don’t like install-scripts that download things Because that circumvents our hash-checks, makes finding/fixing bugs harder, often breaks patches and disables the caching. Almost always you can add a resource to the formula file to handle the separate download and then the installer script will not attempt to load that stuff on demand. Or there is a command-line switch where you can point it to the downloaded archive in order to avoid loading. ### We don’t like binary formulae Our policy is that formulae in the core tap ([homebrew/core](https://github.com/Homebrew/homebrew-core)) must be open-source and either built from source or produce cross-platform binaries (e.g. Java). Binary-only formulae should go to [Homebrew Cask](https://github.com/caskroom/homebrew-cask). ### Stable versions Formulae in the core repository must have a stable version tagged by the upstream project. Tarballs are preferred to Git checkouts, and tarballs should include the version in the filename whenever possible. We don’t accept software without a tagged version because they regularly break due to upstream changes and we can’t provide [bottles](Bottles.md) for them. ### Bindings First check that there is not already a binding available via [`gem`](https://rubygems.org/) or [`pip`](http://www.pip-installer.org/) etc. If not, then put bindings in the formula they bind to. This is more useful to people. Just install the stuff! Having to faff around with foo-ruby, foo-perl etc. is a bad user experience. ### Niche (or self-submitted) stuff The software in question must: * be maintained (e.g. upstream is still making new releases) * be known * be stable (e.g. not declared "unstable" or "beta" by upstream) * be used * have a homepage We will reject formulae that seem too obscure, partly because they won’t get maintained and partly because we have to draw the line somewhere. We frown on authors submitting their own work unless it is very popular. Don’t forget Homebrew is all Git underneath! [Maintain your own tap](How-to-Create-and-Maintain-a-Tap.md) if you have to! There may be exceptions to these rules in the main repository; we may include things that don't meet these criteria or reject things that do. Please trust that we need to use our discretion based on our experience running a package manager. ### Stuff that builds an `.app` Don’t make your formula build an `.app` (native macOS Application); we don’t want those things in Homebrew. Encourage upstream projects to build and support a `.app` that can be distributed by [Homebrew Cask](https://github.com/caskroom/homebrew-cask) (and used without it, too). ### Stuff that builds a GUI by default (but doesn't have to) Make it build a command-line tool or a library by default and, if the GUI is useful and would be widely used, add an option to build the GUI. Don't offer an option for multiple GUI backends e.g. X11 is a bad user experience for GUIs on macOS. ### Stuff that doesn't build with the latest, stable Xcode's Clang Clang is the default C/C++ compiler on macOS (and has been for a long time). Software that doesn't build with it hasn't been adequately ported to macOS. ### Stuff that requires heavy manual pre/post-install intervention We're a package manager so we want to do things like resolve dependencies and setup applications for our users. If things require too much manual intervention then they aren't useful in a package manager. ### Sometimes there are exceptions Even if all criteria are met we may not accept the formula. Documentation tends to lag behind current decision-making. Although some rejections may seem arbitrary or strange they are based on years of experience making Homebrew work acceptably for our users. 2 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218