1<!DOCTYPE html> 2<html lang="en-US" dir="ltr"> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width,initial-scale=1"> 6 <title>remoteStorage</title> 7 <meta name="description" content="An open protocol for per-user storage on the Web"> 8 <meta name="generator" content="VitePress v1.6.3"> 9 <link rel="preload stylesheet" href="/assets/style.D0Ko_m8F.css" as="style"> 10 <link rel="preload stylesheet" href="/vp-icons.css" as="style"> 11 12
12<script type="module" src="/assets/app.8YaI-AOJ.js"></script>
12 13 <link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin=""> 14 <link rel="modulepreload" href="/assets/chunks/theme.DK_kTJeb.js"> 15 <link rel="modulepreload" href="/assets/chunks/framework.Ds6Eueu6.js"> 16 <link rel="modulepreload" href="/assets/index.md.DKr3vq4J.lean.js"> 17
17<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
17 18
18<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
18 19 </head> 20 <body> 21 <div id="app"><div class="Layout" data-v-d8b57b2d><!--[--><!--]--><!--[--><span tabindex="-1" data-v-fcbfc0e0></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-fcbfc0e0>Skip to content</a><!--]--><!----><header class="VPNav" data-v-d8b57b2d data-v-7ad780c2><div class="VPNavBar" data-v-7ad780c2 data-v-9fd4d1dd><div class="wrapper" data-v-9fd4d1dd><div class="container" data-v-9fd4d1dd><div class="title" data-v-9fd4d1dd><div class="VPNavBarTitle" data-v-9fd4d1dd data-v-9f43907a><a class="title" href="/" data-v-9f43907a><!--[--><!--]--><!--[--><img class="VPImage logo" src="/logo.svg" alt data-v-ab19afbb><!--]--><span data-v-9f43907a>remoteStorage</span><!--[--><!--]--></a></div></div><div class="content" data-v-9fd4d1dd><div class="content-body" data-v-9fd4d1dd><!--[--><!--]--><div class="VPNavBarSearch search" data-v-9fd4d1dd><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-9fd4d1dd data-v-afb2845e><span id="main-nav-aria-label" class="visually-hidden" data-v-afb2845e> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink active" href="/" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Home</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/get.html" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Getting started</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/rs.js/docs.html" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>remoteStorage.js</span><!--]--></a><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://community.remotestorage.io" target="_blank" rel="noreferrer" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Forums</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-9fd4d1dd data-v-3f90c1a5><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-3f90c1a5 data-v-be9742d9 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-be9742d9></span><span class="vpi-moon moon" data-v-be9742d9></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-9fd4d1dd data-v-ef6192dc data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://github.com/remotestorage" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-60a9a2d3><span class="vpi-social-github"></span></a><a class="VPSocialLink no-icon" href="https://kosmos.social/@remotestorage" aria-label="mastodon" target="_blank" rel="noopener" data-v-e71e869c data-v-60a9a2d3><span class="vpi-social-mastodon"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-9fd4d1dd data-v-f953d92f data-v-bfe7971f><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-bfe7971f><span class="vpi-more-horizontal icon" data-v-bfe7971f></span></button><div class="menu" data-v-bfe7971f><div class="VPMenu" data-v-bfe7971f data-v-20ed86d6><!----><!--[--><!--[--><!----><div class="group" data-v-f953d92f><div class="item appearance" data-v-f953d92f><p class="label" data-v-f953d92f>Appearance</p><div class="appearance-action" data-v-f953d92f><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-f953d92f data-v-be9742d9 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-be9742d9></span><span class="vpi-moon moon" data-v-be9742d9></span><!--]--></span></span></button></div></div></div><div class="group" data-v-f953d92f><div class="item social-links" data-v-f953d92f><div class="VPSocialLinks social-links-list" data-v-f953d92f data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://github.com/remotestorage" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-60a9a2d3><span class="vpi-social-github"></span></a><a class="VPSocialLink no-icon" href="https://kosmos.social/@remotestorage" aria-label="mastodon" target="_blank" rel="noopener" data-v-e71e869c data-v-60a9a2d3><span class="vpi-social-mastodon"></span></a>
21<!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-9fd4d1dd data-v-6bee1efd><span class="container" data-v-6bee1efd><span class="top" data-v-6bee1efd></span><span class="middle" data-v-6bee1efd></span><span class="bottom" data-v-6bee1efd></span></span></button></div></div></div></div><div class="divider" data-v-9fd4d1dd><div class="divider-line" data-v-9fd4d1dd></div></div></div><!----></header><!----><!----><div class="VPContent is-home" id="VPContent" data-v-d8b57b2d data-v-9a6c75ad><div class="VPHome external-link-icon-enabled" data-v-9a6c75ad data-v-e07eaea7><!--[--><!--]--><div class="VPHero VPHomeHero" data-v-e07eaea7 data-v-dd8814ff><div class="container" data-v-dd8814ff><div class="main" data-v-dd8814ff><!--[--><!--]--><!--[--><h1 class="heading" data-v-dd8814ff><span class="name clip" data-v-dd8814ff>remoteStorage</span><span class="text" data-v-dd8814ff>Open web protocol for per-user storage</span></h1><p class="tagline" data-v-dd8814ff>Webfinger + OAuth + CORS + REST</p><!--]--><!--[--><!--]--><div class="actions" data-v-dd8814ff><!--[--><div class="action" data-v-dd8814ff><a class="VPButton medium brand" href="/get.html" data-v-dd8814ff data-v-93dc4167>Get Storage</a></div><div class="action" data-v-dd8814ff><a class="VPButton medium alt" href="/unhosted.html" data-v-dd8814ff data-v-93dc4167>How it works</a></div><!--]--></div><!--[--><!--]--></div><!----></div></div><!--[--><!--]--><!--[--><!--]--><div class="VPFeatures VPHomeFeatures" data-v-e07eaea7 data-v-b1eea84a><div class="container" data-v-b1eea84a><div class="items" data-v-b1eea84a><!--[--><div class="grid-4 item" data-v-b1eea84a><div class="VPLink no-icon VPFeature" data-v-b1eea84a data-v-bd37d1a2><!--[--><article class="box" data-v-bd37d1a2><!----><h2 class="title" data-v-bd37d1a2>Own your data</h2><p class="details" data-v-bd37d1a2>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.</p><!----></article><!--]--></div></div><div class="grid-4 item" data-v-b1eea84a><div class="VPLink no-icon VPFeature" data-v-b1eea84a data-v-bd37d1a2><!--[--><article class="box" data-v-bd37d1a2><!----><h2 class="title" data-v-bd37d1a2>Stay in sync</h2><p class="details" data-v-bd37d1a2>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.</p><!----></article><!--]--></div></div><div class="grid-4 item" data-v-b1eea84a><div class="VPLink no-icon VPFeature" data-v-b1eea84a data-v-bd37d1a2><!--[--><article class="box" data-v-bd37d1a2><!----><h2 class="title" data-v-bd37d1a2>Compatibility & choice</h2><p class="details" data-v-bd37d1a2>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.</p><!----></article><!--]--></div></div><div class="grid-4 item" data-v-b1eea84a><div class="VPLink no-icon VPFeature" data-v-b1eea84a data-v-bd37d1a2><!--[--><article class="box" data-v-bd37d1a2><!----><h2 class="title" data-v-bd37d1a2>Go offline</h2><p class="details" data-v-bd37d1a2>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.</p><!----></article><!--]--></div></div><!--]--></div></div></div><!--[--><!--[--><!--[--><!--[--><h2 data-v-688de5e8>For App Developers ð§</h2><div class="VPFeatures devFeatures" data-v-688de5e8 data-v-b1eea84a><div class="container" data-v-b1eea84a><div class="items" data-v-b1eea84a><!--[--><div class="grid-3 item" data-v-b1eea84a><div class="VPLink no-icon VPFeature" data-v-b1eea84a data-v-bd37d1a2><!--[--><article class="box" data-v-bd37d1a2><!----><h2 class="title" data-v-bd37d1a2>Backend as a service</h2><p class="details" data-v-bd37d1a2>Develop your web app without worrying about hosting or developing a backend for it. Your users will connect their own backend at runtime. No more worrying about accounts, databases, passwords, etc.</p><!----></article><!--]--></div></div><div class="grid-3 item" data-v-b1eea84a><div class="VPLink no-icon VPFeature" data-v-b1eea84a data-v-bd37d1a2><!--[--><article class="box" data-v-bd37d1a2><!----><h2 class="title" data-v-bd37d1a2>Infinite scalability, zero cost</h2><p class="details" data-v-bd37d1a2>No matter if 5 hundred or 5 million people are using your app, your backend scales automatically and never costs you a single cent.</p><!----></article><!--]--></div></div><div class="grid-3 item" data-v-b1eea84a><a class="VPLink link no-icon VPFeature" href="/rs.js/docs/" data-v-b1eea84a data-v-bd37d1a2><!--[--><article class="box" data-v-bd37d1a2><!----><h2 class="title" data-v-bd37d1a2>JS client library</h2><p class="details" data-v-bd37d1a2>remoteStorage.js is a JavaScript/TypeScript library that does the heavy lifting to add offline storage and cross-device synchronization to your apps.</p><div class="link-text" data-v-bd37d1a2><p class="link-text-value" data-v-bd37d1a2>Learn more <span class="vpi-arrow-right link-text-icon" data-v-bd37d1a2></span></p></div></article><!--]--></a></div><!--]--></div></div></div><!--]--><!--]--><!--]--><!--]--><div class="vp-doc container" style="" data-v-e07eaea7 data-v-c141a4bd><!--[--><div style="position:relative;" data-v-e07eaea7><div><h2 id="community" tabindex="-1">Community <a class="header-anchor" href="#community" aria-label="Permalink to "Community"">â</a></h2><p>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!</p><table tabindex="0"><thead><tr><th>
21</th><th></th></tr></thead><tbody><tr><td><a href="https://github.com/remotestorage" target="_blank" rel="noreferrer">GitHub</a></td><td>Where we collaborate on the protocol specification as well as all common source code.</td></tr><tr><td><a href="https://community.remotestorage.io" target="_blank" rel="noreferrer">Forums</a></td><td>Our community exchange and support site for everybody from users to developers to providers.</td></tr><tr><td><a href="https://twitter.com/remotestorage_" target="_blank" rel="noreferrer">Twitter</a> / <a href="https://kosmos.social/@remotestorage" target="_blank" rel="noreferrer">Fediverse</a></td><td>Follow the project on Twitter or on the Fediverse, to receive updates on releases, events, apps, and related news.</td></tr><tr><td><a href="https://community.remotestorage.io/c/events" target="_blank" rel="noreferrer">Events</a></td><td>Meet people in person at conferences, hackathons, camps, and other gatherings.</td></tr></tbody></table><p>We would love for you to get involved â check out <a href="./contribute.html">What can I do for remoteStorage?</a> for some ideas.</p><h2 id="thank-you-to-our-contributors" tabindex="-1">Thank you to our contributors! <a class="header-anchor" href="#thank-you-to-our-contributors" aria-label="Permalink to "Thank you to our contributors!"">â</a></h2><ul class="contributors" data-v-200f0fa6><!--[--><!--]--></ul><p>... and everyone not listed here!</p><h2 id="sponsors" tabindex="-1">Sponsors <a class="header-anchor" href="#sponsors" aria-label="Permalink to "Sponsors"">â</a></h2><div class="sponsors"><p><a href="https://nlnet.nl/" title="NLnet Foundation"><img src="/assets/nlnet.AnX6EqjW.svg" alt="NLnet Foundation"></a></p><p><a href="https://5apps.com/" title="5apps"><img src="/assets/5apps.DaBpFxI4.svg" alt="5apps"></a></p><p><a href="https://www.wauland.de/" title="Wau Holland Stiftung"><img src="/assets/whs.D9aqWFET.svg" alt="Wau Holland Stiftung"></a></p><p><a href="https://duckduckgo.com/" title="DuckDuckGo"><img src="/assets/duckduckgo2.DP_bX4BM.svg" alt="DuckDuckGo"></a></p></div></div></div><!--]--></div></div></div><!----><!--[--><!--]--></div></div> 22
22<script>window.__VP_HASH_MAP__=JSON.parse("{\"apps.md\":\"DZx48GK9\",\"contribute.md\":\"BzhuTkjF\",\"design.md\":\"VWOVeUgQ\",\"get.md\":\"C2HcPjZP\",\"index.md\":\"DKr3vq4J\",\"protocol.md\":\"Sdv0-2aZ\",\"readme.md\":\"eRFaBej7\",\"rs.js.index.md\":\"B5D2tWm9\",\"rs.js_docs_api_access_classes_access.md\":\"DIOGarPE\",\"rs.js_docs_api_access_index.md\":\"DdDgMjUy\",\"rs.js_docs_api_baseclient_classes_baseclient.md\":\"DruhOvs2\",\"rs.js_docs_api_baseclient_index.md\":\"Ba3BVMFG\",\"rs.js_docs_api_caching_classes_caching.md\":\"C6Lxw3vE\",\"rs.js_docs_api_caching_index.md\":\"BHfviZ7-\",\"rs.js_docs_api_eventhandling_index.md\":\"C6XWe-8T\",\"rs.js_docs_api_eventhandling_type-aliases_eventhandler.md\":\"CUgRVrST\",\"rs.js_docs_api_modules.md\":\"D9eq2WvY\",\"rs.js_docs_api_remote_classes_remotebase.md\":\"DmE6CaZ-\",\"rs.js_docs_api_remote_index.md\":\"BStquoRW\",\"rs.js_docs_api_remote_interfaces_remote.md\":\"DqwpA4EA\",\"rs.js_docs_api_remotestorage_classes_remotestorage.md\":\"ByE8Jrko\",\"rs.js_docs_api_remotestorage_index.md\":\"j5Yew2m-\",\"rs.js_docs_api_remotestorage_interfaces_rsmodule.md\":\"DvUkDjyl\",\"rs.js_docs_contributing_building.md\":\"BDA4qHWp\",\"rs.js_docs_contributing_docs.md\":\"DW80CAAo\",\"rs.js_docs_contributing_github-flow.md\":\"BD_6vvpr\",\"rs.js_docs_contributing_index.md\":\"C_-dUg5M\",\"rs.js_docs_contributing_internals_cache-data-format.md\":\"Lz-K0xh1\",\"rs.js_docs_contributing_internals_caching.md\":\"BQpjGa2g\",\"rs.js_docs_contributing_internals_code-overview.md\":\"CPDkBeJZ\",\"rs.js_docs_contributing_internals_discovery-bootstrap.md\":\"LoAtMYUx\",\"rs.js_docs_contributing_internals_index.md\":\"EG-9a3da\",\"rs.js_docs_contributing_release-checklist.md\":\"BN5_L72I\",\"rs.js_docs_contributing_testing.md\":\"BbuWy9rv\",\"rs.js_docs_cordova.md\":\"B1ej1QDb\",\"rs.js_docs_data-modules_defining-a-module.md\":\"DRSq7iTn\",\"rs.js_docs_data-modules_defining-data-types.md\":\"CTHbPcjB\",\"rs.js_docs_data-modules_index.md\":\"DAROcoJH\",\"rs.js_docs_data-modules_publishing-and-finding-modules.md\":\"CTYzbOtp\",\"rs.js_docs_dropbox-and-google-drive.md\":\"DqXGOam7\",\"rs.js_docs_getting-started_connect-widget.md\":\"DQVTsWsj\",\"rs.js_docs_getting-started_events.md\":\"BbUOdevR\",\"rs.js_docs_getting-started_how-to-add.md\":\"DawhzfCc\",\"rs.js_docs_getting-started_index.md\":\"CwTQbKAe\",\"rs.js_docs_getting-started_initialize-and-configure.md\":\"B3TIhswO\",\"rs.js_docs_getting-started_loading-data.md\":\"C9qgS3G8\",\"rs.js_docs_getting-started_read-and-write-data.md\":\"D4aFuBqy\",\"rs.js_docs_getting-started_share-public-data.md\":\"DMksQ03F\",\"rs.js_docs_index.md\":\"DVFigzDZ\",\"rs.js_docs_nodejs.md\":\"hxizTXMf\",\"rs.js_docs_typescript.md\":\"DIQ8N-B3\",\"rs.js_docs_why.md\":\"kYiKjnOQ\",\"servers.md\":\"Ba4lvqDl\",\"unhosted.md\":\"7RF7PEyi\"}");function deserializeFunctions(r){return Array.isArray(r)?r.map(deserializeFunctions):typeof r=="object"&&r!==null?Object.keys(r).reduce((t,n)=>(t[n]=deserializeFunctions(r[n]),t),{}):typeof r=="string"&&r.startsWith("_vp-fn_")?new Function(`return ${r.slice(7)}`)():r};window.__VP_SITE_DATA__=deserializeFunctions(JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"remoteStorage\",\"description\":\"An open protocol for per-user storage on the Web\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/logo.svg\",\"externalLinkIcon\":true,\"outline\":{\"level\":[2,3]},\"nav\":[{\"text\":\"Home\",\"link\":\"/\"},{\"text\":\"Getting started\",\"link\":\"/get\"},{\"text\":\"remoteStorage.js\",\"link\":\"/rs.js/docs\"},{\"text\":\"Forums\",\"link\":\"https://community.remotestorage.io\"}],\"sidebar\":{\"/\":[{\"items\":[{\"text\":\"Getting started\",\"link\":\"/get\"},{\"text\":\"How it works\",\"items\":[{\"text\":\"Unhosted Web Apps\",\"link\":\"/unhosted\"},{\"text\":\"Protocol\",\"link\":\"/protocol\"}]},{\"text\":\"Apps\",\"link\":\"/apps\"},{\"text\":\"Servers\",\"link\":\"/servers\"},{\"text\":\"Contribute\",\"link\":\"/contribute\"},{\"text\":\"Design\",\"link\":\"/design\"}]}],\"/rs.js/\":[{\"text\":\"remoteStorage.js\",\"link\":\"/rs.js/docs/\",\"items\":[]},{\"text\":\"Guide\",\"items\":[{\"text\":\"Why use this?\",\"link\":\"/rs.js/docs/why\"},{\"text\":\"Getting started\",\"link\":\"/rs.js/docs/getting-started/\",\"collapsed\":true,\"items\":[{\"text\":\"Adding rs.js to an app\",\"link\":\"/rs.js/docs/getting-started/how-to-add\"},{\"text\":\"Initialization & configuration\",\"link\":\"/rs.js/docs/getting-started/initialize-and-configure\"},{\"text\":\"Connecting a storage\",\"link\":\"/rs.js/docs/getting-started/connect-widget\"},{\"text\":\"Handling events\",\"link\":\"/rs.js/docs/getting-started/events\"},{\"text\":\"Reading and writing data\",\"link\":\"/rs.js/docs/getting-started/read-and-write-data\"},{\"text\":\"Loading data on launch\",\"link\":\"/rs.js/docs/getting-started/loading-data\"},{\"text\":\"Sharing data with others\",\"link\":\"/rs.js/docs/getting-started/share-public-data\"}]},{\"text\":\"Data modules\",\"link\":\"/rs.js/docs/data-modules/\",\"collapsed\":true,\"items\":[{\"text\":\"Defining a module\",\"link\":\"/rs.js/docs/data-modules/defining-a-module\"},{\"text\":\"Defining data types\",\"link\":\"/rs.js/docs/data-modules/defining-data-types\"},{\"text\":\"Publishing and finding modules\",\"link\":\"/rs.js/docs/data-modules/publishing-and-finding-modules\"}]},{\"text\":\"Usage with Node.js\",\"link\":\"/rs.js/docs/nodejs\"},{\"text\":\"Usage in Cordova apps\",\"link\":\"/rs.js/docs/cordova\"},{\"text\":\"Usage with TypeScript\",\"link\":\"/rs.js/docs/typescript\"},{\"text\":\"Dropbox and Google Drive\",\"link\":\"/rs.js/docs/dropbox-and-google-drive\"}]},{\"text\":\"JavaScript API\",\"items\":[{\"text\":\"RemoteStorage\",\"link\":\"/rs.js/docs/api/remotestorage/classe
22s/RemoteStorage\"},{\"text\":\"BaseClient\",\"link\":\"/rs.js/docs/api/baseclient/classes/BaseClient\"},{\"text\":\"Access\",\"link\":\"/rs.js/docs/api/access/classes/Access\"},{\"text\":\"Caching\",\"link\":\"/rs.js/docs/api/caching/classes/Caching\"}]},{\"text\":\"Contributing\",\"link\":\"/rs.js/docs/contributing/\",\"collapsed\":true,\"items\":[{\"text\":\"Building\",\"link\":\"/rs.js/docs/contributing/building\"},{\"text\":\"Testing\",\"link\":\"/rs.js/docs/contributing/testing\"},{\"text\":\"Documentation\",\"link\":\"/rs.js/docs/contributing/docs\"},{\"text\":\"GitHub workflow\",\"link\":\"/rs.js/docs/contributing/github-flow\"},{\"text\":\"Release checklist\",\"link\":\"/rs.js/docs/contributing/release-checklist\"},{\"text\":\"Library internals\",\"link\":\"/rs.js/docs/contributing/internals/\",\"collapsed\":true,\"items\":[{\"text\":\"Code overview\",\"link\":\"/rs.js/docs/contributing/internals/code-overview\"},{\"text\":\"Discovery bootstrap\",\"link\":\"/rs.js/docs/contributing/internals/discovery-bootstrap\"},{\"text\":\"Caching\",\"link\":\"/rs.js/docs/contributing/internals/caching\"},{\"text\":\"Data format of the local cache\",\"link\":\"/rs.js/docs/contributing/internals/cache-data-format\"}]}]}]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/remotestorage\"},{\"icon\":\"mastodon\",\"link\":\"https://kosmos.social/@remotestorage\"}],\"editLink\":{\"pattern\":\"_vp-fn_({ filePath }) => {\\n if (filePath.startsWith(\\\"rs.js/\\\")) {\\n if (filePath.startsWith(\\\"rs.js/docs/api/\\\")) {\\n return \\\"/rs.js/docs/contributing/docs\\\";\\n } else {\\n return `https://github.com/remotestorage/remotestorage.js/edit/master/${filePath.slice(6)}`;\\n }\\n } else {\\n return `https://github.com/remotestorage/website/edit/master/${filePath}`;\\n }\\n }\"},\"search\":{\"provider\":\"local\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}"));</script>
22 23 24 </body> 25</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.