From 944dcc3e35fcbd2b011eab356497520d224a7b28 Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Wed, 14 Jan 2026 18:37:00 +0000 Subject: [PATCH] docs: add tiering to the documentation #8873 --- docs/content/tiers.md | 58 ++++++++++++++++++++++++ docs/layouts/_default/baseof.html | 5 ++ docs/layouts/partials/tier.html | 42 +++++++++++++++++ docs/layouts/shortcodes/tier.html | 1 + docs/layouts/shortcodes/tiers-table.html | 41 +++++++++++++++++ 5 files changed, 147 insertions(+) create mode 100644 docs/content/tiers.md create mode 100644 docs/layouts/partials/tier.html create mode 100644 docs/layouts/shortcodes/tier.html create mode 100644 docs/layouts/shortcodes/tiers-table.html diff --git a/docs/content/tiers.md b/docs/content/tiers.md new file mode 100644 index 000000000..d00b05f63 --- /dev/null +++ b/docs/content/tiers.md @@ -0,0 +1,58 @@ +--- +title: "Backend Support Tiers" +description: "A complete list of supported backends and their stability tiers." +--- + +# Tiers + +Rclone backends are divided into tiers to give users an idea of the stability of each backend. + +| Tier | Label | Intended meaning | +|--------|---------------|------------------| +| {{< tier tier="Tier 1" >}} | Core | Production-grade, first-class | +| {{< tier tier="Tier 2" >}} | Stable | Well-supported, minor gaps | +| {{< tier tier="Tier 3" >}} | Supported | Works for many uses; known caveats | +| {{< tier tier="Tier 4" >}} | Experimental | Use with care; expect gaps/changes | +| {{< tier tier="Tier 5" >}} | Deprecated | No longer maintained or supported | + +## Overview + +Here is a summary of all backends: + +{{< tiers-table >}} + +## Scoring + +Here is how the backends are scored. + +### Features + +These are useful optional features a backend should have in rough +order of importance. Each one of these scores a point for the Features +column. + +- F1: Hash(es) +- F2: Modtime +- F3: Stream upload +- F4: Copy/Move +- F5: DirMove +- F6: Metadata +- F7: MultipartUpload + + +### Tier + +The tier is decided after determining these attributes. Some discretion is allowed in tiering as some of these attributes are more important than others. + +| Attr | T1: Core | T2: Stable | T3: Supported | T4: Experimental | T5: Incubator | +|------|----------|------------|---------------|------------------|---------------| +| Maintainers | >=2 | >=1 | >=1 | >=0 | >=0 | +| API source | Official | Official | Either | Either | Either | +| Features (F1-F7) | >=5/7 | >=4/7 | >=3/7 | >=2/7 | N/A | +| Integration tests | All Green | All green | Nearly all green | Some Flaky | N/A | +| Error handling | Pacer | Pacer | Retries | Retries | N/A | +| Data integrity | Hashes, alt, modtime | Hashes or alt | Hash OR modtime | Best-effort | N/A | +| Perf baseline | Bench within 2x S3 | Bench doc | Anecdotal OK | Optional | N/A | +| Adoption | widely used | often used | some use | N/A | N/A | +| Docs completeness | Full | Full | Basic | Minimal | Minimal | +| Security | Principle-of-least-privilege | Reasonable scopes | Basic auth | Works | Works | diff --git a/docs/layouts/_default/baseof.html b/docs/layouts/_default/baseof.html index 326e826c4..82a9cc000 100644 --- a/docs/layouts/_default/baseof.html +++ b/docs/layouts/_default/baseof.html @@ -44,6 +44,11 @@ {{ $statusCode }} {{ end }} + {{ if .Page.File }} + {{ $backendName := .Page.File.TranslationBaseName }} + {{ partial "tier.html" (dict "name" $backendName "align" true) }} + {{ end }} + {{ block "main" . }} {{ end }} diff --git a/docs/layouts/partials/tier.html b/docs/layouts/partials/tier.html new file mode 100644 index 000000000..07f38883a --- /dev/null +++ b/docs/layouts/partials/tier.html @@ -0,0 +1,42 @@ +{{/* Context: Accepts .tier (string) OR .name (string) for lookup. Optional: .align (bool) */}} + +{{ $tierColors := dict + "Tier 1" "success" + "Tier 2" "success" + "Tier 3" "warning" + "Tier 4" "danger" + "Tier 5" "danger" +}} + +{{ $tierMessages := dict + "Tier 1" "Core: Production-grade, first-class" + "Tier 2" "Stable: Well-supported, minor gaps" + "Tier 3" "Supported: Works for many uses; known caveats" + "Tier 4" "Experimental: Use with care; expect gaps/changes" + "Tier 5" "Deprecated: No longer maintained or supported" +}} + +{{/* Determine the Tier Name */}} +{{ $currentTier := "" }} + +{{ if .tier }} + {{/* Direct Tier Usage */}} + {{ $currentTier = .tier }} +{{ else if .name }} + {{/* Backend Lookup Usage */}} + {{ $backendName := .name | lower }} + {{ $data := index site.Data.backends $backendName }} + {{ if $data }} + {{ $currentTier = $data.tier }} + {{ end }} +{{ end }} + +{{/* Render Badge if a Tier was found */}} +{{ if $currentTier }} + {{ $color := index $tierColors $currentTier | default "secondary" }} + {{ $message := index $tierMessages $currentTier | default "" }} + + + {{ $currentTier }} + +{{ end }} diff --git a/docs/layouts/shortcodes/tier.html b/docs/layouts/shortcodes/tier.html new file mode 100644 index 000000000..13fcbbe4f --- /dev/null +++ b/docs/layouts/shortcodes/tier.html @@ -0,0 +1 @@ +{{ partial "tier.html" (dict "tier" (.Get "tier") "name" (.Get "name") "align" (.Get "align")) }} diff --git a/docs/layouts/shortcodes/tiers-table.html b/docs/layouts/shortcodes/tiers-table.html new file mode 100644 index 000000000..8597b3363 --- /dev/null +++ b/docs/layouts/shortcodes/tiers-table.html @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + {{ range $name, $data := site.Data.backends }} + + + + + + + + + + + + + {{ end }} + +
BackendTierMaintainersFeaturesTestsIntegrityPerfAdoptionDocsSecurity
+ {{ $data.name }} + + {{ partial "tier.html" (dict "name" $name "align" false) }} + {{ $data.maintainers | default "-" }}{{ $data.features_score | string | default "-" }} + + {{ if eq $data.integration_tests "Passing" }}✔{{ else }}✖{{ end }} + + {{ $data.integration_tests | default "-" }} + {{ $data.data_integrity | default "-" }}{{ $data.performance | default "-" }}{{ $data.adoption | default "-" }}{{ $data.docs | default "-" }}{{ $data.security | default "-" }}