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 settingRemoteStorage.WireClient.REQUEST_TIMEOUT
(#983) - Deprecated method
equalObj
fromRemoteStorage.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 ofremoteStorage.sync
as ‘sync-done’ and 'sync-req-done (#1044) - The network events ‘wire-busy’ and ‘wire-done’ are emitted by the
remoteStorage
instance instead ofremoteStorage.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
andnot-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)