Skip to content
Alan K edited this page Jun 4, 2018 · 6 revisions

Features

Streaming file support

Files are stored as single objects in IndexedDB, which doesn't allow efficient read/write for large files (the entire file must be read/written for each data operation).

Files should instead map their data onto extents. This means replacing the data attribute on each node with an extent map, allowing the client to read/write the minimal number of extents.

Shared cross-domain storage

This is what filer.io is supposed to be. The main idea is that applications can embed a third-party iframe that allows access to cross-domain storage rather than application-specific storage.

A web application would load up filer.io and ask the user (once) to allow access. The main application would then proxy storage API requests to the third-party iframe, and the iframe would be responsible for creating read/write dialogs for the user to interact with the shared storage. Once the user interaction is completed, the data is returned to the main application without ever having exposed the storage directly.

An application may have several filer instances: one application-wide instance (e.g. common assets), a user-specific instance to store application-specific user data (e.g. settings and preferences) and a shared cross-domain instance to store user-generated data (e.g. saved documents).

Encrypted storage

IndexedDB object stores should be encrypted to prevent unauthorized access to private data by either a malicious application or by access to the OS filesystem directly.

Application VFS

Mounts are currently done in software, but it's useful and familiar to mount other filesystems onto an existing directory tree. Mounts would be in-memory (not stored to IndexedDB). Support for mounting local instances (from the same machine) as well as remote instance (from filer.io using third-party iframe) would be awesome.

The application would start with an initial virtual filesystem and would layer mounted filesystems on top, much as Linux does. This is also a good place to do caching.

Filer shell (FiSH)

A web UI for navigating a tree of mounted filesystems. Usable as an application feature for filer.io when users visit that domain.

Enhancements

Promise API with async/await support

The existing API uses callbacks. Enhance the API to return a promise when no callback is provided.

ES classes

Convert existing constructors to proper ES classes.

References