Ghost WebDAV Storage Adapter

Why I wrote a WebDAV storage adapter for the Ghost publishing platform.

Ghost WebDAV Storage Adapter

A couple of years ago, my cousin Saskia alerted me to a very appealing cloud storage offer from TransIP in the Netherlands: STACK.

STACK's free tier offers 1 TB of storage! That is at least 20x more than the closest competitor.


As an early adopter, I immediately requested an invite. A few months later the invitation code arrived by email. That's when I found out that TransIP only accepted Dutch customers. Living in California I had to get creative with a proxy server and my parents' address in the Netherlands to open an account.

Until recently I only used my new wealth of online storage to park or archive content I don't frequently access. Whenever I had files on my drive taking up space, I would use STACK's Software to sync the drive containing the files with STACK. Once synced I would break the connection between the local directory and the clone on STACK. With a remote copy on STACK, I then safely deleted the local directory. To get it back, all I have to do is to sync the remote copy back to my local machine.

Enter Ghost

Ghost is the publishing platform that runs this site on a Google Cloud Compute Engine in a Docker container. Virtual Machines such as my docker-vm-small compute engine are priced based on CPU, memory and disk space. You pay for what you reserve/use. Smaller is thus cheaper. Mine has 1 vCPU[1], 2 GB of memory and a 30 GB SSD[2].

These resources I further share across the containers I've got running in the Virtual Machine[3]. That 30 GB of disk space quickly started to look a bit tight, after subtracting the space occupied by the Container Optimized OS, logs and my Docker images. I'm left with roughly 20 GB of usable space. Not bad, but not enough to host media files on. (Which I do.)

What if…

What if I could store content uploaded to The Code Mill on STACK instead of the virtual machine's local drive? Then I would have 50x the amount of storage. More than enough to host my collection of audio books.

Ghost's custom storage adapter design makes this possible. While there were already many adapters available, there wasn't a WebDAV adapter yet. Time to write one!

May I introduce…

I proudly introduce the ghost-webdav-storage-adapter npm package which I wrote during several shuttle rides to/from work. It took a bit of effort to figure out the details of Ghost's storage adapter interface. But between the official documentation, the source code of the standard local file store and the Ghost storage adapter S3 there was enough information to make sense of it.

The result works like a charm! I'm running this in "production" now. The source is hosted on Github where you can submit feedback and/or contributions.

npm Version npm Downloads Build Status Dependency Status Open Issues

Photo by SHTTEFAN / Unsplash

  1. A vCPU is a virtual CPU. As the real CPU is shared among all the virtual machines running on the bare metal. ↩︎

  2. A SSD is a Solid State Drive, aka. a Flash drive. ↩︎

  3. Virtual turtles all the way. ↩︎