Skip to main content

Libraries Overview

SolidOS is built from several interconnected libraries.

Core Libraries

SolidOS Library Stack

Library Comparison

LibraryPurposeUse When
rdflibRDF operationsYou need raw RDF manipulation
solid-logicAuth, ACL, storeYou need Solid business logic
solid-uiUI componentsYou're building a Solid UI
solid-panesPane collectionYou want to add/modify panes
mashlibEverything bundledYou want the full data browser

Dependency Graph

mashlib
├── solid-panes
│ ├── solid-ui
│ │ ├── solid-logic
│ │ │ └── rdflib
│ │ └── rdflib
│ └── solid-logic
└── solid-logic
└── rdflib

Quick Reference

rdflib.js

import { graph, Fetcher, sym, lit } from 'rdflib'

const store = graph()
const fetcher = new Fetcher(store)

// Fetch data
await fetcher.load('https://alice.example/profile/card')

// Query
const name = store.any(sym('...#me'), foaf('name'), null)

// Update
store.add(subject, predicate, object, document)

solid-logic

import { store, authn, solidLogicSingleton } from 'solid-logic'

// The shared store
await store.fetcher.load(uri)

// Authentication
const webId = authn.currentUser()
await authn.login()
await authn.logout()

// ACL
const canWrite = await solidLogicSingleton.checkAccess(uri, 'write')

solid-ui

import * as UI from 'solid-ui'

// Widgets
const btn = UI.widgets.button(dom, 'Click', callback)
const field = UI.widgets.textField(dom, options)
const table = UI.widgets.table(dom, subjects, columns)

// Forms
const form = UI.forms.buildForm(dom, store, subject, formSpec)

// Styles
UI.style.styleElement(element, 'button')

solid-panes

import { paneRegistry } from 'solid-panes'

// Register a pane
paneRegistry.register(myPane)

// Get pane by name
const pane = paneRegistry.byName('contacts')

// Find pane for a subject
const pane = paneRegistry.bySubject(subject)

mashlib

<script src="mashlib.min.js"></script>
<script>
// Global entry point
panes.runDataBrowser(document)

// Access internals
panes.UI // solid-ui
panes.store // rdflib store
panes.authn // authentication
</script>

Installation

npm

# Individual packages
npm install rdflib
npm install solid-logic
npm install solid-ui
npm install solid-panes
npm install mashlib

# Or clone the monorepo
git clone https://github.com/SolidOS/solidos
npm run setup

CDN

<!-- Full bundle -->
<script src="https://cdn.jsdelivr.net/npm/mashlib/dist/mashlib.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/mashlib/dist/mash.css" rel="stylesheet">

<!-- Individual -->
<script src="https://cdn.jsdelivr.net/npm/rdflib/dist/rdflib.min.js"></script>

TypeScript Support

All libraries include TypeScript definitions:

import type { NamedNode, IndexedFormula } from 'rdflib'
import type { PaneDefinition } from 'pane-registry'

See Also