Node fs wrapper for WebDAV
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.


Node fs wrapper for WebDAV. Perform basic filesystem tasks in a similar manner to using async fs methods like readdir and writeFile. webdav-fs uses webdav-client under the hood.

Build Status npm version npm downloads


Install webdav-fs using npm:

npm install webdav-fs --save


You can use webdav-fs in authenticated or non-authenticated mode:

// Using authentication:
var wfs = require("webdav-fs")(

wfs.readdir("/Work", function(err, contents) {
    if (!err) {
        console.log("Dir contents:", contents);
    } else {
        console.log("Error:", err.message);
// Without using authentication:
var wfs = require("webdav-fs")("");

wfs.stat("/report.docx", function(err, data) {
    console.log("Is file:", data.isFile());


You can read the API documentation here, or check out the examples below.

The following methods are available on the webdav-fs module:

createReadStream(path[, options])

Create a read stream on a remote file:


The options object supports overriding remote headers as well as a range (start and end as byte indexes). When specifying a range, only the start value is required (if end is not provided the rest of the file is read).

The following requests the first 300 bytes of a file:

var myPartialStream = wfs.createReadStream("/dir/somefile.dat", { start: 0, end: 299 });

createWriteStream(path[, options])

Create a write stream for a remote file:


The options object supports overriding remote headers.

mkdir(path, callback)

Create a remote directory:

wfs.mkdir("/remote/dir", function(error) {
    // handle error if truthy

readdir(path, callback[, mode])

Read the contents of a remote directory:

wfs.readdir("/some/remote/path/", function(error, contents) {
    // callback is an array of filenames

mode is an optional processing mode, where:

  • 'node' (the default mode) will output an array of filename strings
  • 'stat' will output an array of stat objects (plus a name field)

readFile(path, [encoding,] callback)

Read the contents of a remote file:

wfs.readFile("/website/index.php", "utf8", function(error, data) {
    // data is the contents of the file
    // encoding is optional

rename(currentPath, destinationPath, callback)

Move/rename a file to another location/name. This does not create new directories for nested files (moving a file into a new directory will not work).

wfs.rename("/my-document.docx", "/Documents/personal.docx", function (error) {
    // handle error

stat(path, callback)

Stat a remote file:

wfs.stat("/the-internet.dat", function(error, fileStat) {

A stat has the following properties:

Property Type Description
isFile Function Check if the item is a file
isDirectory Function Check if the item is a directory
mtime Number Last modification timestamp
size Number Size of the item in bytes

unlink(path, callback)

Delete a remote file or directory:

wfs.unlink("/remote/path", function(error) {
    // handle error if truthy

writeFile(path, data, [encoding,] callback)

Write data to a remote file:

wfs.writeFile("/Temp/im-here.txt", "This is a saved file! REALLY!!", function(err) {

writeFile supports writing binary files as well:

fs.readFile(sourceFile, "binary", function(err, data) {
    wfs.writeFile(destFile, data, "binary", function(err) {
        // handle error

writeFile supports just a couple of encodings:

  • utf8
  • binary

When writing binary files, data must either be a binary string from a read file in Node (then passed to new Buffer(data, "binary")) or a Buffer.


Overriding the built-in fetch function

Under the hood, webdav-client uses node-fetch to perform requests. This can be overridden by running the following:

// For example, use the `fetch` method in the browser:
const createWebDAVfs = require("webdav-fs");

Refer to webdav-client's documentation for more information.