JavaScript Solid Server
[npm version]
A minimal, fast, JSON-LD native Solid server for the agentic web.
Architecture
[JSS Architecture Diagram]
Features
- LDP CRUD GET, PUT, POST, DELETE, HEAD, PATCH (N3 + SPARQL Update)
- JSON-LD Native Stores and serves JSON-LD by default, Turtle via
--conneg
- Web Access Control
.acl file-based authorization
- Solid-OIDC Built-in Identity Provider with DPoP, passkeys, Schnorr SSO
- Programmatic Auth
POST /idp/credentials issues tokens from email/password; agents and headless clients authenticate with no browser flow
- WebSocket Notifications Real-time updates (solid-0.1 protocol)
- Content Negotiation Turtle JSON-LD conversion (optional)
- Multi-user Pods Path-based (
/alice/) or subdomain-based (alice.example.com)
- Single-User Mode Personal pod server with
--single-user
- Git HTTP Backend Clone and push to pod containers
- Nostr Relay Integrated NIP-01 relay (
wss://your.pod/relay)
- Nostr Auth NIP-98 signatures, did:nostr WebID resolution
- End-to-End Encryption Encrypt pod content client-side via NIP-44 / NIP-04 using
did:nostr keys (docs, zero server-side changes)
- LWS / CID v1 profile shape New pod profiles are structurally W3C Controlled Identifier documents, ready for LWS 1.0 auth (docs)
- ActivityPub Fediverse federation with Mastodon-compatible API
- remoteStorage draft-dejong-remotestorage-22 file sync
- MongoDB Storage Optional
/db/ route for JSON-LD at scale
- WebRTC Signaling Peer-to-peer connections via WebID-authenticated signaling
- Tunnel Proxy Decentralized ngrok through your pod
- Terminal WebSocket shell access via
--terminal
- Password CLI
jss passwd for user password management
- MCP Server Expose the pod as a tool surface for agents (Claude Desktop, Cursor, custom bots) via
--mcp (docs)
- HTTP 402 Payments Monetize endpoints with per-request sat payments
- Mashlib / SolidOS UI Optional data browser (CDN, local, or ES module)
- Storage Quotas Per-user limits with CLI management
- Invite-Only Mode Controlled registration via invite codes
- SSL/TLS, CORS, Range Requests, Conditional Requests
Quick Start
# Install
npm install -g javascript-solid-server
# Start
jss start
# With common options
jss start --port 8443 --idp --mashlib --conneg --git --nostr
Creating a Pod
curl -X POST http://localhost:4443/.pods \
-H "Content-Type: application/json" \
-d '{"name": "alice"}'
Using the Pod
# Read
curl http://localhost:4443/alice/public/
# Write
curl -X PUT http://localhost:4443/alice/public/data.json \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/ld+json" \
-d '{"@id": "#data", "http://example.org/value": 42}'
Android/Termux
pkg install nodejs git
npm install -g javascript-solid-server
jss start --port 8080 --nostr --git
CLI Reference
jss start [options] # Start the server
jss init [options] # Initialize configuration
jss invite <cmd> # Manage invite codes
jss quota <cmd> # Manage storage quotas
jss passwd <username> # Manage user passwords
Key options: --port, --idp, --conneg, --mashlib, --git, --nostr, --mcp, --activitypub, --webrtc, --tunnel, --terminal, --mongo, --pay, --public, --single-user
Full options: docs/configuration.md
Documentation
Comparison
| Server |
Package |
Packages |
node_modules |
| JSS |
~1 MB |
~191 |
~77 MB |
| CSS |
~6 MB |
~311 |
~152 MB |
| Pivot |
~6 MB |
~311+ |
~152 MB |
| NSS |
~7 MB |
~670 |
~539 MB |
| Operation |
Requests/sec |
Avg Latency |
p99 Latency |
| GET resource |
5,400+ |
1.2ms |
3ms |
| GET container |
4,700+ |
1.6ms |
3ms |
| PUT (write) |
5,700+ |
1.1ms |
2ms |
| POST (create) |
5,200+ |
1.3ms |
3ms |
| OPTIONS |
10,000+ |
0.4ms |
1ms |
Running Tests
Maintainers
JSS is maintained by @melvincarvalho and @jjohare. See MAINTAINERS.md.
License
Licensed under AGPL-3.0.
Commercial licensing also available see LICENSING.md.