remoteStorage

Open protocol for per-user storage on the Web
Webfinger + OAuth + CORS + REST

Features

For users

Own your data

Everything in one place – your place. Use a storage account with a provider you trust, or set up your own storage server. Move house whenever you want. It’s your data.

Stay in sync

remoteStorage-enabled apps automatically sync your data across all of your devices, from desktop to tablet to smartphone, and maybe even your TV or VR headset.

Compatibility & choice

Use the same data across different apps. Create a to-do list in one app, and track the time on your tasks in another one. Say goodbye to app-specific data silos.

Go offline

Most remoteStorage-enabled apps come with first-class offline support. Use your apps offline on the go, and automatically sync when you’re back online.

For developers

Backend as a Service

Develop your web app without worrying about hosting or even developing the backend for it: your users will connect their own backend at runtime.

Infinite Scalability

No matter if 5 hundred or 5 million users are using your app, your backend scales automatically and never costs you a single cent.

Wheels Included

remoteStorage.js is a JavaScript library that does all the heavy-lifting of connecting to any remoteStorage backend, caching, synchronizing and storing user data.

Browse apps Get storage


Developer library

The remoteStorage.js library does most of the heavy lifting to add offline storage and cross-device synchronization to your apps. No more worrying about accounts, databases, passwords…

Setup

const rs = new RemoteStorage();
rs.access.claim('todos', 'rw');
rs.caching.enable();

const client = rs.scope('/todos/');

Write an object

// Declare an object type to validate if you want (JSON Schema)
client.declareType('todo-item', {});

// Write `{"id":"alfa","done":false}` to /todos/alfa.json
await client.storeObject('todo-item', 'alfa.json', {
  id: 'alfa',
  done: false,
});

Get objects

const specificItem = await client.getObject('alpha.json');
const allTodoItems = await client.getAll();

Add the Connect Widget UI component

Use our drop-in UI widget for connecting remote storage accounts.

const widget = new Widget(rs);
widget.attach();

Read the documentation Protocol details


Community

remoteStorage is a grass-roots standard, developed completely in the open, by the community for the community. Countless individuals have contributed in one way or another over time, and we’d love to welcome you as one of them!

GitHub Where we collaborate on the protocol specification as well as all common source code.
Forums Our community exchange and support site for everybody from users to developers to providers.
IRC Some community members are hanging out in #remotestorage on Libera.Chat — say hi!
Twitter / Fediverse Follow the project on Twitter or on the Fediverse, to receive updates on releases, events, apps, and related news.
Mailing List A monthly digest about remoteStorage apps, tools, and decentralized news.
Events Meet people in person at conferences, hackathons, camps, and other gatherings.

We would love for you to get involved — check out What can I do for remoteStorage? for some ideas.

Thank you to our contributors!

  • almereyda
  • azul
  • bencharp
  • brolund
  • elf-pavlik
  • galfert
  • gillisig
  • gregkare
  • iLiviu
  • jancborchardt
  • jcoglan
  • jorinvo
  • KenEucker
  • lesion
  • lukasklein
  • michielbdejong
  • nilclass
  • peacekeeper
  • Ragnis
  • raucao
  • shybyte
  • silverbucket
  • tantaman
  • thornjad
  • untitaker
  • vcuculo
  • xMartin

… and everyone not listed here!

Join our forum For everybody from users to developers to providers.

Sponsors