All Projects → falk-werner → webfuse

falk-werner / webfuse

Licence: LGPL-3.0 license
websocket filesystem based on libfuse

Programming Languages

C++
36643 projects - #6 most used programming language
c
50402 projects - #5 most used programming language
Makefile
30231 projects
shell
77523 projects
Dockerfile
14818 projects
Meson
512 projects

Projects that are alternatives of or similar to webfuse

Mergerfs
a featureful union filesystem
Stars: ✭ 2,114 (+9091.3%)
Mutual labels:  fuse, libfuse, filesystem
fs-fuse
Export any Node.js `fs`-like object as a FUSE filesystem
Stars: ✭ 32 (+39.13%)
Mutual labels:  fuse, filesystem
tgmount
Mount Telegram dialogs and channels as a Virtual File System.
Stars: ✭ 52 (+126.09%)
Mutual labels:  fuse, libfuse
fusell-seed
FUSE (the low-level interface) file system boilerplate 📂 🔌 💾
Stars: ✭ 13 (-43.48%)
Mutual labels:  fuse, filesystem
elfuse
FUSE filesystems in Emacs Lisp
Stars: ✭ 61 (+165.22%)
Mutual labels:  fuse, libfuse
fatx
Original Xbox FATX Filesystem Library, Python bindings, FUSE driver, and GUI explorer
Stars: ✭ 87 (+278.26%)
Mutual labels:  fuse, filesystem
SSFS
Simple & Stupid Filesystem (Using FUSE)
Stars: ✭ 64 (+178.26%)
Mutual labels:  fuse, filesystem
Gotenksfs
A file system on top of your file system
Stars: ✭ 203 (+782.61%)
Mutual labels:  fuse, filesystem
fuse-nfs-crossbuild-scripts
fuse-nfs for windows using dokany
Stars: ✭ 35 (+52.17%)
Mutual labels:  fuse, filesystem
soketi
Just another simple, fast, and resilient open-source WebSockets server. 📣
Stars: ✭ 2,202 (+9473.91%)
Mutual labels:  websockets, ws
workerman
An asynchronous event driven PHP socket framework. Supports HTTP, Websocket, SSL and other custom protocols. PHP>=5.4.
Stars: ✭ 10,005 (+43400%)
Mutual labels:  wss, ws
Sparsebundlefs
FUSE filesystem for reading macOS sparse-bundle disk images
Stars: ✭ 238 (+934.78%)
Mutual labels:  fuse, filesystem
Tifs
A distributed POSIX filesystem based on TiKV, with partition tolerance and strict consistency.
Stars: ✭ 209 (+808.7%)
Mutual labels:  fuse, filesystem
GitFS
A FUSE filesystem that stores data on Git
Stars: ✭ 26 (+13.04%)
Mutual labels:  fuse, filesystem
Supertag
A tag-based filesystem
Stars: ✭ 207 (+800%)
Mutual labels:  fuse, filesystem
luufs
Lazy man's, user-mode union file system
Stars: ✭ 28 (+21.74%)
Mutual labels:  fuse, filesystem
vk-music-fs
FUSE file system for VK audios
Stars: ✭ 34 (+47.83%)
Mutual labels:  fuse, filesystem
Phoenixfs
🔥 a versioning filesystem inspired by git
Stars: ✭ 191 (+730.43%)
Mutual labels:  fuse, filesystem
Gcsf
a FUSE file system based on Google Drive
Stars: ✭ 2,251 (+9686.96%)
Mutual labels:  fuse, filesystem
docs
The official soketi documentation. 📡
Stars: ✭ 55 (+139.13%)
Mutual labels:  websockets, ws

Build Status Codacy Badge codecov

webfuse

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

Contents

Motivation

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.

Fellow Repositories

Known Implementations

Implementation Language Adatper/Server Adapter/Client Provider/Server Provider/Client
webfuse C/C++ - -
webfuse-provider C/C++ - - -
webfuse-js JavaScript - - -

Concept

concept

With webfuse it is possible to implement remote filesystems based on websockets. A reference implementation of such a daemon is provided within the examples. The picture above describes the workflow:

  • The websocket filesystem daemon (webfuse daemon) waits for incoming connections.

  • A remote filesystem provider connects to webfuse daemon via websocket protocol and adds one or more filesystems.
    Note: the examples include such a provider implemented in HTML and JavaScript.

  • Whenever the user makes filesystem requests, such as ls, the request is redirected via webfuse daemon to the connected filesystem provider

Adapters and Providers

In webfuse, an adapter is a component that adapts the libfuse API to a websocket interface. Currently, libwebfuse provides both, server based and client based adapters.

In webfuse, a provider is a component that provides a filesystem via websocket interface. Take a look at known implementations to find provider libraries.

Similar Projects

Davfs2

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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].