diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
new file mode 100644
index 00000000..19cec67e
--- /dev/null
+++ b/.github/workflows/deploy.yml
@@ -0,0 +1,58 @@
+name: Deploy website to Pages
+
+on:
+ push:
+ branches: [master]
+
+ # Allows to run this workflow manually from the Actions tab
+ workflow_dispatch:
+
+# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
+permissions:
+ contents: read
+ pages: write
+ id-token: write
+
+# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
+# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
+concurrency:
+ group: pages
+ cancel-in-progress: false
+
+jobs:
+ # Build job
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0 # Not needed if lastUpdated is not enabled
+ - name: Setup Node
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ cache: npm
+ - name: Setup Pages
+ uses: actions/configure-pages@v4
+ - name: Install dependencies
+ run: npm ci
+ - name: Build with VitePress
+ run: npm run docs:build
+ - name: Upload artifact
+ uses: actions/upload-pages-artifact@v3
+ with:
+ path: docs/.vitepress/dist
+
+ # Deployment job
+ deploy:
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
+ needs: build
+ runs-on: ubuntu-latest
+ name: Deploy
+ steps:
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v4
diff --git a/.github/workflows/jekyll.yml b/.github/workflows/jekyll.yml
deleted file mode 100644
index 31e91a11..00000000
--- a/.github/workflows/jekyll.yml
+++ /dev/null
@@ -1,64 +0,0 @@
-# This workflow uses actions that are not certified by GitHub.
-# They are provided by a third-party and are governed by
-# separate terms of service, privacy policy, and support
-# documentation.
-
-# Sample workflow for building and deploying a Jekyll site to GitHub Pages
-name: Deploy Jekyll site to Pages
-
-on:
- # Runs on pushes targeting the default branch
- push:
- branches: ["master"]
-
- # Allows you to run this workflow manually from the Actions tab
- workflow_dispatch:
-
-# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
-permissions:
- contents: read
- pages: write
- id-token: write
-
-# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
-# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
-concurrency:
- group: "pages"
- cancel-in-progress: false
-
-jobs:
- # Build job
- build:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Setup Ruby
- uses: ruby/setup-ruby@8575951200e472d5f2d95c625da0c7bec8217c42 # v1.161.0
- with:
- ruby-version: '3.1' # Not needed with a .ruby-version file
- bundler-cache: true # runs 'bundle install' and caches installed gems automatically
- cache-version: 0 # Increment this number if you need to re-download cached gems
- - name: Setup Pages
- id: pages
- uses: actions/configure-pages@v5
- - name: Build with Jekyll
- # Outputs to the './_site' directory by default
- run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}"
- env:
- JEKYLL_ENV: production
- - name: Upload artifact
- # Automatically uploads an artifact from the './_site' directory by default
- uses: actions/upload-pages-artifact@v3
-
- # Deployment job
- deploy:
- environment:
- name: github-pages
- url: ${{ steps.deployment.outputs.page_url }}
- runs-on: ubuntu-latest
- needs: build
- steps:
- - name: Deploy to GitHub Pages
- id: deployment
- uses: actions/deploy-pages@v4
diff --git a/.gitignore b/.gitignore
index 26e3ee96..d082db7e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
+.vitepress/dist
+.vitepress/cache
_site
node_modules
tmp
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 00000000..9803ee42
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,4 @@
+[submodule "rs.js"]
+ path = rs.js
+ url = git@github.com:remotestorage/remotestorage.js.git
+ branch = master
diff --git a/.vitepress/config.mts b/.vitepress/config.mts
new file mode 100644
index 00000000..e6c49e30
--- /dev/null
+++ b/.vitepress/config.mts
@@ -0,0 +1,93 @@
+import { defineConfig } from 'vitepress'
+import rsjsConfig from '../rs.js/docs/.vitepress/config.mts'
+
+type Item = {
+ text: string;
+ link: string;
+ items?: Item[];
+};
+
+const prefixLinks = (array: Item[], prefix: string) => {
+ array.forEach(item => {
+ if (item.link) {
+ item.link = prefix + item.link;
+ }
+ if (item.items) {
+ prefixLinks(item.items, prefix);
+ }
+ });
+};
+
+const rsjsSidebarConfig = rsjsConfig.themeConfig.sidebar
+prefixLinks(rsjsSidebarConfig, '/rs.js/docs')
+
+// https://vitepress.dev/reference/site-config
+export default defineConfig({
+ title: "remoteStorage",
+ description: "An open protocol for per-user storage on the Web",
+ srcExclude: ['./wiki', './rs.js/*.md'],
+ ignoreDeadLinks: [
+ /^http:\/\/localhost/,
+ ],
+
+ themeConfig: {
+ // https://vitepress.dev/reference/default-theme-config
+ 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/': rsjsSidebarConfig
+ },
+
+ socialLinks: [
+ { icon: 'github', link: 'https://github.com/remotestorage' },
+ { icon: 'mastodon', link: 'https://kosmos.social/@remotestorage' }
+ ],
+
+ editLink: {
+ pattern: ({ filePath }) => {
+ if (filePath.startsWith('rs.js/')) {
+ return `https://github.com/remotestorage/remotestorage.js/edit/master/${filePath}`
+ } else {
+ return `https://github.com/remotestorage/website/edit/master/${filePath}`
+ }
+ }
+ },
+
+ search: {
+ provider: 'local'
+ }
+ },
+
+ async transformPageData(pageData, { siteConfig }) {
+ if (pageData.relativePath.startsWith('rs.js')) {
+ pageData.titleTemplate = 'remoteStorage.js'
+ }
+ return pageData;
+ }
+})
diff --git a/.vitepress/theme/components/Contributors.vue b/.vitepress/theme/components/Contributors.vue
new file mode 100644
index 00000000..615e6417
--- /dev/null
+++ b/.vitepress/theme/components/Contributors.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
diff --git a/.vitepress/theme/components/DeveloperFeatures.vue b/.vitepress/theme/components/DeveloperFeatures.vue
new file mode 100644
index 00000000..0a0251a0
--- /dev/null
+++ b/.vitepress/theme/components/DeveloperFeatures.vue
@@ -0,0 +1,29 @@
+
+
+
+ {{fm.devFeaturesTitle}}
+
+
+
+
+
diff --git a/.vitepress/theme/index.js b/.vitepress/theme/index.js
new file mode 100644
index 00000000..a2b93cc5
--- /dev/null
+++ b/.vitepress/theme/index.js
@@ -0,0 +1,20 @@
+// https://vitepress.dev/guide/custom-theme
+import { h } from 'vue'
+import DefaultTheme from 'vitepress/theme'
+import DeveloperFeatures from './components/DeveloperFeatures.vue'
+import Contributors from './components/Contributors.vue'
+import './style.css'
+
+/** @type {import('vitepress').Theme} */
+export default {
+ extends: DefaultTheme,
+ Layout: () => {
+ return h(DefaultTheme.Layout, null, {
+ 'home-features-after': () => h(DeveloperFeatures)
+ // https://vitepress.dev/guide/extending-default-theme#layout-slots
+ })
+ },
+ enhanceApp({ app, router, siteData }) {
+ app.component('Contributors', Contributors)
+ }
+}
diff --git a/.vitepress/theme/style.css b/.vitepress/theme/style.css
new file mode 100644
index 00000000..da94ebfb
--- /dev/null
+++ b/.vitepress/theme/style.css
@@ -0,0 +1,140 @@
+/**
+ * Customize default theme styling by overriding CSS variables:
+ * https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css
+ */
+
+/**
+ * Colors
+ *
+ * Each colors have exact same color scale system with 3 levels of solid
+ * colors with different brightness, and 1 soft color.
+ *
+ * - `XXX-1`: The most solid color used mainly for colored text. It must
+ * satisfy the contrast ratio against when used on top of `XXX-soft`.
+ *
+ * - `XXX-2`: The color used mainly for hover state of the button.
+ *
+ * - `XXX-3`: The color for solid background, such as bg color of the button.
+ * It must satisfy the contrast ratio with pure white (#ffffff) text on
+ * top of it.
+ *
+ * - `XXX-soft`: The color used for subtle background such as custom container
+ * or badges. It must satisfy the contrast ratio when putting `XXX-1` colors
+ * on top of it.
+ *
+ * The soft color must be semi transparent alpha channel. This is crucial
+ * because it allows adding multiple "soft" colors on top of each other
+ * to create a accent, such as when having inline code block inside
+ * custom containers.
+ *
+ * - `default`: The color used purely for subtle indication without any
+ * special meanings attched to it such as bg color for menu hover state.
+ *
+ * - `brand`: Used for primary brand colors, such as link text, button with
+ * brand theme, etc.
+ *
+ * - `tip`: Used to indicate useful information. The default theme uses the
+ * brand color for this by default.
+ *
+ * - `warning`: Used to indicate warning to the users. Used in custom
+ * container, badges, etc.
+ *
+ * - `danger`: Used to show error, or dangerous message to the users. Used
+ * in custom container, badges, etc.
+ * -------------------------------------------------------------------------- */
+
+ :root {
+ --vp-c-default-1: var(--vp-c-gray-1);
+ --vp-c-default-2: var(--vp-c-gray-2);
+ --vp-c-default-3: var(--vp-c-gray-3);
+ --vp-c-default-soft: var(--vp-c-gray-soft);
+
+ --vp-c-brand-1: var(--vp-c-indigo-1);
+ --vp-c-brand-2: var(--vp-c-indigo-2);
+ --vp-c-brand-3: var(--vp-c-indigo-3);
+ --vp-c-brand-soft: var(--vp-c-indigo-soft);
+
+ --vp-c-tip-1: var(--vp-c-brand-1);
+ --vp-c-tip-2: var(--vp-c-brand-2);
+ --vp-c-tip-3: var(--vp-c-brand-3);
+ --vp-c-tip-soft: var(--vp-c-brand-soft);
+
+ --vp-c-warning-1: var(--vp-c-yellow-1);
+ --vp-c-warning-2: var(--vp-c-yellow-2);
+ --vp-c-warning-3: var(--vp-c-yellow-3);
+ --vp-c-warning-soft: var(--vp-c-yellow-soft);
+
+ --vp-c-danger-1: var(--vp-c-red-1);
+ --vp-c-danger-2: var(--vp-c-red-2);
+ --vp-c-danger-3: var(--vp-c-red-3);
+ --vp-c-danger-soft: var(--vp-c-red-soft);
+}
+
+/**
+ * Component: Button
+ * -------------------------------------------------------------------------- */
+
+:root {
+ --vp-button-brand-border: transparent;
+ --vp-button-brand-text: var(--vp-c-white);
+ --vp-button-brand-bg: var(--vp-c-brand-3);
+ --vp-button-brand-hover-border: transparent;
+ --vp-button-brand-hover-text: var(--vp-c-white);
+ --vp-button-brand-hover-bg: var(--vp-c-brand-2);
+ --vp-button-brand-active-border: transparent;
+ --vp-button-brand-active-text: var(--vp-c-white);
+ --vp-button-brand-active-bg: var(--vp-c-brand-1);
+}
+
+/**
+ * Component: Home
+ * -------------------------------------------------------------------------- */
+
+:root {
+ /* --vp-home-hero-name-color: #ff4b03; */
+ --vp-home-hero-name-color: transparent;
+ --vp-home-hero-name-background: -webkit-linear-gradient(
+ 270deg,
+ #ff6d32 30%,
+ #ff4b03
+ );
+
+ --vp-home-hero-image-background-image: linear-gradient(
+ -45deg,
+ #bd34fe 50%,
+ #47caff 50%
+ );
+ --vp-home-hero-image-filter: blur(44px);
+}
+
+@media (min-width: 640px) {
+ :root {
+ --vp-home-hero-image-filter: blur(56px);
+ }
+}
+
+@media (min-width: 960px) {
+ :root {
+ --vp-home-hero-image-filter: blur(68px);
+ }
+}
+
+/**
+ * Component: Custom Block
+ * -------------------------------------------------------------------------- */
+
+:root {
+ --vp-custom-block-tip-border: transparent;
+ --vp-custom-block-tip-text: var(--vp-c-text-1);
+ --vp-custom-block-tip-bg: var(--vp-c-brand-soft);
+ --vp-custom-block-tip-code-bg: var(--vp-c-brand-soft);
+}
+
+/**
+ * Component: Algolia
+ * -------------------------------------------------------------------------- */
+
+.DocSearch {
+ --docsearch-primary-color: var(--vp-c-brand-1) !important;
+}
+
diff --git a/Gemfile b/Gemfile
deleted file mode 100644
index 667f12f1..00000000
--- a/Gemfile
+++ /dev/null
@@ -1,6 +0,0 @@
-# frozen_string_literal: true
-
-source "https://rubygems.org"
-
-gem "github-pages", "~> 219", group: :jekyll_plugins
-gem "just-the-docs"
diff --git a/Gemfile.lock b/Gemfile.lock
deleted file mode 100644
index 4698b1ae..00000000
--- a/Gemfile.lock
+++ /dev/null
@@ -1,274 +0,0 @@
-GEM
- remote: https://rubygems.org/
- specs:
- activesupport (6.0.6.1)
- concurrent-ruby (~> 1.0, >= 1.0.2)
- i18n (>= 0.7, < 2)
- minitest (~> 5.1)
- tzinfo (~> 1.1)
- zeitwerk (~> 2.2, >= 2.2.2)
- addressable (2.8.6)
- public_suffix (>= 2.0.2, < 6.0)
- coffee-script (2.4.1)
- coffee-script-source
- execjs
- coffee-script-source (1.11.1)
- colorator (1.1.0)
- commonmarker (0.17.13)
- ruby-enum (~> 0.5)
- concurrent-ruby (1.2.3)
- dnsruby (1.72.1)
- simpleidn (~> 0.2.1)
- em-websocket (0.5.3)
- eventmachine (>= 0.12.9)
- http_parser.rb (~> 0)
- ethon (0.16.0)
- ffi (>= 1.15.0)
- eventmachine (1.2.7)
- execjs (2.9.1)
- faraday (2.9.0)
- faraday-net_http (>= 2.0, < 3.2)
- faraday-net_http (3.1.0)
- net-http
- ffi (1.16.3)
- forwardable-extended (2.6.0)
- gemoji (3.0.1)
- github-pages (219)
- github-pages-health-check (= 1.17.7)
- jekyll (= 3.9.0)
- jekyll-avatar (= 0.7.0)
- jekyll-coffeescript (= 1.1.1)
- jekyll-commonmark-ghpages (= 0.1.6)
- jekyll-default-layout (= 0.1.4)
- jekyll-feed (= 0.15.1)
- jekyll-gist (= 1.5.0)
- jekyll-github-metadata (= 2.13.0)
- jekyll-mentions (= 1.6.0)
- jekyll-optional-front-matter (= 0.3.2)
- jekyll-paginate (= 1.1.0)
- jekyll-readme-index (= 0.3.0)
- jekyll-redirect-from (= 0.16.0)
- jekyll-relative-links (= 0.6.1)
- jekyll-remote-theme (= 0.4.3)
- jekyll-sass-converter (= 1.5.2)
- jekyll-seo-tag (= 2.7.1)
- jekyll-sitemap (= 1.4.0)
- jekyll-swiss (= 1.0.0)
- jekyll-theme-architect (= 0.2.0)
- jekyll-theme-cayman (= 0.2.0)
- jekyll-theme-dinky (= 0.2.0)
- jekyll-theme-hacker (= 0.2.0)
- jekyll-theme-leap-day (= 0.2.0)
- jekyll-theme-merlot (= 0.2.0)
- jekyll-theme-midnight (= 0.2.0)
- jekyll-theme-minimal (= 0.2.0)
- jekyll-theme-modernist (= 0.2.0)
- jekyll-theme-primer (= 0.6.0)
- jekyll-theme-slate (= 0.2.0)
- jekyll-theme-tactile (= 0.2.0)
- jekyll-theme-time-machine (= 0.2.0)
- jekyll-titles-from-headings (= 0.5.3)
- jemoji (= 0.12.0)
- kramdown (= 2.3.1)
- kramdown-parser-gfm (= 1.1.0)
- liquid (= 4.0.3)
- mercenary (~> 0.3)
- minima (= 2.5.1)
- nokogiri (>= 1.10.4, < 2.0)
- rouge (= 3.26.0)
- terminal-table (~> 1.4)
- github-pages-health-check (1.17.7)
- addressable (~> 2.3)
- dnsruby (~> 1.60)
- octokit (~> 4.0)
- public_suffix (>= 3.0, < 5.0)
- typhoeus (~> 1.3)
- html-pipeline (2.14.3)
- activesupport (>= 2)
- nokogiri (>= 1.4)
- http_parser.rb (0.8.0)
- i18n (0.9.5)
- concurrent-ruby (~> 1.0)
- jekyll (3.9.0)
- addressable (~> 2.4)
- colorator (~> 1.0)
- em-websocket (~> 0.5)
- i18n (~> 0.7)
- jekyll-sass-converter (~> 1.0)
- jekyll-watch (~> 2.0)
- kramdown (>= 1.17, < 3)
- liquid (~> 4.0)
- mercenary (~> 0.3.3)
- pathutil (~> 0.9)
- rouge (>= 1.7, < 4)
- safe_yaml (~> 1.0)
- jekyll-avatar (0.7.0)
- jekyll (>= 3.0, < 5.0)
- jekyll-coffeescript (1.1.1)
- coffee-script (~> 2.2)
- coffee-script-source (~> 1.11.1)
- jekyll-commonmark (1.3.1)
- commonmarker (~> 0.14)
- jekyll (>= 3.7, < 5.0)
- jekyll-commonmark-ghpages (0.1.6)
- commonmarker (~> 0.17.6)
- jekyll-commonmark (~> 1.2)
- rouge (>= 2.0, < 4.0)
- jekyll-default-layout (0.1.4)
- jekyll (~> 3.0)
- jekyll-feed (0.15.1)
- jekyll (>= 3.7, < 5.0)
- jekyll-gist (1.5.0)
- octokit (~> 4.2)
- jekyll-github-metadata (2.13.0)
- jekyll (>= 3.4, < 5.0)
- octokit (~> 4.0, != 4.4.0)
- jekyll-include-cache (0.2.1)
- jekyll (>= 3.7, < 5.0)
- jekyll-mentions (1.6.0)
- html-pipeline (~> 2.3)
- jekyll (>= 3.7, < 5.0)
- jekyll-optional-front-matter (0.3.2)
- jekyll (>= 3.0, < 5.0)
- jekyll-paginate (1.1.0)
- jekyll-readme-index (0.3.0)
- jekyll (>= 3.0, < 5.0)
- jekyll-redirect-from (0.16.0)
- jekyll (>= 3.3, < 5.0)
- jekyll-relative-links (0.6.1)
- jekyll (>= 3.3, < 5.0)
- jekyll-remote-theme (0.4.3)
- addressable (~> 2.0)
- jekyll (>= 3.5, < 5.0)
- jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0)
- rubyzip (>= 1.3.0, < 3.0)
- jekyll-sass-converter (1.5.2)
- sass (~> 3.4)
- jekyll-seo-tag (2.7.1)
- jekyll (>= 3.8, < 5.0)
- jekyll-sitemap (1.4.0)
- jekyll (>= 3.7, < 5.0)
- jekyll-swiss (1.0.0)
- jekyll-theme-architect (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-cayman (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-dinky (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-hacker (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-leap-day (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-merlot (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-midnight (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-minimal (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-modernist (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-primer (0.6.0)
- jekyll (> 3.5, < 5.0)
- jekyll-github-metadata (~> 2.9)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-slate (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-tactile (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-time-machine (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-titles-from-headings (0.5.3)
- jekyll (>= 3.3, < 5.0)
- jekyll-watch (2.2.1)
- listen (~> 3.0)
- jemoji (0.12.0)
- gemoji (~> 3.0)
- html-pipeline (~> 2.2)
- jekyll (>= 3.0, < 5.0)
- just-the-docs (0.8.2)
- jekyll (>= 3.8.5)
- jekyll-include-cache
- jekyll-seo-tag (>= 2.0)
- rake (>= 12.3.1)
- kramdown (2.3.1)
- rexml
- kramdown-parser-gfm (1.1.0)
- kramdown (~> 2.0)
- liquid (4.0.3)
- listen (3.9.0)
- rb-fsevent (~> 0.10, >= 0.10.3)
- rb-inotify (~> 0.9, >= 0.9.10)
- mercenary (0.3.6)
- mini_portile2 (2.8.6)
- minima (2.5.1)
- jekyll (>= 3.5, < 5.0)
- jekyll-feed (~> 0.9)
- jekyll-seo-tag (~> 2.1)
- minitest (5.22.3)
- net-http (0.4.1)
- uri
- nokogiri (1.16.4)
- mini_portile2 (~> 2.8.2)
- racc (~> 1.4)
- octokit (4.25.1)
- faraday (>= 1, < 3)
- sawyer (~> 0.9)
- pathutil (0.16.2)
- forwardable-extended (~> 2.6)
- public_suffix (4.0.7)
- racc (1.7.3)
- rake (13.2.1)
- rb-fsevent (0.11.2)
- rb-inotify (0.10.1)
- ffi (~> 1.0)
- rexml (3.2.6)
- rouge (3.26.0)
- ruby-enum (0.9.0)
- i18n
- rubyzip (2.3.2)
- safe_yaml (1.0.5)
- sass (3.7.4)
- sass-listen (~> 4.0.0)
- sass-listen (4.0.0)
- rb-fsevent (~> 0.9, >= 0.9.4)
- rb-inotify (~> 0.9, >= 0.9.7)
- sawyer (0.9.2)
- addressable (>= 2.3.5)
- faraday (>= 0.17.3, < 3)
- simpleidn (0.2.2)
- unf (~> 0.1.4)
- terminal-table (1.8.0)
- unicode-display_width (~> 1.1, >= 1.1.1)
- thread_safe (0.3.6)
- typhoeus (1.4.1)
- ethon (>= 0.9.0)
- tzinfo (1.2.11)
- thread_safe (~> 0.1)
- unf (0.1.4)
- unf_ext
- unf_ext (0.0.9.1)
- unicode-display_width (1.8.0)
- uri (0.13.0)
- zeitwerk (2.6.13)
-
-PLATFORMS
- ruby
-
-DEPENDENCIES
- github-pages (~> 219)
- just-the-docs
-
-BUNDLED WITH
- 2.5.9
diff --git a/README.md b/README.md
index d9bef553..2a764d5b 100644
--- a/README.md
+++ b/README.md
@@ -1,32 +1,44 @@
# remotestorage.io
This is the remoteStorage website, running on
-[https://remotestorage.io](https://remotestorage.io).
+[remotestorage.io](https://remotestorage.io).
## Development
-The website is built using [Jekyll](https://jekyllrb.com/) and the
-[Just the Docs](https://pmarsceill.github.io/just-the-docs/) theme.
+The website is built using [VitePress](https://vitepress.dev/).It includes the
+remoteStorage.js documentation via a Git submodule.
### Setup
-With [Git](https://git-scm.com) and
-[Ruby 2.5 - 2.7](https://www.ruby-lang.org/en/documentation/installation) installed,
-run the following command to install dependencies:
+With [Git](https://git-scm.com) and [node.js](https://nodejs.org) installed,
+and an SSH key associated with your GitHub account...
+Clone this repo:
+
+```sh
+git clone git@github.com:remotestorage/website.git
+cd website
+```
+
+Initialize and fetch the rs.js submodule:
+
+```sh
+git submodule update --init
```
-bundle install
+
+Install the dependencies:
+
+```sh
+npm install
```
### Running
-Run the following command to build the static site to `/_site` and make it
-accessible at
-http://localhost:4000.
-Changes to `.md` files should be visible automatically without refreshing.
+Run the local dev server, which automatically updates the local preview site
+whenever documents are saved:
```
-bundle exec jekyll serve
+npm run docs:dev
```
### Deployment
diff --git a/_config.yml b/_config.yml
deleted file mode 100644
index 992cc220..00000000
--- a/_config.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-# https://github.com/pmarsceill/just-the-docs/blob/master/_config.yml
-
-title: remoteStorage
-description: Open protocol for per-user storage on the Web
-repository: remotestorage/website
-theme: just-the-docs
-permalink: pretty
-search_enabled: false
-
-# Footer "Edit this page on GitHub" link text
-gh_edit_link: true # show or hide edit this page link
-gh_edit_link_text: "Edit this page on GitHub"
-gh_edit_repository: "https://github.com/remotestorage/website" # the github URL for your repo
-gh_edit_branch: "master" # the branch that your docs is served from
-# gh_edit_source: docs # the source that your files originate from
-gh_edit_view_mode: "edit" # "tree" or "edit" if you want the user to jump into the editor immediately
diff --git a/apps.md b/apps.md
index 70bab94d..af7ea179 100644
--- a/apps.md
+++ b/apps.md
@@ -1,8 +1,3 @@
----
-title: Apps
-nav_order: 4
----
-
# Apps
The following is a list of known apps that have integrated RS as a
@@ -16,6 +11,7 @@ may be outdated.
### Productivity / Office
| **Name** | **Description** | **Scope/Module** | **Source Code** | **Store/Catalog & Notes** |
+| - | - | - | - | - |
| [Papiers](https://papiers.gitlab.io/) | A simple but powerful note-taking app that syncs with your own cloud. | Notes | [GitLab](https://gitlab.com/papiers) | Full [PWA](https://papiers.gitlab.io/) |
| [Todonna](https://todonna.gitlab.io/) | A simple but powerful Todo app that syncs with your own cloud. | Todo | [GitLab](https://gitlab.com/todonna) | Full [PWA](https://todonna.gitlab.io/) |
| [Litewrite](https://litewrite.net) | A distraction-free app for simple note taking and writing | documents / [Documents](https://github.com/litewrite/remotestorage-module-documents) | [GitHub](https://github.com/litewrite/litewrite) | [Chrome Web Store](https://chrome.google.com/webstore/detail/litewrite/cbdonnipllnmnkbmeopncohocjggmdkk) Works well on mobile and desktop |
@@ -33,6 +29,7 @@ may be outdated.
### Site Builder / Wiki
| **Name** | **Description** | **Scope/Module** | **Source Code** | **Store/Catalog & Notes** |
+| - | - | - | - | - |
| [Hyperdraft](https://hyperdraft.rosano.ca) | Turn your text notes into a website. | wikiavec | [GitHub](https://github.com/wikiavec/hyperdraft) | Works well on mobile and desktop |
| [TiddlyWiki remoteStorage](https://tiddly.alhur.es/#%24%3A%2Fplugins%2Ffiatjaf%2FremoteStorage) | A [TiddlyWiki](https://tiddlywiki.com/) plugin that enables saving of individual tiddlers to remoteStorage. | tiddlers | [GitHub](https://github.com/fiatjaf/tiddlywiki-remotestorage) | A hosted version you can edit and share without installing anything is available on [https://tiddly.alhur.es/](https://tiddly.alhur.es/) |
| [QuikWik](https://quik-wik.5apps.com/) | A small and simple Wiki which uses Markdown syntax and stores data in localStorage and remoteStorage. | wiki | [GitHub](https://github.com/maheee/QuikWik) |
@@ -40,12 +37,14 @@ may be outdated.
### Learning / Self-Improvement
| **Name** | **Description** | **Scope/Module** | **Source Code** | **Store/Catalog & Notes** |
+| - | - | - | - | - |
| [Kommit](https://kommit.rosano.ca) | Flashcards with spaced-repetition | kommit | [GitHub](https://github.com/kommitapp/kommit) | Works well on mobile and desktop |
| [Emoji Log](https://emojilog.rosano.ca) | Personal tracker organized with emoji | emojilog | [GitHub](https://github.com/emojilog/emojilog) | Works well on mobile and desktop |
### Media Consumption
| **Name** | **Description** | **Scope/Module** | **Source Code** | **Store/Catalog & Notes** |
+| - | - | - | - | - |
| [Pétrolette](https://petrolette.space/) | A news aggregator / Web page that syncs using Remote Storage | petrolette | [GitLab](https://framagit.org/yphil/petrolett) | Works well on mobile and desktop |
| [Àlir](https://alir.5apps.com) | Read-later app | alir | forked on [GitHub](https://github.com/rosano/alir) | Designed for mobiles, works offline |
| [Joybox](https://joybox.rosano.ca) | A pinboard for audiovisual media. | joybox | [GitHub](https://github.com/joyboxapp/joybox) | Works well on mobile and desktop |
@@ -55,6 +54,7 @@ may be outdated.
### Finance
| **Name** | **Description** | **Scope/Module** | **Source Code** | **Store/Catalog & Notes** |
+| - | - | - | - | - |
| [hledger interactive](https://hledger.alhur.es/) | Parser and playground for [hledger](https://hledger.org) journals. | finance | [GitHub](https://github.com/fiatjaf/d) | Can save and load multiple journals to/from remoteStorage |
| [Grouptabs](https://grouptabs.5apps.com) | Track expenses in a group of people | gruppenkasse | [GitHub](https://github.com/xMartin/grouptabs) | Best on mobile; needs shared storage account if you want to use it with a group |
| [Road To FIRE](https://roadtofire.iliviu.me/) | A portfolio manager app for your stocks, ETFs, mutual funds, bonds, cryptocurrencies, commodities, P2P loans and real estate | asset-portfolio | [GitHub](https://github.com/iLiviu/road-to-fire) | Works well on mobile and desktop |
@@ -62,12 +62,14 @@ may be outdated.
### Password
| **Name** | **Description** | **Scope/Module** | **Source Code** | **Store/Catalog & Notes** |
+| - | - | - | - | - |
| [LessPass remoteStorage](https://lesspass.alhur.es/) | A new, faster [LessPass](https://lesspass.com/) widget that does autofill and saves options on remoteStorage. | lesspass | [GitHub](https://github.com/fiatjaf/lesspass-remotestorage) | [Firefox Add-on](https://addons.mozilla.org/en-US/firefox/addon/lesspass-remotestorage/) Save password profiles based on the domain you are; supports multiple profiles for each domain |
| [PfP: Pain-free Passwords](https://pfp.works/) | A secure and convenient password manager that keeps you in control of your data. | pfp | [GitHub](https://github.com/palant/pfp/) | [Firefox Add-on](https://addons.mozilla.org/addon/easy-passwords/) [Chrome Extension](https://chrome.google.com/webstore/detail/pfp-pain-free-passwords/hplhaekjfmjfnfdllkpjpeenlbclffgh) [Opera Add-on](https://addons.opera.com/en/extensions/details/easy-passwords/) Syncs any number of devices via remoteStorage as long as they share the same master password; remoteStorage server doesn't have to be trusted, data is fully encrypted |
### Miscellaneous
| **Name** | **Description** | **Scope/Module** | **Source Code** | **Store/Catalog & Notes** |
+| - | - | - | - | - |
| [Launchlet](https://launchlet.dev) | Run custom JavaScript or CSS on any website via bookmarklet or extension. | launchlet | [GitHub](https://github.com/launchlet/launchlet) | [Chrome Extension](https://chrome.google.com/webstore/detail/launchlet/gmgfdkajnjplpjmodjmmmkfkpjdjgnlf) [Safari Extension](https://github.com/launchlet/launchlet-extension) Works via bookmarklet or browser extension; mostly works on mobile, but best on desktop |
| [Sharesome](https://sharesome.5apps.com/) | Share files quickly from your remote storage | shares | [GitHub](https://github.com/skddc/sharesome) | Best on desktop |
| [Webmarks](https://webmarks.5apps.com) | Archive your bookmarks in remoteStorage | bookmarks / [bookmarks](https://www.npmjs.com/package/@remotestorage/module-bookmarks) | [GitHub](https://github.com/skddc/webmarks) | Best on desktop |
@@ -80,6 +82,7 @@ may be outdated.
### Sample / Tutorial
| **Name** | **Description** | **Scope/Module** | **Source Code** | **Store/Catalog & Notes** |
+| - | - | - | - | - |
| [My Favorite Drinks](https://myfavoritedrinks.remotestorage.io) | Keep a list of your favorite drinks | myfavoritedrinks | [GitHub](https://github.com/RemoteStorage/myfavoritedrinks) | Simple demo app, maintained by rs.js devs |
| [Hello](https://hello.0data.app) | Simple Hello World with remoteStorage, Solid, and Fission | todos | [GitHub](https://github.com/0dataapp/hello) | Works well on mobile and desktop |
| [Lucchetto Onboard](https://overhide.github.io/armadietto/lucchetto/onboard.html) | Enables in-app purchase SKU onboarding for [luchetto.js](https://www.npmjs.com/package/lucchetto/v/latest) extended RS apps | pay2my.app | [GitHub](https://github.com/overhide/armadietto/blob/master/lucchetto/onboard.html) | wide screens only; featured in the [remote-storage tutorial](https://github.com/overhide/remotestorage-tutorial) |
@@ -89,14 +92,14 @@ may be outdated.
## CLI applications, daemons, libraries
-| Name | Description | Scope / Module | Source Code | Store/Catalog Links | Comments/Notes |
-| ------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ------------------------------- | ------------------------------------------------------------ | ----------------------------------------------- | ---------------- |
-| [remote-storage-uploader](http://github.com/fkooman/remote-storage-uploader) | Send files to public upload folder | upload | [GitHub](https://github.com/fkooman/remote-storage-uploader) | | Written in PHP |
-| [rs-backup](https://www.npmjs.com/package/rs-backup) | Backup and restore data from/to RS accounts | \* | [GitHub](https://github.com/skddc/rs-backup) | [NPM](https://www.npmjs.com/package/rs-backup) | Based on node.js |
-| [remotestorage-fuse](https://github.com/remotestorage/fuse) | Allows you to access data on any RS-compatible server via the regular filesystem | \* | [GitHub](https://github.com/remotestorage/fuse) | | |
-| [hubot-remotestorage-logger](https://github.com/67P/hubot-remotestorage-logger) | Logs chat messages from Hubot daemons to remoteStorage accounts | chat-messages / [remotestorage-module-chat-messages](https://www.npmjs.com/package/remotestorage-module-chat-messages) | [GitHub](https://github.com/67P/hubot-remotestorage-logger) | | |
-| [rs-messages-importer](https://github.com/67P/rs-messages-importer) | CLI for importing log archives (currently only ZNC) to remoteStorage | chat-messages | [GitHub](https://github.com/67P/rs-messages-importer) | | |
-| [Unifile](https://github.com/silexlabs/unifile) | Node.js library to access cloud storage services with a common API | | [GitHub](https://github.com/silexlabs/unifile) | | |
+| Name | Description | Scope / Module | Source Code | Store/Catalog Links | Comments/Notes |
+| - | - | - | - | - | - |
+| [remote-storage-uploader](http://github.com/fkooman/remote-storage-uploader) | Send files to public upload folder | upload | [GitHub](https://github.com/fkooman/remote-storage-uploader) | | Written in PHP |
+| [rs-backup](https://www.npmjs.com/package/rs-backup) | Backup and restore data from/to RS accounts | \* | [GitHub](https://github.com/skddc/rs-backup) | [NPM](https://www.npmjs.com/package/rs-backup) | Based on node.js |
+| [remotestorage-fuse](https://github.com/remotestorage/fuse) | Allows you to access data on any RS-compatible server via the regular filesystem | \* | [GitHub](https://github.com/remotestorage/fuse) | |
+| [hubot-remotestorage-logger](https://github.com/67P/hubot-remotestorage-logger) | Logs chat messages from Hubot daemons to remoteStorage accounts | chat-messages / [remotestorage-module-chat-messages](https://www.npmjs.com/package/remotestorage-module-chat-messages) | [GitHub](https://github.com/67P/hubot-remotestorage-logger) | | |
+| [rs-messages-importer](https://github.com/67P/rs-messages-importer) | CLI for importing log archives (currently only ZNC) to remoteStorage | chat-messages | [GitHub](https://github.com/67P/rs-messages-importer) | | |
+| [Unifile](https://github.com/silexlabs/unifile) | | | | | |
## Notes
diff --git a/contribute.md b/contribute.md
index 2b430791..3399e17b 100644
--- a/contribute.md
+++ b/contribute.md
@@ -1,72 +1,87 @@
----
-title: Contribute
-nav_order: 6
----
-
-What can I do for remoteStorage?
-
-* I can code
-* I can design
-* I can write
-* I can run servers
-* I can test things
-
----
-
-# I can code
-
-## JavaScript
-
-* Integrate RS in any of your apps. More apps means more users, means more developers, means more apps.
-* Help out with the [reference client](https://github.com/remotestorage/remotestorage.js/). There are always [issues](https://github.com/remotestorage/remotestorage.js/issues) to work on
-* Help with completing and improving the remoteStorage.js [documentation](http://remotestoragejs.readthedocs.io/en/latest/) (even if it's just questions or feedback). There is more detailed information about how to [contribute to the documentation](http://remotestoragejs.readthedocs.io/en/latest/contributing/docs.html).
-* Contribute to any open-source remoteStorage app. Some of them are [listed here](/apps "Apps").
-* Help improving and creating new remoteStorage.js [data modules](https://github.com/remotestorage/modules)
-* Help improving [Armadietto](https://github.com/remotestorage/armadietto/), a RS server based on node.js
-
-## PHP
+# What can I do for remoteStorage?
+
+## I can code
+
+### JavaScript
+
+* Integrate RS in any of your apps. More apps means more users, means more
+ developers, means more apps.
+* Help out with the [reference
+ client](https://github.com/remotestorage/remotestorage.js/). There are always
+ [issues](https://github.com/remotestorage/remotestorage.js/issues) to work on
+* Help with completing and improving the remoteStorage.js
+ [documentation](./rs.js/docs/) (even if
+ it's just questions or feedback). There is more detailed information about
+ how to [contribute to the documentation](./rs.js/docs/contributing/docs).
+* Contribute to any open-source remoteStorage app. Some of them are [listed
+ here](/apps "Apps").
+* Help improving and creating new remoteStorage.js [data
+ modules](https://github.com/remotestorage/modules)
+* Help improving [Armadietto](https://github.com/remotestorage/armadietto/), a
+ maintained RS server based on node.js
+
+### PHP
* Help out with [php-remote-storage](https://git.sr.ht/~fkooman/php-remote-storage), a remoteStorage server written in PHP
-## Rust
+### Rust
* Contribute to [Mysteryshack](https://github.com/untitaker/mysteryshack), a light-weight, fast, self-contained RS server
-## Ruby
+### Ruby
-* There's an [integration test suite](https://github.com/remotestorage/api-test-suite) for testing local and/or live remoteStorage servers for API compliance, which is written in Ruby (minitest/spec). It's not 100% complete yet. Ping us on the [forums](https://community.remotestorage.io/) or [IRC](https://kiwiirc.com/client/irc.freenode.net/#remotestorage), if you'd like to contribute!
-* Write integrations for [Huginn](https://github.com/huginn/huginn) (an open-source IFTTT/Zapier alternative) that automatically copy your data from silos to your own storage
+* There is a maintained RS server implementation written in Ruby, consisting of an
+ [accounts management app and UI](https://gitea.kosmos.org/kosmos/akkounts/)
+ based on Rails, and a [RS HTTP API based on
+ Sinatra](https://github.com/5apps/liquor-cabinet)
+* There's an [integration test
+ suite](https://github.com/remotestorage/api-test-suite) for testing local
+ and/or live remoteStorage servers for API compliance, which is written in
+ Ruby (minitest/spec).
-## Java
+### Java
* We'd like to create an Android sync adapter that synchronizes calendars and contacts. See [this thread](https://community.remotestorage.io/t/synchronization-with-carddav-caldav/307/4) if you would like to help.
* Create an Android app that integrates sharing, for e.g. URLs to the bookmarks category, or images to the shares module.
-## C
+### C
-* There's a [remoteStorage FUSE module](https://github.com/remotestorage/fuse) for mounting storages as filesystems, which needs upgrading to newer protocol versions and finishing in general.
-* There's a [remoteStorage server](https://github.com/remotestorage/rs-serve) written in C (with a little node.js helper app), which needs upgrading and has some installation issues.
+* There's a [remoteStorage FUSE module](https://github.com/remotestorage/fuse)
+ for mounting storages as filesystems, which needs upgrading to newer protocol
+ versions and finishing in general.
+* There's a [remoteStorage server](https://github.com/remotestorage/rs-serve)
+ written in C (with a little node.js helper app), which needs upgrading and
+ has some installation issues.
-# I can design
+## I can design
-* Improve the design of our website and/or wiki. Both could look much more beautiful with your help. The website repo is located at [https://github.com/remotestorage/website](https://github.com/remotestorage/website) and we have a [waffle.io board for website issues](https://waffle.io/remotestorage/website).
-* Design a new landing page for users coming from apps and the RS connect widget.
-* Help improve the design of any RS-enabled open source app (see [Apps](/apps "Apps") e.g.). Many of them are in need of better app icons and/or UI/UX improvements. Giving feedback on design decisions and how to improve apps is a good start as well.
-* See [Design](/wiki/design "Design") for more info.
+* Improve the design of this website. The website repo is located at
+ [https://github.com/remotestorage/website](https://github.com/remotestorage/website)
+* Help improve the design of any RS-enabled open source (see e.g. [apps](/apps)). Or
+ design a new one and find a developer to help you with implementing it.
-# I can write
+## I can write
-* Add and/or improve content of the RS website, any page on this wiki, or any other project-related content on the Web.
-* Help us improve existing technical documentation (lots of room for your contributions/improvements). There are e.g. the [remoteStorage.js API docs](http://remotestoragejs.readthedocs.io/en/latest/), the [remoteStorage.js Beginner's Guide](/wiki/beginners), or any page linked on and including the [Developer Portal](/wiki/developers).
-* Help improve documentation, description and marketing materials for RS-enabled open-source [apps](/apps "Apps") and [servers](/servers "Servers").
-* Write about remoteStorage on your website, blog, social media, etc.. Explain the concept to users, developers, providers, and anyone else you think should know about remoteStorage's existence and how it works.
-* Improve the language and clarity of the remoteStorage specification draft (see [Protocol](/protocol)).
+* Add and/or improve content of the RS website, or any other project-related
+ content on the Web.
+* Help us improve existing technical documentation. e.g. the [remoteStorage.js
+ docs](./rs.js/docs/)
+* Help improve documentation, description and marketing materials for
+ RS-enabled open-source [apps](/apps) and [servers](/servers).
+* Write about remoteStorage on your website, blog, social media, etc.. Explain
+* the concept to users, developers, providers, and anyone else you think should
+ know about remoteStorage's existence and how it works.
+* Improve the language and clarity of the [protocol
+ specification](https://github.com/remotestorage/spec)
-# I can run servers
+## I can run servers
-* Set up a [server](/servers "Server") for yourself and maybe your family and friends!
-* Become a commercial or non-profit storage provider. You can either implement your own or use [existing server](/servers "Servers") software as your basis.
+* Set up a [server](/servers) for yourself and maybe your family and
+ friends!
+* Become a commercial or non-profit storage provider. You can either implement
+ your own or use [existing server](/servers) software as your basis.
-# I can test things
+## I can test things
-* Use RS-enabled [apps](/apps "Apps") and/or [servers](/servers "Servers") and report issues and constructive feedback.
+* Use RS-enabled [apps](/apps) and/or [servers](/servers) and
+ report issues and constructive feedback.
diff --git a/design.md b/design.md
new file mode 100644
index 00000000..a4bf9a69
--- /dev/null
+++ b/design.md
@@ -0,0 +1,11 @@
+# Design
+
+## Logo / icon
+
+
+
+The remoteStorage logo may be used, integrated, and adapted for anything
+related to the [protocol](protocol) or implementations of it.
+
+You can find the logo, as well as some other assets, in the [remoteStorage
+Design](https://github.com/remotestorage/design/) repository.
diff --git a/doc/code/index.html b/doc/code/index.html
deleted file mode 100644
index fc187a56..00000000
--- a/doc/code/index.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
- Moved to https://remotestorage.github.io/remotestorage.js/
-
-
-