You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
Falk Werner 36ad419f6c
Update build.yml
4 weeks ago
.github Update build.yml 4 weeks ago
doc add HTTP server support with given document root. 1 year ago
example add javascript example 1 year ago
script refine directory structure 1 year ago
src fix check of existense of closefrom function 4 months ago
test-src fix check of existense of closefrom function 4 months ago
.gitignore add newline at end of file 1 year ago
CMakeLists.txt make clang-tidy happy (old versions of clang tidy don't understand some NOLINT comments) 4 months ago
COPYING.LESSER initial commit 2 years ago remove section about webfuse legacy 6 months ago Add security policy 11 months ago



webfuse combines libwebsockets and libfuse. It allows to attach a remote filesystem via websockets.


Many embedded devices, such as smart home or IoT devices are very limited regarding to their (non-volatile) memory resources. Such devices are typically comprised of an embedded linux and a small web server, providing an interface for maintenance purposes.

Some use cases, such as firmware update, require to transfer (larger) files to the device. The firmware file is often stored multiple times on the device:

  1. cached by the web server, e.g. lighttpd
  2. copied to locally, e.g. /tmp
  3. uncompressed, also to /tmp

Techniques like SquashFS help to avoid the third step, since the upgrade file can be mounted directly. RAUC shows the use of SquashFS within an update facility.
However at least one (unecessary) copy of the upload file is needed on the device.

To avoid Steps 1 and 2, it would be great to keep the update file entirely in web server, just like NFS or WebDAV. Unfortunately, NFS is not based on any protocol, natively usable by a web application. WebDAV is based on HTTP, but it needs a server providing the update file.

webfuse solves this problem by using the WebSocket protocol. The emdedded device runs a service, known as webfuse adapter, awaiting incoming connections, e.g. from a web browser. The browser acts as a file system provider, providing the update file to the device.



With webfuse it is possible to implement remote filesystems based on websockets. Therefore, webfuse defined two roles participating in a webfuse connection:

  • webfuse service
  • webfuse provider

Webfuse Service

A webfuse service is both,

  • a websocket service providing the webfuse protocol
  • a fuse filesystem attached to a local mountpoint

The webfuse service awaits incoming connections from a webfuse provider. Once connected, it communicates all the filesystem requests originated by the libfuse to the connected webfuse provider using the websocket-based webfuse protocol.

By doing so, webfuse allows to inject a filesystem to a remote device.

Webfuse Provider

A webfuse provider provides a filesystem to a remote device using the websocket-based webfuse protocol. Therefore, a webfuse provider implements a websocket client.

Similar Projects


davfs2 is a Linux file system driver that allows to mount a WebDAV resource. WebDAV is an extension to HTTP/1.1 that allows remote collaborative authoring of Web resources.

Unlike webfuse, davfs2 mounts a remote filesystem locally, that is provided by a WebDAV server. In contrast, webfuse starts a server awaiting client connections to attach the remote file system.

Further Documentation