The History of SoundCleod

This post is about the history of SoundCleod, the open-source desktop app for SoundCloud I started building almost 8 years ago. After 2.0.0 was released recently I thought it might be interesting to share the background story.

The story starts in 2012 with me moving to Berlin and starting a job as an engineer at SoundCloud. When I joined in August, the team was preparing to launch “SoundCloud Next”, a modern single page application that was being written from scratch to replace the old website.

Even though SoundCloud had an official Mac app back then, with the launch of Next that had all the features the company wanted to ship combined with a great user experience, the desktop app was already far behind and got not much later retired. Some folks regretted this decision but most of SoundCloud users were just fine using the website, especially Windows users for whom a desktop app never existed.

Meanwhile, I had the opportunity as a SoundCloud engineer to spend 20% of my time (also known as “hacker time”) on whatever I want as long as it is related to the business the company is doing or a technology the team uses.

And that’s when it clicked in: I want to build a thin desktop wrapper around the SoundCloud web app so that I can use my Mac keyboard’s media keys to control playback and get other desktop-integration benefits like not needing to hunt down which browser tab is playing music.

The Inception

After installing Xcode and investing a few hours into learning a bit of Cocoa and Objective-C, a language I never used before, I made the first commit on Dec 11 2012. Few days later I had a working Mac application.

Before releasing the it to an audience however, I needed a name. Because the project was not meant to be an official app, I wanted a name that’s kind of funny but still recognizable and related to SoundCloud. As a reference to counterfeit brands like “abibas” I renamed the app to SoundCleod and presented it at the next regular internal demo session at SoundCloud.

fake Adidas logos Image source: reddit.

Colleagues #celebrated my little success, some started using it, some others made small contributions, another one offered help on how to pronounce “SoundCleod”.

Version 0.1 was announced to the public in January 2013 and the source code was published to GitHub under MIT license and with that the journey had started.

Early Years

The public release created a moderate amount of buzz, I had a few people reporting bugs, saying thanks and even had the first contributors send pull requests in early 2013. I kept using my 20% time to add features, fix bugs and keep the small app in good shape. It was a surprising amount of work considering that the app had almost no business logic and a small niche value added on top of SoundCloud’s desktop web experience.

Because any decent desktop software needs easy and frequent updates, version 0.12 with automatic updates was released in November 2013. By that time a continuous delivery pipeline was already in place.

Knowing that SoundCloud had no intention to maintain an official desktop app I kept serving my little niche with a lot of enthusiasm but my excitement about the native Mac app development ecosystem started to fade. I quite soon concluded that I will not want to go in-depth with native Mac or iOS development, which back then mostly meant writing Objective-C (Swift was not yet around).

Going Cross-platform with Electron

Even though SoundCleod’s codebase was not much more than a WebView (Apple’s embeddable WebKit browser component) with a few hundred lines of glue code, I had a few pain points:

Coincidentally, GitHub released Electron 1.0 in 2016, a framework for building cross-platform desktop applications using web technologies like JavaScript, CSS and Node.js.

Happy to ditch native Mac development I rewrote SoundCleod using Electron from scratch and released 1.0 in September 2016 and soon after that a version that was available for Windows as well.

Switching to Electron also meant using its built-in auto updater which required not only setting up and maintaining my own update server but also code signing the application.

Code-signing – as I learned pretty soon – is a complicated matter especially for newcomers not familiar with native application development. Not wanting to pay Apple $100 a year for giving me code signing certificates I decided to use self-signed certificates which are indeed free but the cumulative hassle of dealing with them cost me several times $100, which I only realized much later…

During these years a handful of people said “thanks you” or praised the app publicly, which felt good and encouraging. As many open-source maintainers say it is a lot of work for very little reward and that’s exactly my experience.

The first and until today the only donation the project received in 2018 was a big moment: someone sent me 10 Euros!

Recent Times

Fast forward to 2020 I no longer work for SoundCloud and have been freelancing for a couple of years. Since then I no longer have the free SoundCloud Go+ subscription meaning I rarely use SoundCloud at all. As a freelancer I also no longer have the privilege of spending 20% of my working hours on an open-source project. Every hour I spend on SoundCleod has an opportunity cost – the cost of not working for a client or developing my business in other ways.

I still have bursts of interest in the project. Most recently, thanks to the “bear market” caused by the global COVID-19 pandemic, some of my freelance clients bailed or scaled down ongoing projects giving me plenty of free time.

Besides doing some long overdue maintenance and small bugfixes, I decided to enter Apple’s walled garden and try releasing SoundCleod on the Mac App Store. I knew that Apple notoriously rejects apps for various reasons therefore I did not have high expectations of success. Assuming the attempt is a small effort on my side I decided to go for it as it could have increased my reach and would have allowed to easily charge some small amount for the convenience of the App Store downloads.

The effort turned out to be bigger than I expected. Pushing an Electron app to the App Store is a major hassle but I succeeded submitting it for review, which in turn got rejected within a few hours. Reasons? They did not like the name (no surprise!) and the color of the icon, so I renamed the app to “Cleod for SoundCloud” and changed the logo to green ;)

Screenshot of Cleod for SoundCloud
The App Store compliant name and icon

The branding changes got accepted, however what I did not manage to convince the Review Board about was the functionality. The rejection reason was something like “the app is not more than what you have on your website (sic!)”. I even tried to reason with Slack’s native app as a precedent, which is almost pixel-perfectly the same in Safari. Anyway, appealed, got rejected again and then gave up. I might publish the unedited conversation one day, it’s quite eye-opening…

The Future of SoundCleod

With the recent addition of dark mode I consider SoundCleod to be feature complete. Small features might be added if someone contributes code but I have no plans to add more or anything that might increase the maintenance burden.

Talking of maintenance, although I secretly hoped Electron will save me from this, something still breaks with every major macOS release (to be fair it’s often Apple to blame). To make is worse, things can also break with major releases of Electron making updates a risky business.

With all these in mind I am still planning to keep the project alive for the foreseeable future and if at some point I become too busy to be bothered, someone can fork the project and continue where I left. That’s the beauty of open-source!

Screenshot of SoundCleod in dark mode