Kofi Gumbs ·

Last week I joined a programming community on Discord. I’m now a member of three programming community chats on Slack, one on Zulip, and this new one on Discord. These are all social groups (as opposed to professional), so I don’t need them open all the time. I just like to keep up with the conversations and contribute where I can. Having to do this across three different apps is annoying—I want one app to open/close; one app in my ⌘-Tab switcher; and one app displaying notifications. That annoyance led to Multi.

Multi app (Chat) screenshot. The cursor has pressed the macOS View menubar item, which shows a dropdown that includes Slack workspaces, a Zulip instance, and a Discord server.

Multi lets you create a custom, lightweight macOS app from a group of websites. Each website is loaded in native WebView with a small JS shim to bridge web notifications to the macOS Notification Center. I originally prototyped with Serge Zaitsev’s webview library, but later realized that using WebKit directly would save me some time and indirection. This project was built over the course of one week, so there are definitely some rough edges, but it’s fun that it works as well as it does.

I built Multi without XCode, which proved to be the most challenging part. At first, I did this because I didn't have XCode installed (only the Command Line Tools), and working on High Sierra makes installation a little convoluted. Later in the development process it became a point of pride. I enjoy that my source directory is straightforward to navigate and free of .xcodeproj files! Of course, this is a small and precarious joy, and ultimately it's probably not worth it. However, if you do want to take the road less advised, here are a couple learnings:

It’s been a while since I’ve written any Swift, and I enjoyed getting back into it. It was fun to remember exactly why I loved extensions, and using AppKit for the first time helped me appreciate the gravity of SwiftUI. Finally, if you check out Multi and/or have any ideas on how to make it nicer, please let me know!