René's URL Explorer Experiment


Title: Extract Minimal Viable LWS Server · Issue #89 · JavaScriptSolidServer/JavaScriptSolidServer · GitHub

Open Graph Title: Extract Minimal Viable LWS Server · Issue #89 · JavaScriptSolidServer/JavaScriptSolidServer

X Title: Extract Minimal Viable LWS Server · Issue #89 · JavaScriptSolidServer/JavaScriptSolidServer

Description: Summary Create a minimal, standalone LWS (Linked Web Storage) server extracted from JSS that implements only the core W3C LWS protocol without Solid-specific or extended features. Goal: Reference implementation and minimal server for LWS...

Open Graph Description: Summary Create a minimal, standalone LWS (Linked Web Storage) server extracted from JSS that implements only the core W3C LWS protocol without Solid-specific or extended features. Goal: Reference i...

X Description: Summary Create a minimal, standalone LWS (Linked Web Storage) server extracted from JSS that implements only the core W3C LWS protocol without Solid-specific or extended features. Goal: Reference i...

Opengraph URL: https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/issues/89

X: @github

direct link

Domain: github.com


Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Extract Minimal Viable LWS Server","articleBody":"## Summary\n\nCreate a minimal, standalone LWS (Linked Web Storage) server extracted from JSS that implements **only** the core W3C LWS protocol without Solid-specific or extended features.\n\n**Goal:** Reference implementation and minimal server for LWS protocol testing, embedding, and education.\n\n**Related:**\n- Issue #87 - LWS Protocol Mode (infrastructure foundation)\n- PR #88 - LWS Mode Implementation (draft)\n- [W3C LWS Protocol PR #37](https://github.com/w3c/lws-protocol/pull/37) - Initial CRUD spec\n- [W3C LWS Protocol Repository](https://github.com/w3c/lws-protocol)\n\n## Motivation\n\nJSS has grown to support many protocols and features:\n- Solid Protocol (LDP-based CRUD)\n- Solid-OIDC (DPoP, dynamic registration, RS256/ES256)\n- Passkey authentication (WebAuthn/FIDO2)\n- WebID-TLS client certificates\n- Nostr authentication (NIP-98)\n- ActivityPub federation\n- Nostr relay (NIP-01)\n- Git HTTP backend\n- Mashlib data browser\n- WebSocket notifications\n- Storage quotas\n- N3 Patch, SPARQL Update\n- Content negotiation (Turtle ↔ JSON-LD)\n\n**Problem:** This makes JSS heavy for users who just want simple Linked Data storage following LWS spec.\n\n**Solution:** Extract a minimal LWS server (~500-1000 LOC) that focuses solely on the core protocol.\n\n## Use Cases\n\n1. **Reference Implementation** - Demonstrate LWS spec compliance\n2. **Client Testing** - Lightweight server for testing LWS clients\n3. **Embedding** - Drop into other Node.js apps as a module\n4. **Education** - Learn LWS protocol without distractions\n5. **Microservices** - Lightweight storage layer for service architectures\n6. **Development** - Fast startup, minimal dependencies\n\n## Scope: What to Include\n\n### Core LWS Protocol (Minimal)\n\n- ✅ **GET** - Read resources and containers\n- ✅ **HEAD** - Resource metadata\n- ✅ **POST** - Create resources with Slug header\n- ✅ **PUT** - Create or update resources\n- ✅ **DELETE** - Remove resources\n- ✅ **OPTIONS** - CORS preflight\n- ✅ **ETags** - Concurrency control (If-Match, If-None-Match)\n- ✅ **Link headers** - Resource types, container metadata\n- ✅ **CORS** - Cross-origin support\n- ✅ **File-based storage** - Simple filesystem backend\n\n### Optional (Phase 2)\n\n- ⚠️ **PATCH** - Simple JSON Merge Patch (RFC 7386) only\n- ⚠️ **Linkset endpoints** - Metadata via `/resource;linkset` (when LWS spec defines it)\n- ⚠️ **Basic auth** - Simple token-based authentication\n- ⚠️ **Multi-user** - Optional pod isolation\n\n## Scope: What to EXCLUDE\n\nAll Solid-specific and extended features:\n\n- ❌ Solid-OIDC (full IdP/DPoP implementation)\n- ❌ Passkey authentication\n- ❌ WebID-TLS\n- ❌ Nostr authentication/relay\n- ❌ ActivityPub federation\n- ❌ Git HTTP backend\n- ❌ Mashlib data browser\n- ❌ WebSocket notifications\n- ❌ N3 Patch\n- ❌ SPARQL Update\n- ❌ Content negotiation (Turtle ↔ JSON-LD)\n- ❌ Storage quotas\n- ❌ Invite-only registration\n- ❌ WAC (Web Access Control)\n- ❌ WebID profiles\n- ❌ Complex IdP interactions\n\n## Proposed Architecture\n\n### File Structure\n\n\\`\\`\\`\nlws-server/\n├── package.json\n├── README.md\n├── index.js              # Main entry point\n├── lib/\n│   ├── server.js         # Fastify setup\n│   ├── handlers/\n│   │   ├── get.js       # GET/HEAD\n│   │   ├── put.js       # PUT\n│   │   ├── post.js      # POST\n│   │   ├── delete.js    # DELETE\n│   │   └── options.js   # OPTIONS\n│   ├── storage.js        # Filesystem operations\n│   ├── headers.js        # Link/ETag headers\n│   └── auth.js           # Simple token auth (optional)\n└── test/\n    └── lws.test.js\n\\`\\`\\`\n\n### Size Target\n\n- **~500-1000 LOC** (vs JSS's ~8000+ LOC)\n- **~5-10 dependencies** (vs JSS's 22)\n- **Single file option** - Could bundle to single ESM file for embedding\n\n### Dependencies (Minimal)\n\n\\`\\`\\`json\n{\n  \"dependencies\": {\n    \"fastify\": \"^5.x\",\n    \"@fastify/cors\": \"^10.x\",\n    \"fs-extra\": \"^11.x\"\n  },\n  \"devDependencies\": {\n    \"node:test\": \"builtin\"\n  }\n}\n\\`\\`\\`\n\n## API Example\n\n### Programmatic Use\n\n\\`\\`\\`javascript\nimport { createLWSServer } from 'lws-server';\n\nconst server = createLWSServer({\n  port: 3000,\n  root: './data',\n  cors: true,\n  auth: false  // Optional token-based auth\n});\n\nawait server.listen();\nconsole.log('LWS server running on http://localhost:3000');\n\\`\\`\\`\n\n### CLI Use\n\n\\`\\`\\`bash\nnpm install -g lws-server\n\nlws-server --port 3000 --root ./data\n\\`\\`\\`\n\n### Single-User Mode (Default)\n\n\\`\\`\\`bash\n# Creates flat structure (no /alice/ containers)\nPUT /data.json          # Creates /data.json\nPOST / + Slug=file      # Creates /file.json\nGET /                   # Lists all resources\n\\`\\`\\`\n\n### Multi-User Mode (Optional)\n\n\\`\\`\\`bash\nlws-server --multiuser\n\nPUT /alice/data.json    # Creates /alice/data.json\nPUT /bob/data.json      # Creates /bob/data.json\n\\`\\`\\`\n\n## Extraction Strategy\n\n### Option 1: Fork and Strip Down\n\n1. Fork JSS to new repo: \\`lws-server\\`\n2. Remove all non-LWS features\n3. Simplify handlers\n4. Remove dependencies\n5. Refactor to minimal core\n\n**Pros:**\n- Reuse existing, tested code\n- Keep git history for core features\n- Faster initial development\n\n**Cons:**\n- May carry technical debt\n- Harder to achieve size target\n\n### Option 2: Clean Room Implementation\n\n1. Create new repo from scratch\n2. Reference JSS handlers for logic\n3. Implement only LWS core\n4. Modern ESM-first design\n\n**Pros:**\n- Clean codebase\n- Easier to hit size target\n- No legacy patterns\n\n**Cons:**\n- More initial work\n- Need to retest everything\n\n### Recommendation: Option 1 (Fork and Strip)\n\nStart with JSS handlers, progressively remove features until minimal.\n\n## Implementation Plan\n\n### Phase 1: Core Extraction (~4-8 hours)\n\n- [ ] Create \\`lws-server\\` repo\n- [ ] Extract core handlers (GET, PUT, POST, DELETE, OPTIONS)\n- [ ] Extract filesystem storage module\n- [ ] Extract header generation (Link, ETag, CORS)\n- [ ] Remove all Solid-specific code\n- [ ] Remove all extended features (IdP, passkeys, etc.)\n- [ ] Simplify server setup\n\n### Phase 2: Polish (~2-4 hours)\n\n- [ ] Add CLI interface\n- [ ] Add programmatic API\n- [ ] Write minimal README\n- [ ] Add basic tests\n- [ ] Publish to npm as \\`lws-server\\`\n\n### Phase 3: Documentation (~1-2 hours)\n\n- [ ] API documentation\n- [ ] LWS compliance notes\n- [ ] Migration guide from JSS\n- [ ] Embedding examples\n\n## Success Metrics\n\n**Size:**\n- ✅ \u003c 1000 LOC\n- ✅ \u003c 10 dependencies\n- ✅ \u003c 5MB node_modules\n\n**Performance:**\n- ✅ \u003c 100ms startup time\n- ✅ \u003c 5ms per request (simple GET)\n- ✅ \u003c 50MB memory footprint\n\n**Usability:**\n- ✅ Single command to start\n- ✅ Zero config for basic use\n- ✅ Embeddable in Node.js apps\n\n## Comparison Table\n\n| Feature | JSS | lws-server |\n|---------|-----|------------|\n| **LOC** | ~8000+ | ~500-1000 |\n| **Dependencies** | 22 | ~5-10 |\n| **Startup** | ~500ms | \u003c100ms |\n| **Memory** | ~150MB | \u003c50MB |\n| **Protocols** | LDP, LWS, OIDC, AP, Nostr, Git | LWS only |\n| **Auth** | 5 methods | Simple token |\n| **Features** | 20+ | 5 core CRUD |\n\n## Package Name Options\n\n- \\`lws-server\\` ✅ (recommended)\n- \\`minimal-lws\\`\n- \\`lws-storage\\`\n- \\`simple-lws\\`\n- \\`lws-core\\`\n\n## Relationship to Existing Work\n\nThis builds on:\n- **Issue #87** - LWS Protocol Mode analysis and decision criteria\n- **PR #88** - LWS mode infrastructure (config flag, request decoration)\n\n**Differences:**\n- #87/#88: Add LWS support **to JSS** (alongside Solid features)\n- This issue: Extract **separate minimal server** (LWS only, no Solid)\n\n**Use together:**\n- JSS \\`--lws-mode\\` for production multi-protocol server\n- \\`lws-server\\` for embedding, testing, education\n\n## Questions to Resolve\n\n1. **Repository location**: New org or under JavaScriptSolidServer?\n2. **npm scope**: Publish as \\`lws-server\\` or \\`@lwsprotocol/server\\`?\n3. **Versioning**: Start at 1.0.0 or 0.1.0?\n4. **License**: MIT (same as JSS)?\n5. **Auth model**: Include simple token auth or be completely auth-free?\n6. **Timing**: Wait for LWS spec to mature or start now as reference?\n\n---\n\n**Priority:** Low-Medium - Useful for ecosystem, not urgent\n**Effort:** 1-2 days for functional MVP\n**Dependencies:** None (can start anytime, spec still evolving)\n**Status:** Awaiting LWS ecosystem signals (per #87 decision criteria)","author":{"url":"https://github.com/melvincarvalho","@type":"Person","name":"melvincarvalho"},"datePublished":"2026-01-14T15:12:54.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/89/JavaScriptSolidServer/issues/89"}

route-pattern/_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format)
route-controllervoltron_issues_fragments
route-actionissue_layout
fetch-noncev2:fd5a9d18-45c3-75b2-6bb3-f6256823aa72
current-catalog-service-hash81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114
request-idD6C6:85EB9:467F67:60B5A2:69774E16
html-safe-nonced6c4c64bbfcf23b63de0201254168417fff756dcaf82bbacb1a4d9548d3f5a6e
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJENkM2Ojg1RUI5OjQ2N0Y2Nzo2MEI1QTI6Njk3NzRFMTYiLCJ2aXNpdG9yX2lkIjoiNzU3MzA2NDAyOTQ2MzU5NjU2NiIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9
visitor-hmac878aeb73afd3ea89fe675f15d101416d8ed2c1c8940fbb5e25024d228976b50f
hovercard-subject-tagissue:3813634577
github-keyboard-shortcutsrepository,issues,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///voltron/issues_fragments/issue_layout
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/JavaScriptSolidServer/JavaScriptSolidServer/89/issue_layout
twitter:imagehttps://opengraph.githubassets.com/930edc3ae4389336b75937ec8c89d9414718bcbf72f296aa2d598ee8f04394d8/JavaScriptSolidServer/JavaScriptSolidServer/issues/89
twitter:cardsummary_large_image
og:imagehttps://opengraph.githubassets.com/930edc3ae4389336b75937ec8c89d9414718bcbf72f296aa2d598ee8f04394d8/JavaScriptSolidServer/JavaScriptSolidServer/issues/89
og:image:altSummary Create a minimal, standalone LWS (Linked Web Storage) server extracted from JSS that implements only the core W3C LWS protocol without Solid-specific or extended features. Goal: Reference i...
og:image:width1200
og:image:height600
og:site_nameGitHub
og:typeobject
og:author:usernamemelvincarvalho
hostnamegithub.com
expected-hostnamegithub.com
None3310064f35a62c06a4024ba37f41c06836f39376a095c2dfd2c4b693c34965be
turbo-cache-controlno-preview
go-importgithub.com/JavaScriptSolidServer/JavaScriptSolidServer git https://github.com/JavaScriptSolidServer/JavaScriptSolidServer.git
octolytics-dimension-user_id205442424
octolytics-dimension-user_loginJavaScriptSolidServer
octolytics-dimension-repository_id958025407
octolytics-dimension-repository_nwoJavaScriptSolidServer/JavaScriptSolidServer
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id958025407
octolytics-dimension-repository_network_root_nwoJavaScriptSolidServer/JavaScriptSolidServer
turbo-body-classeslogged-out env-production page-responsive
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release67d5f8d1d53c3cc4f49fc3bb8029933c3dc219e6
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/JavaScriptSolidServer/JavaScriptSolidServer/issues/89#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2FJavaScriptSolidServer%2FJavaScriptSolidServer%2Fissues%2F89
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub SparkBuild and deploy intelligent appshttps://github.com/features/spark
GitHub ModelsManage and compare promptshttps://github.com/features/models
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
GitHub SponsorsFund open source developershttps://github.com/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/accelerator
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2FJavaScriptSolidServer%2FJavaScriptSolidServer%2Fissues%2F89
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-repo&source_repo=JavaScriptSolidServer%2FJavaScriptSolidServer
Reloadhttps://github.com/JavaScriptSolidServer/JavaScriptSolidServer/issues/89
Reloadhttps://github.com/JavaScriptSolidServer/JavaScriptSolidServer/issues/89
Reloadhttps://github.com/JavaScriptSolidServer/JavaScriptSolidServer/issues/89
JavaScriptSolidServer https://github.com/JavaScriptSolidServer
JavaScriptSolidServerhttps://github.com/JavaScriptSolidServer/JavaScriptSolidServer
Notifications https://github.com/login?return_to=%2FJavaScriptSolidServer%2FJavaScriptSolidServer
Fork 4 https://github.com/login?return_to=%2FJavaScriptSolidServer%2FJavaScriptSolidServer
Star 4 https://github.com/login?return_to=%2FJavaScriptSolidServer%2FJavaScriptSolidServer
Code https://github.com/JavaScriptSolidServer/JavaScriptSolidServer
Issues 59 https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/issues
Pull requests 6 https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/pulls
Actions https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/actions
Projects 0 https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/projects
Security 0 https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/security
Insights https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/pulse
Code https://github.com/JavaScriptSolidServer/JavaScriptSolidServer
Issues https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/issues
Pull requests https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/pulls
Actions https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/actions
Projects https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/projects
Security https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/security
Insights https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/pulse
New issuehttps://github.com/login?return_to=https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/issues/89
New issuehttps://github.com/login?return_to=https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/issues/89
Extract Minimal Viable LWS Serverhttps://github.com/JavaScriptSolidServer/JavaScriptSolidServer/issues/89#top
enhancementNew feature or requesthttps://github.com/JavaScriptSolidServer/JavaScriptSolidServer/issues?q=state%3Aopen%20label%3A%22enhancement%22
https://github.com/melvincarvalho
https://github.com/melvincarvalho
melvincarvalhohttps://github.com/melvincarvalho
on Jan 14, 2026https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/issues/89#issue-3813634577
LWS Protocol Mode Support (Draft/Future) #87https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/issues/87
feat: LWS Protocol Mode (DRAFT) #88https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/pull/88
W3C LWS Protocol PR #37https://github.com/w3c/lws-protocol/pull/37
W3C LWS Protocol Repositoryhttps://github.com/w3c/lws-protocol
http://localhost:3000http://localhost:3000
LWS Protocol Mode Support (Draft/Future) #87https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/issues/87
feat: LWS Protocol Mode (DRAFT) #88https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/pull/88
LWS Protocol Mode Support (Draft/Future) #87https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/issues/87
feat: LWS Protocol Mode (DRAFT) #88https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/pull/88
#87https://github.com/JavaScriptSolidServer/JavaScriptSolidServer/issues/87
enhancementNew feature or requesthttps://github.com/JavaScriptSolidServer/JavaScriptSolidServer/issues?q=state%3Aopen%20label%3A%22enhancement%22
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.