Client Freedom

Client freedom, by analogy to the four freedoms, is the freedom to operate a third-party client to an API. Email, IRC, and RSS are open protocols with client freedom. You can read email through a native GUI app, a spartan text-only client, and even an Emacs mode.

Client freedom peaked in the 90s when most communication was through open protocols, and has been on the decline since. I remember, circa 2013, using Facebook Messenger over Pidgin, through their XMPP gateway, and with OTR messaging turned on. Then Facebook shut down its XMPP gateway, as Slack shut down its IRC gateway.

In 2024 most protocols we use are closed. Twitter, Discord, and most proprietary applications are closed protocols because I can’t BYOC. Discord explicitly bans third-party clients, and so does Twitter1. This has an uncomfortable risk profile where, if you use a third-party client, most of the time nothing happens, until the company installs a new traffic analysis package and bans your account unappealably.

I wish Twitter in particular had client freedom. I would change literally everything about the experience:

  • No feed, just put people in lists and subscribe to them over RSS so I can read them on NetNewsWire.
  • Notifications are batched into a once-a-day email.
  • DMs and group chats entirely separated.
  • On my phone I want a client just for tweeting into the void. No timeline, no scrolling, notifications.2

I don’t even need client freedom to be the default. I would happily pay between 50 or 100AUD a month for a tier where I can just BYOC against a stable-ish API without risking a ban.

For most SaaS applications, I wish I could use a paid native app instead of a garbage SPA. I like native apps because performance is the default and not a distant post-PMF fantasy, and because they all look the same. Increasingly I think design is an unwelcome form of narcissism. Every day a thousand designers reinvent the <button> ab initio, and for what purpose? Your app has not earned the right to have a design language. Give me the most boring AppKit interface imaginable and I’m happy.

Why don’t companies let users BYOC? Because there is a cost to stability: closed protocols can evolve faster than open ones, and SaaS applications evolve fastest because developers can update the client software on page load. Controlling the client makes monetization easier, because you can serve people ads, and they can’t use ad-free clients.

The peak of the Laffer curve is when the company that runs the protocol can iterate fast and monetize its users sustainably. The peak is passed when, to squeeze more money out of users, the user experience is made worse, and the users, lacking choice, simply leave.


  1. According to the developer agreement: “You shall not […] create or attempt to create a substitute or similar service or product to the X Applications”. 

  2. My current approach, when I want to tweet something but not get distracted, is to add the tweet to my todo list.