Data Flow
Understanding how data flows through the SolidOS architecture.
Overview
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ User │────▶│ SolidOS │────▶│ Solid Pod │
│ Action │ │ (Client) │ │ (Server) │
└─────────────┘ └─────────────┘ └─────────────┘
│
┌──────┴──────┐
▼ ▼
┌─────────┐ ┌─────────┐
│ Store │ │ Panes │
│(rdflib) │ │ (UI) │
└─────────┘ └─────────┘
Fetch Cycle
- User navigates to a URI
- Fetcher requests the resource from the Pod
- Parser converts response to RDF triples
- Store holds the data in memory
- Panes render the data as UI
// 1. Navigate
const uri = 'https://alice.example/profile/card#me'
// 2-4. Fetch and parse into store
await store.fetcher.load(sym(uri))
// 5. Query and render
const name = store.any(sym(uri), FOAF('name'))
Update Cycle
- User edits data in a pane
- Pane creates update statements
- Updater sends PATCH to Pod
- Store updates local cache
- UI refreshes
// 1-2. User changes name
const deletions = [st(me, FOAF('name'), oldName, doc)]
const insertions = [st(me, FOAF('name'), newName, doc)]
// 3-4. Send update
await store.updater.update(deletions, insertions)
// 5. UI automatically updates
Subscription Flow
For real-time updates:
// Subscribe to changes
store.updater.addDownstreamChangeListener(doc, (changes) => {
// Re-render when data changes
refreshUI()
})