Hearth: Decentralized Website Publishing

Thursday, March 15, 2018

Last week, me and Stavros introduced our new side-project to the world, Hearth.

Hearth aims to be your go-to website publisher for the decentralized web, harnessing the power of IPFS.

Having built Eternum, an IPFS pinning service, we were trying to find use cases where IPFS could be useful to a larger audience.

Being an active Dropbox user, I was really disappointed when the Public folder was disabled earlier last year.

Dropping a small static website into your Dropbox Public folder and being able to send a link to it felt really great for sharing prototypes and experiments. Sadly, by sunsetting this feature, it was no longer possible to publish websites without having to deal with different services and web UIs.

That's pretty much how the idea for Hearth was born: We wanted to have a simple desktop app that will run IPFS as a daemon and replicate the Dropbox file sharing experience, without a centralized authority. That means, sharing links to your files from your desktop and also serving mini websites while doing so.

Stavros wrote a Rust console app that interfaces with the IPFS daemon, providing an API for requesting links to your files on the Hearth folder. I wrote a MacOS menu app with a Finder Sync extension in Swift that dealt with the UI layer and interfacing with the Finder app. In case you are interested to take a look under the hood, both of the apps (the Rust daemon and the Swift MacOS app) are open source.

I also had the pleasure of designing the app icon and website using Sketch, and I am really happy with the results. SVG animations -when used subtly- can be quite pleasing to the eye.

Although there have been some challenges in every layer involved (Rust being...Rust, MacOS integration issues and IPFS stability), we have come to a point where Hearth is now quite robust and -with its latest 0.0.3 version- able to auto-update itself using the awesome Sparkle library.

Building Hearth was quite an enjoyable experiment! As Hearth is my third Swift project (Pastery for Xcode and WSH LST being the first and second respectivelly), it now feels great to develop mobile and desktop apps using Apple's new language. On top of that, having to deal with a new technology like IPFS made the whole effort way more attractive.

We are still in talks with the IPFS team to iron out the timeout issues that may occur when trying to access a generated hash and we are also looking at the rest of the OS releases. If you want to contribute in any way, you can create an issue in the Hearth repo.