While building Buttercup password manager, I was constantly looking for a suitable method to allow me to store my archive files so that they would be accessible on each device that I use. As I was already using free, self-hosted cloud storage options like Nextcloud, this seemed like the obvious method to try first.
Like several cloud storage solutions, Nextcloud supports WebDAV as a means of accessing files remotely. WebDAV is quite a mature and commonplace protocol that allows for easy integration amongst synchronization and file-storage tools. It’s also quite easy to implement client applications (from existing libraries or from scratch), depending on the use case.
Finally, WebDAV is a web-based protocol that runs over the top of HTTP, and can even be setup as a server using Apache, for example. This makes it lightweight and easily accessible to simple JavaScript applications for desktop or mobile platforms.
For all of these reasons and more, WebDAV seemed like the best possible choice to start with in terms of password archive storage for Buttercup. At the time I didn’t find any particularly appealing libraries to use, so I wrote my own.
WebDAV-fs is a NodeJS WebDAV client that provides many methods for interacting with WebDAV servers. The fs in the title denotes that the library is intended to resemble Node’s fs module, and it implements some of its most-used methods:
readFile: Read a remote file on a WebDAV server – fetches the content asynchronously.
writeFile: Write to a remote file.
stat: Fetch statistics of a file.
mkdir: Create a directory.
readdir: Read the contents of a directory.
rename: Rename a remote file or directory.
unlink: Delete a remote file or directory.
Synchronous methods are obviously not supported due to the necessity of making RESTful requests.
WebDAV-fs began its life as its own project but was eventually split into two, branching off of the new WebDAV-client. The newer WebDAV-client project provides basically the same functionality, just with a more async-friendly API.
# You can install webdav-client from npm by running the following in your project:
npm install webdav --save
It’s clear to see just how simple it is reading from a remote server when you’re using WebDAV-client with Nextcloud, for instance. Here’s an example that reads a directory on a Nextcloud demo server:
This example asynchronously fetches the contents of the root of the Nextcloud server and logs all of the files and directories contained within. File explorers (that allow for the choosing of files) can be easily implemented around such a method as getDirectoryContents.
Applications like Buttercup can then very easily use tools such as this to read and write files remotely:
The benefit to using WebDAV-fs over WebDAV-client is that because it resembles the NodeJS fs API, the two can usually be used interchangeably if the application is designed for such work. Switching between local and remote files such as Buttercup does is made easy by the resemblance.
What was even more important for me when writing these tools was the ability to continue accessing storages like Nextcloud when working in the browser instead of NodeJS. Transpiling these libraries for use in the browser (with tools like webpack & browserify) works very well, and the final script is of reasonable size. At the core of webdav-client is node-fetch which provides the fetch method in both NodeJS and browser environments.
After some weeks of building and testing these libraries I discovered that quite a number of services and applications support WebDAV:
Nextcloud and of course the previous project of the Nextclouders, ownCloud
That’s already a great amount of coverage, and all under one single dependency!
So if you want to provide people with an easy way to store files in their webDAV compatible cloud storage from within your JS application, WebDAV-fs is your friend.
Nextcloud Hub 25 Autumn makes it easier to get started with powerful collaboration while fully in control of your data. From global design updates to improved usability and performance, discover our latest release in this blog.
In early 2025, BigTech hyperscalers in the US began to push new “sovereign cloud” offerings in a big PR campaign in Europe. In the past weeks, their narrative has collapsed. It’s not critics or watchdogs exposing the contradictions — the tech firms themselves have admitted their "sovereign" promises are empty.
In the Nextcloud 2024 wrap-up, we want to take a moment to celebrate this year's achievements. Join us as we continue to reimagine what’s possible - shaping a world where open source, privacy and connection come together and drive progress for the greater good.
Organisations, small and large, need a way to ensure the resiliency and digital sovereignty of their operations – an open-source, privacy-respecting alternative to Teams. And today, we present that solution - Nextcloud Talk.
Nextcloud has been recognized with the World Summit Award Germany that selects and promotes local digital innovation improving society, aiming to contribute to the United Nations' agenda of sustainable development goals.
DIE ZEIT, a prominent German outlet, interviewed Nextcloud’s founder Frank Karlitschek for an article on Microsoft’s anti-competitive behaviour on the European office software market. Read for a recap of the article and the key takeaways.
MagentaCLOUD’s migration to Nextcloud in 2021 resulted in a fully equipped Online Storage with an integrated online office suite that further improves the user experience, flexibility and security for customers.
We bring you a major update to the Nextcloud AI Assistant, plus the news we work with several big hosting providers like IONOS and OVHcloud to bring AI-as-a-Service options to you!
Bechtle and Nextcloud announce today a complete managed collaboration platform for the public sector that requires no tender and can be deployed immediately.
Discover how to make the switch from ownCloud to Nextcloud. Our quick guide provides insights into the migration process, helping you make the transition smoothly.
Today, US-based file sync & share vendor Kiteworks announced their acquisition of ownCloud and Dracoon. Kiteworks points out that their customers now have access to their file-sharing application. It is to be expected they will not maintain 3 similar products, but customers will have to migrate to the US firms’ platform or look for another […]
As part of Schleswig-Holstein's state digitization strategy, the state chancellery has announced they will work with Nextcloud to develop AI for working with government documents. This comes just after we announced the first private AI assistant last weekend with Hub 6. The German state already uses Nextcloud and their AI strategy aligns with our work on ethical, local AI technologies.
Over the last year, AI has become a popular topic. Some is hype, some is substance. Some is good, some is bad. We want to give you the good, not the bad, and ignore the hype! AI has a ton of opportunity – but also risk. So we put you in control – off by […]
With the EU law proposal “Regulation to Prevent and Combat Child Sexual Abuse” — more commonly know as the EU Chat Control Law — our democracy is threatened from the inside: by our own governments. Citing child protection as the reason, the EU wants to backdoor end-to-end encryption, so they can access and read any […]
The landing page for our upcoming Nextcloud Hub release is now live! On September 27, 2025, at 10AM (CEST), we will present the latest Nextcloud Hub live from the Nextcloud Community Conference in Berlin, Germany. And you can be part of it, too, by signing up for the online launch! While you’re registering, you might […]
We save some cookies to count visitors and make the site easier to use. This doesn't leave our server and isn't to track you personally!
See our Privacy Policy for more information. Customize
Statistics cookies collect information anonymously and help us understand how our visitors use our website. We use cloud-hosted Matomo
Service:Matomo
Cookies description:
_pk_ses*: Counts the first visit of the user
_pk_id*: Helps not to double count the visits.
mtm_cookie_consent: Remembers that consent for storing and using cookies was given by the user.
Cookies expiry:_pk_ses*: 30 minutes
_pk_id*: 28 days
mtm_cookie_consent: 30 days