Solid Lite

A minimal, composable protocol for the decentralized web

Implement a working server in 10 minutes →

Version 0.0.2 draft

Modular by Design

Solid Lite is a collection of SLIPs (Solid Lite Implementation Proposals) — small, focused specs you can combine. Different combinations create different profiles:

Minimal
4 SLIPs → 10 min
LWS
W3C target
ActivityPub
Fediverse
JSS
All SLIPs
Nostr-Native
Passwordless

Linked Web Storage (W3C Working Group, targeting REC in 2026) is one combination of SLIPs. Pick the SLIPs you need for your use case.

Composable Building Blocks

Pick the SLIPs you need. Each is a small, focused feature. Mix and match.

Core Foundation (10-minute server)

SLIP-10

HTTP Methods

GET, HEAD, OPTIONS, PUT, DELETE on resources.

SLIP-11

CORS Headers

Cross-origin access for browser apps.

SLIP-12

JSON-LD

Linked data format. application/ld+json.

SLIP-13

URI Resources

Every resource has a stable URI.

Authentication

SLIP-80

Null Auth

Testing only. No authentication.

SLIP-81

Bearer Token

API key for single-user servers.

SLIP-82

Schnorr/NIP-98

Nostr signatures. No passwords.

SLIP-83

Solid-OIDC

OpenID Connect with DPoP tokens.

Identity

SLIP-20

WebID Profile

URI-based identity with RDF profile.

SLIP-21

did:nostr

Identity from Nostr pubkey. No registration.

SLIP-22

Identity Linking

Link WebID ↔ did:nostr via owl:sameAs.

Authorization

SLIP-90

Owner Write

Everyone reads, owner writes. Simple default.

SLIP-91

WAC

Web Access Control. Fine-grained ACLs.

SLIP-92

ACP

Access Control Policy. Policy-based.

Data & Formats

SLIP-30

Turtle

text/turtle RDF format support.

SLIP-31

Content Negotiation

Serve format based on Accept header.

SLIP-32

Data Islands

Embed RDF in HTML. Offline support.

SLIP-33

PATCH

N3 Patch and SPARQL Update.

Federation

SLIP-50

ActivityPub

Inbox/Outbox federation with Fediverse.

SLIP-51

WebFinger

User discovery via /.well-known/webfinger.

SLIP-52

HTTP Signatures

Server-to-server authentication.

SLIP-53

Nostr Relays

Event publishing to Nostr network.

Features

SLIP-40

Containers

LDP containers with listings.

SLIP-41

Pods

User storage provisioning.

SLIP-42

WebSockets

Real-time update notifications.

SLIP-43

Type Index

Discover resources by type.

SLIP-44

Mashlib/SolidOS

Data browser integration.

Recipes: Combine SLIPs

Minimal Server

SLIP-10 + SLIP-11 + SLIP-12 + SLIP-80

10 minutes to implement

Single-User

Minimal + SLIP-81 + SLIP-90

Personal data store

LWS Profile

Core + SLIP-20 + SLIP-83 + SLIP-91 + SLIP-40

W3C target

ActivityPub

Minimal + SLIP-50 + SLIP-51 + SLIP-52

Fediverse

Full JSS

All SLIPs combined

Complete Solid server

Nostr-Native

Minimal + SLIP-21 + SLIP-82 + SLIP-91

Passwordless, no registration

1. Introduction

Solid Lite is a minimal protocol for building decentralized web applications based on Social Linked Data principles. It prioritizes simplicity and composability—start with a basic server you can build in 10 minutes, then add features via SLIPs as needed.

Quick Start

A minimal Solid Lite server needs:

That's it. Add authentication, authorization, and other features via SLIPs.

2. HTTP Protocol

2.1 Server Requirements

2.2 Client Requirements

3. Resources

3.1 URIs

Resources are identified by URIs conforming to RFC3987. URIs provide consistent identification across the Solid Lite ecosystem.

3.2 CRUD Operations

OperationMethodSuccessNot Found
CreatePUT201 Created-
ReadGET, HEAD200 OK404
UpdatePUT200 / 204404
DeleteDELETE200 / 204404

Servers MUST support GET, HEAD, OPTIONS, PUT, and DELETE methods.

4. CORS

Servers MUST include CORS headers to allow browser-based applications to access resources across origins:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, HEAD, OPTIONS, PUT, DELETE, POST
Access-Control-Allow-Headers: Content-Type, Authorization

5. Identity

Identity in Solid Lite can be established via:

The profile SHOULD live at the root of storage for human-friendly URLs. See did:nostr spec for details.

6. Authentication

Authentication verifies identity. Solid Lite defines a layered approach—choose the level appropriate for your use case:

6.1 Null Auth (SLIP-80)

Testing only. Everyone can read and write. MUST NOT be used in production.

6.2 Bearer Auth (SLIP-81)

Single-user mode. A shared API key sent via header:

Authorization: Bearer <SOLID_API_KEY>

Server returns 401 if key is missing or invalid.

6.3 Schnorr Auth (SLIP-82)

Multi-user mode. Uses NIP-98 HTTP authentication with Schnorr signatures:

Authorization: Nostr <base64-encoded-signed-event>

The signed event (kind 27235) contains the URL and HTTP method, verified against the user's Nostr public key. No certificates or passwords required.

7. Authorization

The default authorization policy (SLIP-90):

Access denial returns:

8. Data Format

Resources use JSON-LD 1.1 for structured, linked data. Example profile:

{
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/webid"
  ],
  "@id": "#me",
  "type": "Person",
  "name": "Alyssa P. Hacker",
  "preferredUsername": "alyssa",
  "summary": "Lisp enthusiast",
  "storage": "/",
  "nostr": "did:nostr:abcd0123..."
}

9. Extending Solid Lite

Solid Lite is extended via SLIPs (Solid Lite Implementation Proposals). Each SLIP adds a composable feature:

Combine SLIPs to build the server you need—from a minimal 10-minute implementation to a full-featured system like JSS.

Related Projects

The Solid Lite ecosystem