remoteStorage.js 1.0.0 released

It is finally done: last night, on the 7th birthday of the remoteStorage.js Git repository, we tagged and published version 1.0.0 of remoteStorage.js, the reference JavaScript client for integrating remoteStorage into Web apps.

Between last year’s 0.14.0 and yesterday’s 1.0.0, 6 authors have contributed 619 commits; restructuring the codebase, fixing bugs, enhancing features, improving the public API, and documenting code and usage. Thank all of you, for every single line of it!

remoteStorage is the first (and currently only) open standard to enable truly unhosted web apps. That means users are in full control of their precious data and where it is stored, while app developers are freed of the burden of hosting, maintaining and protecting a central database.

remoteStorage.js is a JavaScript library for storing user data locally in the browser, as well as connecting to remoteStorage servers and syncing data across devices and applications.

Highlights

Layout, builds, ES6

This release marks an important milestone for our small community project. Thanks to @les and the other contributors involved, the library layout has been improved considerably and is now using JavaScript modules across the codebase. It is also packaged into a single UMD build for all environments and use cases now.

With the new build system also comes the possibility of using new JavaScript language features (ES6 and beyond), and the refactorings have already begun.

Data modules are now npm modules

With npm having become the de-facto package manager not just for node.js, but also front-end JavaScript libraries (with 3rd party clients available, such as Yarn for example), we decided it’s time to finally make use of this powerful idea for publishing and managing rs.js data modules. As expected, the experience has been nothing but positive so far, and we think you will love it.

New connect widget add-on, support for Dropbox & Google Drive

We completely removed the connect widget from the core library in favor of creating public APIs for anything that is needed to build your own user interface. However, we also had a great community effort to design a new connect widget as an add-on library, which also incorporates a screen for choosing between multiple storage backends.

In fact, remoteStorage.js now officially supports optionally connecting a Dropbox or Google Drive account, instead of a remoteStorage one, so your app can appeal to a wider audience, and users can switch to remoteStorage whenever they’re ready for it. And the new connect widget thus includes design elements for those backends as well.

Documentation

Last but not least, we finally got our documentation in order for good. There’s a whole new documentation site, which combines all of the different docs we had before. It’s based on ReStructuredText and Sphinx, and you can find all of it in the doc/ folder of the repo as well.

We also switched the code documentation from NaturalDocs to the more suitable JSDoc, and we’re using sphinx-js to pull that into the new combined docs.

Upgrade notes

We published a guide for how to upgrade to rs.js 1.0 (from 0.14 or earlier). For most apps, this should take less than 15 minutes and is definitely worth the effort.

(If you run into any problems, just open a thread here on the forums, or pop into #remotestorage on Freenode IRC, and someone will help you solve it and also improve the respective docs.)

Changelog

Breaking changes

  • All builds, including AMD/CommonJS and no-cache, are now rolled into one UMD build. (#951)
  • RemoteStorage.defineModule is no more, and both declaring modules and loading them in apps can now be done with a new, improved API. (#974)
  • The connect widget is not part of the core library anymore, but has moved to a seperate add-on library (#862)
  • Error events (e.g. unauthorized, sync error, etc.) are identified by name instead of type now (#984)
  • Network request timeouts are configured via the setRequestTimeout method on the RemoteStorage instance instead of setting RemoteStorage.WireClient.REQUEST_TIMEOUT (#983)
  • Deprecated method equalObj from RemoteStorage.util has been removed
  • setApiKeys takes a config object as argument to allow to configure multiple backends at once (#1021)
  • The sync events ‘done’ and ‘req-done’ are emitted by the remoteStorage instance instead of remoteStorage.sync as ‘sync-done’ and 'sync-req-done (#1044)
  • The network events ‘wire-busy’ and ‘wire-done’ are emitted by the remoteStorage instance instead of remoteStorage.remote (#1044)

Enhancements

  • Switch Dropbox adapter to use the Dropbox API v2 (#936)
  • Store data in Google Drive under “remotestorage” base dir (#962)
  • Use email address as user address when connected to Google Drive (#955)
  • Emit Unauthorized error on 401 responses (#1018)
  • Emit Unauthorized error with code “access_denied” when user denies access (#1018)
  • Add reconnect() method to retrieve new authorization (e.g. after it expired) (#1018)
  • startSync() returns the sync promise (#1036)
  • Emit ready, connected and not-connected events when registering an handler after they happened originally. (#1066)
  • Introduce ESLint, fix syntax and scope issues throughout the code (#1080)

Bugfixes

  • Fix sync errors after disconnect (#994)
  • Fix discovery problems in Internet Explorer (#1018)
  • Fix error when trying to delete last document in a directory (#993)
  • Fix Dropbox files not being deleted when they had been created in the same session (#1042)
  • Emit ‘wire-busy’ and ‘wire-done’ events when using Dropbox or Google Drive (#957)
2 Likes

Congrats on the release, fantastic work!

One good idea that projects like Rust and TypeScript have been doing, is to provide a short summary of what the project is with release announcements, for those who come across it for the first time. Might be a good idea to add that here? For example (from the front page):

remoteStorage is a Javascript library implementing the first (and currently only) open standard to enable truly unhosted web apps. That means users are in full control of their precious data and where it is stored, while app developers are freed of the burden of hosting, maintaining and protecting a central database.

1 Like

Good idea. It’s why the first paragraph says “the reference JavaScript client for integrating remoteStorage into Web apps.” But I guess that’s not very detailed or informative for people who don’t know what remoteStorage is in the first place.

Edit: I added a blurb to explain both RS and rs.js to newcomers arriving here (one is quoting the RS website, the other is from the lib’s README). Thanks again for the suggestion!