This client was branched from webdav-fs as the core functionality deserved its own repository. As webdav-fs' API was designed to resemble NodeJS' fs API, little could be done to improve the adapter interface for regular use.
This WebDAV client library is designed to provide an improved API for low-level WebDAV integration. This client uses
window.fetch when available in the browser.
To install for use with NodeJS, execute the following shell command:
npm install webdav --save
WebDAV-client is browser friendly, after being transpiled. Refer to the use of WebDAV-fs in the Buttercup mobile compatibility library or the Buttercup browser extension for guidance on preparation for the web.
Usage is very simple (API) - the main exported object is a factory to create adapter instances:
var createClient = ;var client =;client;
Each method returns a
These methods can be called on the object returned from the main factory.
Create a new directory at the remote path.
Creates a readable stream on the remote path.
Returns a readable stream instance.
Creates a writeable stream to a remote path.
Returns a writeable stream instance.
Delete a file or directory at
Get an array of items within a directory.
remotePath is a string that begins with a forward-slash and indicates the remote directory to get the contents of.
The returned value is a Promise, which resolves with an array of item stat objects.
Get the contents of the file at
remotePath as a
format can either be "binary" or "text", where "binary" is default.
var fs = ;client;
Or with text:
Get a readable stream on a remote file. Returns a Promise that resolves with a readable stream instance.
This is the underlying method to
createReadStream (uses a
PassThrough stream to delay the data). Due to the requirement of waiting on the request to complete before being able to get the true read stream, a Promise is returned that resolves when it becomes available.
createReadStream simply creates and returns a
PassThrough stream immediately and writes to it once this method resolves.
var fs = ;client;
options is an object that may look like the following:
Optionally request part of the remote file by specifying the
end byte positions. The
end byte position is optional and the rest of the file from
start onwards will be streamed.
var stream = client;
Get quota information. Returns
null upon failure or an object like so:
Both values are provided in bytes in string form.
available may also be one of the following:
unknown: The available space is unknown or not yet calculated
unlimited: The space available is not limited by quotas
Move a file or directory from
// Move a directoryclient;// Rename a fileclient;
Put some data in a remote file at
remotePath from a
data is a
Buffer or a
options has a property called
format which can be "binary" (default) or "text".
var fs = ;var imageData = fs;client;
options, which is optional, can be set to an object like the following:
true), if set to false, will add an additional header which tells the server to abort writing if the target already exists.
Get the stat properties of a remote file or directory at
remotePath. Resolved object is a item stat object.
Under the hood,
node-fetch to perform requests. This can be overridden by running the following:
// For example, use the `fetch` method in the browser:const createWebDAVClient = ;createWebDAVClient;
Item stats are objects with properties that descibe a file or directory. They resemble the following:
|filename||String||Always||File path of the remote item|
|basename||String||Always||Base filename of the remote item, no path|
|lastmod||String||Always||Last modification date of the item|
|size||Number||Always||File size - 0 for directories|
|type||String||Always||Item type - "file" or "directory"|
|mime||String||Files only||Mime type - for file items only|
This library has been tested to work with the following WebDAV servers or applications:
I develop this project in my free time as programming is my passion. I do not expect payment for what I make public, but all donations go towards supporting my development efforts. I use this money to pay for servers, software and other necessities. I greatly appreciate whatever I am given, no matter what the amount. If you've donated I'm extremely grateful for the help!