Skip to content

Instantly share code, notes, and snippets.

@melvincarvalho
Last active June 12, 2025 17:58
Show Gist options
  • Save melvincarvalho/03d1231aa2bc88f31dab6e95718ba309 to your computer and use it in GitHub Desktop.
Save melvincarvalho/03d1231aa2bc88f31dab6e95718ba309 to your computer and use it in GitHub Desktop.
Introduction.md

2 Introduction

The Linked Web Storage (LWS) Protocol defines the minimum set of interoperable, HTTP-based interactions that let any conforming application read, write, and manage data that lives outside the application’s own infrastructure. Its purpose is to restore an essential architectural principle of the Web: users control where their data is stored while applications come and go—without breaking links, permissions, or provenance.

Today most Web applications entangle storage, identity, access control, and business logic behind a single origin. Migrating to a new provider or adopting a new application therefore often means abandoning existing data. LWS breaks that coupling. By standardising a small, resource-oriented contract it enables

  • portable personal and enterprise data vaults that can move between providers, clouds, or on-premise deployments,
  • application innovation decoupled from storage choices,
  • consistent security semantics across heterogeneous back-ends, and
  • a genuinely linkable data space, because every resource continues to be identified by an ordinary URI.

2.1 Design philosophy

  • Leverage, don’t reinvent. LWS reuses established Web building blocks—URI addressing, HTTP transfer semantics, RDF vocabularies—rather than introducing a parallel stack. Experience gained with Solid Protocol, WebDAV, ActivityPub, and modern object-storage APIs informed the design, but the specification remains deliberately minimal and composable, not monolithic.
  • Layered extensibility. Capabilities such as real-time notifications, delegated authorization, or content-profile negotiation are specified as optional layers (see § 11 Unstable Features). The core stays small and future-proof.
  • Security & privacy by default. The protocol assumes untrusted networks; authentication and authorization are required for any non-public resource, and all normative requirements are transport-agnostic but compatible with TLS-based deployments.
  • Interoperability over optimisation. Where trade-offs arise, the Working Group prioritises a uniform client/server contract over provider-specific performance hints.

2.2 Goals and non-goals

Goals Non-goals
Interoperability across vendors and platforms Mandating a single identity system or token format
User-centred data portability Defining a storage engine, database schema, or query language
End-to-end security and privacy controls Specifying user-interface behaviour
Extensible feature set for advanced use cases Baking experimental features into the core

2.3 Conformance overview

The specification defines two conformance classes:

  • LWS REST Server – an HTTP origin that satisfies every normative requirement labelled “server”.
  • LWS REST Client – an HTTP client that satisfies every normative requirement labelled “client”.

Unless a requirement states otherwise, it applies to both classes.

2.4 Document roadmap

Section Content
§ 3 Terminology
§ 4–6 Discovery, authentication, and authorization flows
§ 7 Canonical create/read/update/delete operations and generic responses
§ 8–10 Logical organisation, REST binding, and resource identification rules
§ 11 Features under incubation (profile negotiation, notifications, inbox)
§ 12–14 Portability, security, and privacy considerations

Readers implementing a client may start with § 7, referring back to § 4–6 for security prerequisites. Storage providers should pay particular attention to the conformance clauses in § 2.3 and the normative statements scattered through § 4–10.

2.5 Illustrative exchange (non-normative)

GET /photos/2025/06/puppy.jpg HTTP/1.1
Host: storage.example
Accept: image/jpeg

HTTP/1.1 200 OK
Content-Type: image/jpeg
Last-Modified: Fri, 06 Jun 2025 13:37:42 GMT

The pattern is identical for create, update, and delete operations, which are detailed in § 7.


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment