December 12, 2016

If the AirPods situation has taught us anything, it's that you should never preannounce products. Or since Apple is nonetheless the most profitable company on Earth, maybe it has taught us to preannounce everything and ignore the consequences. Therefore, today I'm going to preannounce a product! It may even ship before the AirPods.

For the past few months I've been working on a new Mac app. The name of the app will be redacted for now, to forestall prying Google searches. The source code is finished, at least to the extent that any source code can truly be finished. Before shipping I have to finish some "administrative" tasks, e.g., build the web site and write the fine manual. My tentative plan is to release in early January. Happy new year!

The app enables fully encrypted two-party chat. That typically means two people, but you could also chat with your cat, or with yourself if that's your pleasure. Party on. What makes my app different from most other encrypted chat apps — indeed from every other encrypted chat app I'm aware of — is that it doesn't insert a third party between the two parties to the chat. There is no external server-side component to the chat. The client is the server, and vice versa. So even if I personally went out of business and stopped selling the app, I couldn't shut down the sold copies, they would continue working indefinitely. The chats are completely private, nobody except the two parties can decrypt them. Since all of the app's code runs on your Macs, it does not have a signup or an online account. It does not request your phone number, your email, your contacts, or even your real name. It requires no personally identifiable information whatsoever. The app never "phones home" to me. All the two parties need to chat securely is a secret password, which they choose on their own. The app itself has no involvement with choosing or sharing the password. The app can remember your password in your Mac's keychain, though, if you prefer not to reenter it on every launch.

The chats are encrypted end-to-end using the ubiquitous Advanced Encryption Standard. The app uses the built-in Mac encryption APIs; I was not foolhardy enough to implement my own encryption algorithms. All of the data is encrypted, no unencrypted data is ever sent over the network. Even my message protocol is encrypted. If you examine a packet trace of a chat, it appears to be totally random garbage, there's not a single byte of plain text. An internet observer wouldn't even be able to tell that you were using my app.

The chat message protocol supports Unicode text, including emoji, as well as images, including animated gifs and full pdf documents! You can drag and drop image files to and from the app. It does not yet support arbitrary file transfers, but that's something I'm considering for a future version. You can chat with a party over the internet or over a LAN. Internet chats require that at least one party have an internet mappable port available. LAN chats can use Bonjour for auto-configuration and advertisement.

Despite my hatred of Apple's App Stores, I'm submitting my app to the Mac App Store. Does that make me a sellout? Yes, I suppose it does. Sorry, all of your idols are false, that's a painful but necessary lesson for you to learn. You're welcome! From the beginning, I had always planned on an iOS version of the app too, and on iOS you have little choice but to distribute via the App Store. Thus, I view the Mac App Store as a good test: if for whatever reason I can't get my Mac app accepted, then I can just distribute it on my own, and my development time wasn't wasted. On the other hand, if the app does get accepted into the Mac App Store, then I'll have greater confidence that it's worthwhile to invest time into an iOS version. I'm going to pre-preannounce the iOS version today. Release date: The Future.™

The Mac and iOS versions of the app can share encryption and networking code, which will accelerate development. Obviously they can't share GUI code, because one uses AppKit and the other UIKit. I wish I could release Mac and iOS versions in close succession, because platform availability would help to sell the app. I had a business partner in mind to help me accomplish this, but that deal didn't materialize. So, as a wise man once said, here I go again on my own.