| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
A minimal, fast, JSON-LD native Solid server for the agentic web.
# Install
npm install -g javascript-solid-server
# Start
jss start
# With common options
jss start --port 8443 --idp --mashlib --conneg --git --nostrcurl -X POST http://localhost:4443/.pods \
-H "Content-Type: application/json" \
-d '{"name": "alice"}'# 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}'pkg install nodejs git
npm install -g javascript-solid-server
jss start --port 8080 --nostr --gitThese steps install Podman and the helper tools used to run JSS in a Podman pod (with a Makefile, a jss.yaml pod spec and helper scripts, all in the podman/ folder). Podman isolates the JSS from your host system and Podman Pods can be orchestrated with Kubernetes.
You need Podman, make, and curl, jq and openssl for the helper scripts. Then run everything from the podman/ folder of this repo (see Running). Only Ubuntu has been tested here; the macOS and Windows steps follow Podman's standard setup and are untested.
sudo apt install -y podman make curl jq opensslLinux Mint 21 and 22 are based on Ubuntu, so it's the same:
sudo apt install -y podman make curl jq opensslMint 22 (Ubuntu 24.04 base) ships Podman 4.9, which has everything used here (podman kube play --replace --publish, podman kube down). Mint 21 (Ubuntu 22.04 base) ships Podman 3.4, which is too old; upgrade to Mint 22 or install a newer Podman from the Podman install page.
Rootless Podman needs your user in /etc/subuid and /etc/subgid; normal Mint accounts already are. Check with:
grep "^$USER:" /etc/subuid /etc/subgidPodman runs containers in a small Linux VM on macOS. With Homebrew:
xcode-select --installbrew install podman jqpodman machine init && podman machine startxcode-select --install provides make (curl and openssl are built in). Published ports such as 127.0.0.1:4443 are forwarded from the VM to your Mac, so http://localhost:4443/ works as on Linux. Keep your Podman setup under your home folder, which the VM can see. The jss-data and jss-secrets volumes live inside the VM, so on-disk volume paths are Linux-only. After a reboot, run podman machine start before make up. Podman Desktop is a graphical alternative to the brew install. For HTTPS, brew install caddy.
The simplest route is WSL 2 with Ubuntu, then the Ubuntu steps inside it. In PowerShell as administrator:
wsl --install -d UbuntuRestart if asked, open the Ubuntu app, and run:
sudo apt update && sudo apt install -y podman make curl jq opensslKeep your Podman setup inside the Ubuntu home folder (for example ~/git/), not under /mnt/c/, and run the make commands from there. WSL forwards localhost, so http://localhost:4443/ opens from your Windows browser.
Alternatively, install Podman for Windows (it also runs on WSL 2) with winget install -e --id RedHat.Podman or Podman Desktop, then podman machine init and podman machine start (again after each reboot). From PowerShell you can then use the commands in Running without make, but the Makefile and the create-pod/grant-webid scripts need bash (WSL or Git Bash). For HTTPS, winget install -e --id CaddyServer.Caddy, or install Caddy inside WSL.
Run make and the podman commands below from the podman/ folder of this repo, which contains jss.yaml and the Makefile. They use relative paths such as jss/, profiles/ and jss.yaml, so they fail from anywhere else.
| Path (under podman/) | Purpose |
|---|---|
| jss/Containerfile | Image: Node 22 + javascript-solid-server (pinned via JSS_VERSION) |
| jss.yaml | Kubernetes v1 Pod run with podman kube play (volumes jss-data, jss-secrets) |
| profiles/local.yaml | ConfigMap for http://localhost:4443/ |
| profiles/lan.yaml | ConfigMap for LAN access (0.0.0.0:4443) |
| profiles/internet.yaml | ConfigMap for a public HTTPS domain behind Caddy, invite-only |
| profiles/*.local.yaml | Your machine-specific copies of the profiles (gitignored, used automatically) |
| proxy/Caddyfile | Host-side Caddy reverse proxy (internet site, LAN tls internal example) |
| scripts/create-pod.sh | Create a pod with a generated password, saving the login outside the repo |
| scripts/grant-webid.sh | Grant a WebID access to a container, keeping existing ACL rules |
| Makefile | Build / run / inspect / reset commands |
| Command | What it does |
|---|---|
| make up | Build the image and start the pod (PROFILE=local by default) |
| make up PROFILE=lan | Same, with the lan profile, published on 0.0.0.0:4443 |
| make up PROFILE=internet | Same, with the internet profile, on 127.0.0.1:4443 behind Caddy |
| make down | Stop and remove the pod (volumes are kept) |
| make restart | down then up |
| make logs | Follow server logs |
| make status | Show pod, container, and volume state |
| make shell | Shell inside the server container (e.g. for jss invite create) |
| make rebuild | Rebuild the image without cache, then restart |
| make reset | Stop the pod and, after confirmation, delete all data and secrets |
| make caddy-validate | Check proxy/Caddyfile in a throwaway Caddy container |
| make create-pod NAME=… | Create a pod (account) and save its login to ~/.config/jss-dev/<name>-account.txt |
| make grant-webid POD=… CONTAINER=… WEBID=… | Give a WebID Read/Write/Control on a container |
Pass the same PROFILE= to restart and rebuild that you used for up.
Without make, the equivalents are podman kube play --replace --configmap profiles/local.yaml --publish 127.0.0.1:4443:4443 jss.yaml to start and podman kube down jss.yaml to stop. Build the image first with podman build -t localhost/jss:latest jss (make up does this for you). For another profile, use profiles/<name>.yaml (or your profiles/<name>.local.yaml) and its bind: --publish 0.0.0.0:4443:4443 for lan, --publish 127.0.0.1:4443:4443 for local and internet.
With make:
make statusThe jss pod should show Running and jss-server should show Up, with 127.0.0.1:4443->4443/tcp (or 0.0.0.0:4443 on the lan profile). Exited or no pod at all means it's stopped. make logs follows the server log.
Without make:
podman pod pspodman ps --all --filter name=jss-serverLook for Running (pod) and Up … (container); Exited means it stopped. Follow the log with:
podman logs -f jss-serverEither way, check that it answers HTTP:
curl -s -o /dev/null -w '%{http_code}\n' http://localhost:4443/200 means it's up; 000 means nothing is listening on port 4443. You can also open http://localhost:4443/ in a browser.
The pod doesn't start again by itself after a reboot (rootless Podman doesn't start pods at boot unless you set that up), so after restarting the machine, run make up again. Your data is kept in the jss-data and jss-secrets volumes.
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 passwordsKey options: --port, --idp, --conneg, --mashlib, --git, --nostr, --mcp, --activitypub, --webrtc, --tunnel, --terminal, --mongo, --pay, --public, --single-user
Full options: docs/configuration.md
| Topic | Link |
|---|---|
| Configuration & Options | docs/configuration.md |
| Authentication | docs/authentication.md |
| Mashlib / SolidOS UI | docs/mashlib.md |
| WebSocket Notifications | docs/notifications.md |
| Git Support | docs/git-support.md |
| Installing Apps | docs/app-install.md |
| MCP (pod as agent tool surface) | docs/mcp.md |
| Nostr Relay | docs/nostr.md |
| ActivityPub & Mastodon API | docs/activitypub.md |
| remoteStorage | docs/remotestorage.md |
| WebRTC & Tunnel | docs/webrtc.md |
| Terminal & Password CLI | docs/terminal.md |
| MongoDB /db/ Route | docs/mongodb.md |
| HTTP 402 Payments | docs/payments.md |
| Storage Quotas | docs/quotas.md |
| Invite-Only Registration | docs/invites.md |
| Security & Subdomain Mode | docs/security.md |
| Architecture & Structure | docs/architecture.md |
| 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 |
npm testJSS is maintained by @melvincarvalho and @jjohare. See MAINTAINERS.md.
Licensed under AGPL-3.0. Commercial licensing also available — see LICENSING.md.
| Back | FazBrowse Home | New Git URL |