Skip to content
Merged
Show file tree
Hide file tree
Changes from 29 commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
954085c
Add introduction section
jeremycaine May 15, 2026
31b52dd
Add scope diagrams section with C4 Level 1 and Level 2 diagrams
jeremycaine May 15, 2026
0a39c38
Update lws10-core/index.html
jeremycaine Jun 11, 2026
cf9be25
Update lws10-core/index.html
jeremycaine Jun 11, 2026
4ada3f2
Update lws10-core/index.html
jeremycaine Jun 11, 2026
8f7c768
Update lws10-core/index.html
jeremycaine Jun 11, 2026
25cdda7
Update lws10-core/index.html
jeremycaine Jun 11, 2026
1e1ea84
Update lws10-core/index.html
jeremycaine Jun 27, 2026
685d6fb
Update lws10-core/index.html
jeremycaine Jun 29, 2026
aba265c
Update lws10-core/diagrams/fig-2-container-diagram.md
jeremycaine Jun 29, 2026
99e8716
Restore missing content in lws10-core/index.html
jeremycaine Jun 30, 2026
abca902
Merge branch 'scope-diagrams' of https://github.com/jeremycaine/lws-p…
jeremycaine Jun 30, 2026
810e52e
Restore missing content
jeremycaine Jun 30, 2026
3187ac4
Merge branch 'introduction-section' of https://github.com/jeremycaine…
jeremycaine Jun 30, 2026
29ece08
edits in response to comments
jeremycaine Jul 6, 2026
624685f
corrected identtity server scope
jeremycaine Jul 7, 2026
66c4303
reworked diagrams using LikeC4 and markdown descriptions of each
jeremycaine Jul 10, 2026
457cfc8
updated core index.html to show diagrams
jeremycaine Jul 10, 2026
7fe9a79
updated core index.html with table text of diagram elements
jeremycaine Jul 10, 2026
ccafd9d
Merge branch 'main' into introduction-section
jeremycaine Jul 13, 2026
c6295b9
Merge branch 'introduction-section' of https://github.com/jeremycaine…
jeremycaine Jul 14, 2026
da07c8f
updated diagrams for agent
jeremycaine Jul 14, 2026
419ceeb
Update lws10-core/diagrams/figures.md
jeremycaine Jul 20, 2026
a99f7df
Update lws10-core/diagrams/figures.md
jeremycaine Jul 20, 2026
93eda0c
updated model and diagrams after working session 23 Jul 2026. Include…
jeremycaine Jul 23, 2026
d8822e8
Remove figures.md
jeremycaine Jul 23, 2026
c6b937a
Merge branch 'main' into scope-diagrams
jeremycaine Jul 23, 2026
803567b
Diagrams ready for PR merge. Reduced to simplest set of elements to p…
jeremycaine Jul 23, 2026
04fa8e8
Merge branch 'scope-diagrams' of https://github.com/jeremycaine/lws-p…
jeremycaine Jul 23, 2026
73775ee
Update lws10-core/diagrams/lws10-core.c4
jeremycaine Jul 27, 2026
4df6eb0
Update lws10-core/index.html
jeremycaine Jul 27, 2026
ce51913
Update lws10-core/diagrams/lws10-core.c4
jeremycaine Jul 27, 2026
f8a88a6
Update lws10-core/diagrams/lws10-core.c4
jeremycaine Jul 27, 2026
88b9eb2
Merge branch 'main' into scope-diagrams
jeremycaine Jul 27, 2026
e917c16
diagram discussion iteration result in one diagram
jeremycaine Jul 27, 2026
d095282
Merge branch 'main' into scope-diagrams
jeremycaine Jul 27, 2026
c535c31
new svg diagrams
jeremycaine Jul 27, 2026
683b542
Merge branch 'main' into scope-diagrams
acoburn Jul 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added lws10-core/diagrams/fig-container-diagram.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added lws10-core/diagrams/fig-resource-server.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added lws10-core/diagrams/fig-storage.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added lws10-core/diagrams/fig-system-context.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added lws10-core/diagrams/index.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
122 changes: 122 additions & 0 deletions lws10-core/diagrams/lws10-core.c4
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
specification {
element actor {
style {
shape person
color amber
}
}
element system {
style {
color blue
opacity 30%
}
}
element externalSystem {
style {
color secondary
opacity 30%
}
}
element component

element resource {
style {
shape document
color indigo
}
}

relationship isA {
color gray
line dashed
head none
}
relationship contains {
color gray
head diamond
}
relationship boundTo {
color gray
line dotted
head none
}
relationship describes {
color gray
line dotted
}
relationship manages

tag optional
}

model {
agent = actor 'Agent' {
description 'An agent of the LWS system'
}

//lws = system 'LWS System' {
//description 'A system that implements the LWS Protocol'
component lws-client 'LWS Client' {
description 'An HTTP client that complies with the LWS Protocol'
}
component controlled-identifier 'Controlled Identifier' {
description 'An identifier that is controlled by an agent and used to identify the agent to the LWS system'
}
component identity-provider 'Identity Provider' {
description 'Confirms user identity and issues signed credentials. MAY be an external system'
}
component lws-server 'LWS Server' {
description 'An HTTP server that complies with the LWS Protocol'

component authorization-server "Authorization Server" {
description 'An OAuth 2.0 authorization server that issues access tokens. MAY be an external system'
}
component resource-server 'Resource Server' {
description 'Manages data resources, containers, containment and linksets'
}
component storage 'Storage' {
description 'A set of hierarchically organized HTTP resources managed per LWS conventions'
style {
multiple true
}
}
Comment thread
jeremycaine marked this conversation as resolved.
Outdated

}

agent -> lws-client 'agent requests'
controlled-identifier -> agent 'identifies'
lws-client -> lws-server 'HTTP requests'
lws-client -> identity-provider 'authenticates'
lws-client -> authorization-server 'requests access token'
lws-client -> resource-server 'sends request'
authorization-server -> controlled-identifier 'verifies identity provider'
authorization-server -> identity-provider 'validates credentials'
}
//}

views {

view fig-system-context {
title 'System Context Diagram'
include *
}

view fig-container-diagram of lws-server {
title 'Container Diagram'
autoLayout TopBottom
include *, identity-provider, agent
exclude storage
}

Comment thread
jeremycaine marked this conversation as resolved.
Outdated
view fig-resource-server of resource-server {
title 'Resource Server Component Diagram'
autoLayout TopBottom
include *
}

view fig-storage of storage {
title 'LWS Resource Type Hierarchy'
autoLayout LeftRight
include *
}
Comment thread
jeremycaine marked this conversation as resolved.
Outdated
}
65 changes: 61 additions & 4 deletions lws10-core/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,29 @@ <h2>Document Conventions</h2>
<section id="introduction">
<h2>Introduction</h2>
<p>
This specification defines the Linked Web Storage (LWS) Protocol, which enables client applications to access and manage web resources stored externally, based on the identity and permissions of the user.
</p>
<p>
By standardising how an LWS server manages and provides access to a hierarchy of linked resources, the protocol enables users to use different LWS client applications to interact with the same stored data. These linked resources are defined through containers and containment relationships that describe where things are located, and metadata that describes how the resources relate to each other.
</p>
<p>
The protocol defines standard operations on these resources to create, read, update, and delete. Resources, their containment, and their metadata are managed by the server as a set of JSON-LD documents (and other representations). Each resource is identified by a URI. A client navigates the resource hierarchy from a root container, discovering contained resources and their relations through links provided in server responses.
</p>
<p>
A user's identity is confirmed through an identity provider that can be external to the Linked Web Storage server. This separation means the server does not manage credentials directly; rather, it receives and validates a signed authentication credential as a token issued by a trusted identity provider. A user can therefore present their existing identity to any compliant server, without needing a new or existing separate account on that server. User authentication is defined in companion specifications for OpenID Connect, SAML 2.0, and self-signed controlled identifiers (CIDs).
</p>
<p>
Authorization determines whether a requesting user has permission to access a resource or perform an operation on it. A compliant LWS server designates a resource manager for each resource that determines whether a resource is private (i.e., available only to its owner), restricted (i.e., available to a defined set of users), or public (i.e., available to any user). The server enforces the access decisions of the resource manager when handling each client request.
</p>
<p>This specification is intended to be used by:</p>
<ul>
<li>Developers building client applications that access a user's LWS resources</li>
<li>Server implementers building compliant LWS servers that mediate access to a user's web resources</li>
</ul>
<p>
Different compliant servers each maintain their own hierarchy of linked resources. A user can navigate across servers using the same identity, with access to each server's resources determined by the permissions granted by that servers resource managers.
</p>


<section id="resource-access">
<h2>Resource Access</h2>
Expand Down Expand Up @@ -155,11 +177,46 @@ <h2>Security and Privacy</h2>
</p>

<p>
A <dfn>LWS Client</dfn> is an HTTP client [[!rfc9112]] that complies with all of the relevant "MUST" statements in this specification. Specifically, the relevant normative "MUST" statements in <a href="#operations"></a> of this document MUST be respected.
An <dfn>LWS Client</dfn> is an HTTP client [[!rfc9112]] that complies with all of the relevant "MUST" statements in this specification. Specifically, the relevant normative "MUST" statements in <a href="#operations"></a> of this document MUST be respected.
</p>
</section>
</section>

<section id="scope-diagrams"> <!-- becomes 2.4 Scope Diagrams -->
<h2>Scope Diagrams</h2>
<p>
The following diagrams are platform-independent models
to guide implementation.
</p>
<p>
Figure: System Context shows the LWS System and its major pieces.
</p>
<figure id="fig-system-context">
<img src="diagrams/fig-system-context.png"
alt="Figure: System Context shows the LWS System and its major pieces"/>
<figcaption>System Context (C4 Level 1)</figcaption>
</figure>

<p>
Figure: Container Diagram breaks out the LWS Server.
</p>
<figure id="fig-container-diagram">
<img src="diagrams/fig-container-diagram.png"
alt="Figure Container Diagram breaks out the LWS Server"/>
<figcaption>Container diagram (C4 Level 2)</figcaption>
</figure>

<p>
Comment thread
jeremycaine marked this conversation as resolved.
Outdated
Figure: Resource Server (currently Storage Server in the spec)
</p>
<figure id="fig-resource-server">
<img src="diagrams/fig-resource-server.png"
alt="Figure Relationship of Resource Server to Storage"/>
<figcaption>Resource Server</figcaption>
</figure>

</section>

</section>
<section id="terminology">
<h2>Terminology</h2>
<p>
Expand Down Expand Up @@ -203,7 +260,7 @@ <h2>Terminology</h2>

<div class="issue atrisk" title="Section may be removed">
<p>
This specification defines <a>operations</a> on <a>served resources</a>, the resulting change of state, and a <a>response</a> intended to give the <a>requesting agent</a> requested infomation or inform them of the outcome of the <a>operation</a>.
This specification defines <a>operations</a> on <a>served resources</a>, the resulting change of state, and a <a>response</a> intended to give the <a>requesting agent</a> requested information or inform them of the outcome of the <a>operation</a>.
An <dfn>operation</dfn> is any of the following actions that can be performed on a <a>served resource</a>:
</p>
<ul>
Expand All @@ -214,7 +271,7 @@ <h2>Terminology</h2>
</ul>

<p>
The folowing section will describe the semantics and <dfn>responses</dfn> of these operations but the following <dfn>core responses</dfn> apply to any operation:
The following section will describe the semantics and <dfn>responses</dfn> of these operations but the following <dfn>core responses</dfn> apply to any operation:
</p>
<ul>
<li><dfn>success</dfn> - the operation is believed to have completed. This may be accompanied by a <dfn>resource representation</dfn> conveying the contents of a <a>served resource</a>. A <a>success</a> response is not defined for the <a>create resource</a> operation. See instead <a href="#dfn-created">created</a>.</li>
Expand Down
Loading