Skip to main content

Frequently Asked Questions

Common questions about SolidOS development.

General​

What is SolidOS?​

SolidOS (formerly known as "the data browser" or "mashlib") is a modular operating system for the web that lets you browse, view, and edit Solid pod data. It's built on a pane system where each pane is responsible for rendering specific types of RDF data.

What's the relationship between SolidOS, mashlib, and solid-panes?​

  • mashlib — The bundled distribution that includes everything
  • solid-panes — The pane registry and built-in panes
  • solid-ui — Reusable UI components
  • solid-logic — Business logic (auth, ACL, utilities)
  • rdflib.js — The RDF foundation

mashlib bundles all of these together into a single deployable package.

Is SolidOS the same as a Solid server?​

No. SolidOS is a client-side application that connects to Solid servers. Solid servers (like CSS or NSS) store and serve the data. SolidOS provides the UI to browse and edit that data.

Can I use SolidOS with any Solid server?​

Yes. SolidOS works with any Solid-compliant server:

  • Community Solid Server (CSS)
  • Node Solid Server (NSS)
  • Enterprise Solid Server (ESS)
  • Any other Solid Protocol implementation

Development​

How do I create a custom pane?​

  1. Create a pane object with name, label, and render properties
  2. Register it with paneRegistry.register(myPane)
  3. The pane will be considered when rendering resources

See Creating Panes for a complete guide.

Do I need to use TypeScript?​

No, but it's recommended. All SolidOS libraries include TypeScript definitions, which provide better IDE support and catch errors early. You can use plain JavaScript if you prefer.

Can I use React/Vue/Angular with SolidOS?​

SolidOS panes use vanilla DOM manipulation, but you can:

  1. Embed SolidOS in a framework app — Load mashlib and render into a container
  2. Use rdflib.js directly — Build your own UI with any framework
  3. Create hybrid panes — Render framework components inside pane containers
// Example: React component using rdflib
function Profile({ webId }) {
const [name, setName] = useState(null)

useEffect(() => {
async function load() {
await store.fetcher.load(sym(webId).doc())
setName(store.any(sym(webId), FOAF('name'))?.value)
}
load()
}, [webId])

return <h1>{name}</h1>
}

How do I style my pane?​

Options:

  1. Inline styles in JavaScript
  2. Create a <style> element in your render function
  3. Use solid-ui's UI.style.styleElement()
  4. Add a CSS file and include it in the build

How do I test my pane?​

import { graph } from 'rdflib'
import myPane from './myPane'

test('pane claims correct type', () => {
const store = graph()
// Add test data to store
const label = myPane.label(subject, { store })
expect(label).toBe('Expected Label')
})

Data & RDF​

What RDF format should I use?​

  • Turtle (.ttl) — Most human-readable, recommended for most use cases
  • JSON-LD (.jsonld) — Good for JavaScript integration
  • N-Triples — Simplest format, good for streaming
  • RDF/XML — Legacy, avoid unless required

How do I choose predicates?​

  1. Use existing vocabularies when possible (FOAF, vCard, Schema.org)
  2. Check Linked Open Vocabularies
  3. Create custom predicates under your domain if needed:
    @prefix myapp: <https://myapp.example/vocab#> .

What's the difference between sym() and lit()?​

  • sym(uri) — Creates a NamedNode (a URI reference)
  • lit(value) — Creates a Literal (a string value)
  • lit(value, 'en') — Literal with language tag
  • lit(value, null, datatype) — Literal with datatype
sym('https://alice.example/#me')  // URI
lit('Alice') // String
lit('30', null, XSD('integer')) // Typed literal

How do I handle blank nodes?​

Blank nodes are anonymous resources:

import { blankNode, st } from 'rdflib'

const address = blankNode()
store.add(person, VCARD('hasAddress'), address, doc)
store.add(address, VCARD('locality'), lit('Paris'), doc)

Note: Blank node IDs are not stable across loads.

Authentication​

How does login work?​

SolidOS uses Solid-OIDC:

  1. User clicks login
  2. Browser redirects to identity provider
  3. User authenticates
  4. Redirected back with tokens
  5. Tokens stored in session

Can I use my own identity provider?​

Yes, any Solid-OIDC compliant identity provider works. Users can specify their provider URI.

How long do sessions last?​

Depends on the identity provider configuration. Typically 24 hours, but can be refreshed.

Deployment​

How do I deploy SolidOS?​

Options:

  1. Static hosting — Serve mashlib.js from any static host
  2. Embedded in Solid server — NSS/CSS can serve SolidOS
  3. Desktop app — Use Data Kitchen (Electron wrapper)

See Deployment for details.

What browsers are supported?​

Modern browsers with ES6 support:

  • Chrome/Edge 80+
  • Firefox 75+
  • Safari 13+

IE11 is not supported.

Can I use SolidOS offline?​

Limited. The core app works, but data access requires network connectivity to the Solid server.

Troubleshooting​

Why is my pane not showing?​

  1. Check it's registered: console.log(paneRegistry.byName('my-pane'))
  2. Verify the label function returns a string (not null)
  3. Check the resource has the expected RDF type

Why can't I save changes?​

  1. Check you're logged in: authn.currentUser()
  2. Verify write access: solidLogicSingleton.checkAccess(uri, 'Write')
  3. Check for CORS issues in browser console

Why is data not loading?​

  1. Check the URI is correct
  2. Verify network connectivity
  3. Check authentication status
  4. Look for CORS errors in console

Contributing​

How do I contribute to SolidOS?​

  1. Fork the solidos monorepo
  2. Create a feature branch
  3. Make your changes
  4. Submit a pull request

See Contributing for the full guide.

Where do I report bugs?​

SolidOS GitHub Issues

How do I get help?​

See Also​