This guide is for maintainers. These special people have writeaccess to Homebrew’s repository and help merge the contributions ofothers. You may find what is written here interesting, but it’sdefinitely not a beginner’s guide.
Install Homebrew#. If you already have Homebrew installed, you can skip this part. Otherwise, to install Homebrew, run the following. '$ (curl -fsSL Copy. Key Action / Focus the search bar: Esc: Focus the search bar and cleans it ↓ Select the next search result ↑ Select the previous search result: Enter: Open the selected search result. Recipes Homebrewtalk's top 25 recipes - Great resource for both extract and ale grain recipes. Homebrewer's Association Top 50 Commercial Clone Beer Recipes Average Perfect NEIPA - Good baseline NEIPA for any all grain brewer looking to make their first New England style IPA. Homebrew-cask/slack.rb at 27d723deb27547dcdfa73d6acc0ae0 Homebrew/homebrew-cask GitHub. This browser is no longer supported. We know it's a hassle to switch browsers, but we want your experience of Slack to be fast, secure, and the best it can possibly be. To continue, please switch to a supported browser, or — for the finest Slack experience — download the desktop app. If you happen to know your workspace's url, please sign in.
Maybe you were looking for the Formula Cookbook?
This document is current practice. If you wish to change or discuss any of the below: open a PR to suggest a change.
Homebrew aims to be the missing package manager for macOS (and Linux). Its primary goal is to be useful to as many people as possible, while remaining maintainable to a professional, high standard by a small group of volunteers. Where possible and sensible, it should seek to use features of macOS to blend in with the macOS and Apple ecosystems. On Linux and Windows, it should seek to be as self-contained as possible.
This is all that really matters:
- Ensure the name seems reasonable.
- Add aliases.
- Ensure it uses
keg_only :provided_by_macosif it already comes with macOS.
- Ensure it is not a library that can be installed withgem,cpan orpip.
- Ensure that any dependencies are accurate and minimal. We don’t need tosupport every possible optional feature for the software.
- When bottles aren’t required or affected, use the GitHub squash & merge workflow for a single-formula PR or rebase & merge workflow for a multiple-formulae PR. See below for more details.
brew pr-pullotherwise, which adds messages to auto-close pull requests and pull bottles built by the Brew Test Bot.
- Thank people for contributing.
Checking dependencies is important, because they will probably stick aroundforever. Nobody really checks if they are necessary or not.
Depend on as little stuff as possible. Disable X11 functionality if possible.For example, we build Wireshark, but not the heavy GUI.
For some formulae,we mirror the tarballs to our own BinTray automatically as part of thebottle publish CI run.
Homebrew is about Unix software. Stuff that builds to an
.app shouldbe in Homebrew Cask instead.
The name is the strictest item, because avoiding a later name change isdesirable.
Choose a name that’s the most common name for the project.For example, we initially chose
objective-caml but we should have chosen
ocaml.Choose what people say to each other when talking about the project.
Add other names as aliases as symlinks in
Aliases in the tap root. Ensure thename referenced on the homepage is one of these, as it may be different and haveunderscores and hyphens and so on.
We now accept versioned formulae as long as they meet the requirements.
Merging, rebasing, cherry-picking
Merging should be done in the
Homebrew/brew repository to preserve history and GPG commit signing.
PRs modifying formulae that don’t need bottles or making changes that don’trequire new bottles to be pulled should use GitHub’s squash & merge or rebase & merge workflows.See the table below for more details.
Otherwise, you should use
brew pr-pull (or
rebase until you finally
master is pushed, you can’t
rebase: you’re a maintainer now!
Cherry-picking changes the date of the commit, which kind of sucks.
merge unclean branches. So if someone is still learning
git andtheir branch is filled with nonsensical merges, then
rebase and squashthe commits. Our main branch history should be useful to other people,not confusing.
Here’s a flowchart for managing a PR which is ready to merge:
How to merge without bottles
Here are guidelines about when to use squash & merge versus rebase & merge. These options should only be used with PRs where bottles are not needed or affected.
Homebrew Black Friday Deals
|PR modified a single formula||PR modifies multiple formulae|
|Commits look good||rebase & merge or squash & merge||rebase & merge|
|Commits need work||squash & merge||manually merge using the command line|
We need to at least check that it builds. Use the Brew Test Bot for this.
Verify the formula works if possible. If you can’t tell (e.g. if it’s alibrary) trust the original contributor, it worked for them, so chances are itis fine. If you aren’t an expert in the tool in question, you can’t reallygauge if the formula installed the program correctly. At some point an expertwill come along, cry blue murder that it doesn’t work, and fix it. This is howopen source works. Ideally, request a
test do block to test thatfunctionality is consistently available.
If the formula uses a repository, then the
url parameter should have atag or revision.
urls have versions and are stable (not yetimplemented!).
Don’t merge any formula updates with failing
brew tests. If a
test do blockis failing it needs to be fixed. This may involve replacing more involved testswith those that are more reliable. This is fine: false positives are better thanfalse negatives as we don’t want to teach maintainers to merge red PRs. If thetest failure is believed to be due to a bug in Homebrew/brew or the CI system,that bug must be fixed, or worked around in the formula to yield a passing test,before the PR can be merged.
- Sign off cherry-picks if you amended them (use
- If the commit fixes a bug, use “Fixes #104” syntax to close the bug report and link to the commit
We now accept stuff that comes with macOS as long as it uses
keg_only :provided_by_macos to be keg-only by default.
It may be enough to refer to an issue ticket, but make sure changes are clear so thatif you came to them unaware of the surrounding issues they would make senseto you. Many times on other projects I’ve seen code removed because thenew guy didn’t know why it was there. Regressions suck.
Don’t allow bloated diffs
Amend a cherry-pick to remove commits that are only changes inwhitespace. They are not acceptable because our history is important and
git blame should be useful.
Whitespace corrections (to Ruby standard etc.) are allowed (in fact thisis a good opportunity to do it) provided the line itself has some kindof modification that is not whitespace in it. But be careful aboutmaking changes to inline patches—make sure they still apply.
Adding or updating formulae
Only one maintainer is necessary to approve and merge the addition of a new or updated formula which passes CI. However, if the formula addition or update proves controversial the maintainer who adds it will be expected to answer requests and fix problems that arise with it in future.
- work on at least 2/3 of our supported macOS versions in the default Homebrew prefix
- do not require patches rejected by upstream to work
- do not have known security vulnerabilities or CVEs for the version we package
- are shown to be still installed by users in our analytics with a
BuildErrorrate of <25%
should not be removed from Homebrew. The exception to this rule are versioned formulae for which there are higher standards of usage and a maximum number of versions for a given formula.
Maintainers (including the lead maintainer) should not close issues or pull requests (note a merge is not considered a close in this case) opened by other maintainers unless they are stale (i.e. have seen no updates for 28 days) in which case they can be closed by any maintainer. Any maintainer is encouraged to reopen a closed issue when they wish to do additional work on the issue.
Any maintainer can merge any PR they have carefully reviewed and is passing CI that has been opened by any other maintainer. If you do not wish to have other maintainers merge your PRs: please use the
do not merge label to indicate that until you’re ready to merge it yourself.
Any maintainer can revert a PR created by another maintainer after a user submitted issue or CI failure that results. The maintainer who created the original PR should be given no less than an hour to fix the issue themselves or decide to revert the PR themselves if they would rather.
Give time for other maintainers to review
PRs that are an “enhancement” to existing functionality i.e. not a fix to an open user issue/discussion, not a version bump, not a security fix, not a fix for CI failure, a usability improvement, a new feature, refactoring etc. should wait 24h Monday - Friday before being merged. For example,
- a new feature PR submitted at 5pm on Thursday should wait until 5pm on Friday before it is merged
- a usability fix PR submitted at 5pm on Friday should wait until 5pm on Monday before it is merged
- a user-reported issue fix PR can be merged immediately after CI is green
If a maintainer is on holiday/vacation/sick during this time and leaves comments after they are back: please treat post-merge PR comments and feedback as you would left within the time period and follow-up with another PR to address their requests (if agreed).
The vast majority of Homebrew/homebrew-core PRs are bug fixes or version bumps so can be self-merged once CI has completed.
Maintainers have a variety of ways to communicate with each other:
- Homebrew’s public repositories on GitHub
- Homebrew’s group communications between more than two maintainers on private channels (e.g. GitHub/Slack)
- Homebrew’s direct 1:1 messages between two maintainers on private channels (e.g. iMessage/Slack/carrier pigeon)
All communication should ideally occur in public on GitHub. Where this is not possible or appropriate (e.g. a security disclosure, interpersonal issue between two maintainers, urgent breakage that needs to be resolved) this can move to maintainers’ private group communication and, if necessary, 1:1 communication. Technical decisions should not happen in 1:1 communications but if they do (or did in the past) they must end up back as something linkable on GitHub. For example, if a technical decision was made a year ago on Slack and another maintainer/contributor/user asks about it on GitHub, that’s a good chance to explain it to them and have something that can be linked to in the future.
This makes it easier for other maintainers, contributors and users to follow along with what we’re doing (and, more importantly, why we’re doing it) and means that decisions have a linkable URL.
All maintainers (and lead maintainer) communication through any medium is bound by Homebrew’s Code of Conduct. Abusive behaviour towards other maintainers, contributors or users will not be tolerated; the maintainer will be given a warning and if their behaviour continues they will be removed as a maintainer.
Maintainers should feel free to pleasantly disagree with the work and decisions of other maintainers. Healthy, friendly, technical disagreement between maintainers is actively encouraged and should occur in public on the issue tracker to make the project better. Interpersonal issues should be handled privately in Slack, ideally with moderation. If work or decisions are insufficiently documented or explained any maintainer or contributor should feel free to ask for clarification. No maintainer may ever justify a decision with e.g. “because I say so” or “it was I who did X” alone. Off-topic discussions on the issue tracker, bike-shedding and personal attacks are forbidden.
Get back on top of your messaging.
Franz is your messaging app for WhatsApp, Facebook Messenger, Slack, Telegram and many many more.
Download Franz for other platforms
Franz supports a great variety of business and private messaging & chat services like Slack, WhatsApp, WeChat, Messenger, Telegram, Google Hangouts, Skype, Zendesk and many more.
It does not matter if you just want to keep in touch with your friends or are managing a multi-seat customer care team. Franz got you covered.Find a complete list of all supported services here
Franz allows you to add each service many times. This makes Franz the perfect tool to manage multiple business and private accounts all at the same time. You could even use five different Facebook Messenger accounts at once, if some inexplicable reason urges you to do so.
The right tools for every situation
Set up multiple sets of services and easily switch between them at any time. More focus, less distraction!
Franz Workspaces help you create distraction-free work environments by making sure you’re only getting the notifications you absolutely need while working on a specific project. Setting up different Workspaces for business and private life is also an easy way to disconnect from work at home or on weekends, helping you maintain a healthy work-life balance.
Stay on top of your tasks
In any messaging service you’re using in Franz, select a word or sentence in a message and turn it into an item on your to-do list with two clicks. Just like that!
Give more structure to your time and workflow by organizing tasks in different lists – no matter if you’re assigning priorities to your to-dos or just want to keep work and private separate. Share shopping lists with family members and assign action steps to your team members at work.
Franz for Teams
You and your team use Franz? You can now manage Premium subscriptions for as many colleagues, friends or family members as you want, all from within one account.
Franz for Teams gives you the option to invite co-workers to your team by sending them email invitations and manage their subscriptions in your account’s preferences. Don’t waste time setting up subscriptions for every team member individually, forget about multiple invoices and different billing cycles - one team to rule them all!
Franz is truly an emperor with exceptional communication skills. He is trained in almost every major language like English, German, French, Spanish, (Brazilian) Portuguese, Russian, Japanese and many many more. The amazing Franz community helps Franz to learn new things everyday and is constantly teaching him new languages to make Franz a truly personalized experience.
Full of features
And more than 1000 service integrations created by the Franz Community.
Franz will notify you about incoming messages directly in your Operating System.
Here is one for the night owls. Enjoy Franz in a beautiful night mode.
Have multiple sets of services for private-, or business communication.
Control to the finest detail how you want to get notified for each service.
Parlez-vous français? Franz is trained in almost every major language. Wunderbar!
Set up your account in one place and enjoy Franz from wherever you want.
The amazing Franz Community has created more than 1000 service integrations - just for you.
Add as many instances of a service as you want. Like 5 Facebook Messengers with different accounts. No questions asked.
Protect your privacy for every service individually or simply bypass government censorship.
Franz is available for Windows, Mac and Linux.
Try to write Donaudampf-schifffahrtskapitänsmütze corretly the first time.
Homebrew Shop Slacks Creek
Franz for WindowsRequires Windows 7 or newer
Franz for MacOSRequires 10.9 or newer
Franz for Linux(Community Edition)
Current version:5.6.1 - Changelog