Thinking about desktop apps


I’ve been thinking a lot about desktop apps lately. My programming life started by building desktop apps in Visual Basic and Delphi. After that I migrated to a Mac and used REALBasic, LiveCode, and did one Objective-C based app (and run back to LiveCode at the time because it is cross-platform).

Somehow, I ended up working with HTML generators, blogging, and eventually backend programming. Slowly, I crawled from the invisible dungeons of server-side programming into the shiny fast realms of web development. For more than a decade, most of what I’ve done could be classified as web development.

When I started, we were discussing the merits of mooTools vs Dojo Toolkit vs Prototype. JQuery was new and awesome (now it is old and awesome). As the years went on, more and more of my work became either web development or mobile app development.

I noticed recently that I don’t enjoy neither of them anymore. First, I avoid mobile apps—a bit of hypocrisy since I’m writing this blog post on an iPad with iA Writer—let me unpack that for a second: I use as few mobile apps as I can and usually not on my iPhone. I make a lot of use out of mobile apps on my iPad, but that is probably because they’re closer to desktop apps than tiny cramped smartphone apps.

I love the web, but I don’t enjoy being a web developer anymore. I think that the ecosystem is moving too fast and in a direction that doesn’t please me at all.

My sweet spot was probably webOS with EnyoJS. Anything after that felt too complex for my subjective taste.

If you enjoy being a web developer that is great. This is not a post to try to discourage you, I’m really happy that you’ve found joy in your work, that is quite rare.

In the last three or four years, all the personal web projects I’ve started followed the same pattern, one that I only realised recently. I coded those projects as 100% client-side apps running without backends.

They’re just small tools, such as Little Webby Press which is an eBook and static-site generator. Originally, I thought that I was doing that to save on the cost and effort to maintain a safe backend. Now I know that I’ve been doing that because I’m trying to distance myself from the web and go back to thinking of applications as desktop apps.

All my recent webapps could have been desktop applications. They would behave better and been easier to maintain had I developed them in that way. Most of them work with files, manipulating and generating complex nested folders. Doing that in the client-side sucks. I need to use fake in-memory filesystems, export them as zipfiles and download to the client machine. All because web browsers can’t access the filesystem. That’s for a good reason, I’m not advocating for allowing browsers unrestricted access to the user’s HD, I understand the risks involved.

What I want to say is that maybe I had my mind locked into web development and that is the wrong paradigm to approach the apps that I want to develop.

Another important trend that I noticed lately is that I’ve been using more desktop apps than web apps. I’m happy with NetNewsWire for my news, iA Writer to do my blog posting via Micropub, Apple Mail instead of GMail, etc.

I enjoy desktop apps, both as a user and as a developer.

I guess I should go back to developing for the desktop (and maybe the iPad).

An ecosystem that I would like to explore more is desktop apps that leverage the new decentralisation protocols—such as SSB, Hypercore, IPFS—to connect its users. Most of the desktop apps I see being developed in those ecosystems are actually web technology in disguise. It is usually Electron that is serving backend and frontend from the user’s machine. I’m OK with that. Electron is one of the easiest ways to ship cross-platform hybrid apps. Many of these apps are simply browsers whose feature set is similar to that of a web browser but that fetches their content from non-web peers. I’ve been wondering if there is a place for decentralised native desktop apps that are not generic content-browsers for those ecosystems.

Yesterday I did a little experiment. As many people know, my favourite protocol and platform is Secure Scuttlebutt. It is a wonderful community to be a part of, but most of its tech stack is strongly tied to web technologies. Yesterday I decided to make a little toy to liberate it to desktop apps (as least on my machine).

I’m still running the SSB backend server needed to be an active peer in that network, but I coded a very small client that provides an RPC mechanism instead of a web or GUI interface. I chose boring technology for the RPC. Something that I think is way better for my use case than a lot of the new trendy protocols that are out there. I went with XML-RPC. SSB has it’s own RPC mechanism called MUXRPC. What I built is a small server that receives a method call via XML-RPC, forwards it to the running SSB backend via MUXRPC, and then translates back the response.

Now, anything on my desktop that has a working XML library could talk to SSB. I had a ton of fun making small toys in Python, Swift, etc. Just for the sake of it. Developing for the desktop is so refreshing. I can even access the filesystem.

I guess I’ll do more desktop stuff going forward, maybe ship some small apps. That sounds way more appealing than doing web development to me.

Is there any kind of decentralised app that you would like to see? What small app do you wish you had available to you on the desktop?

Did you enjoyed reading this content? Want to support me?

You can buy me a coffee at ko-fi.

Comments? Questions? Feedback?

You can reach out to me on Twitter, or Mastodon, Secure Scuttlebutt, or through WebMentions.