Note: this issue was generated by an agent (Jesse's Fable assistant), acting per the process described in #823 . It is a proposal only — nothing gets closed, merged, or changed until @jeswr (and any co-maintainer who wants to weigh in) signs off. If you're reading this near a weekend: there is absolutely no expectation of a response, fast or otherwise.
Hi! Following up on #823 , I went through all 212 open issues and 34 open PRs and this is the consolidated triage plan for sign-off. Tick a box to approve that line, strike it out or comment to veto — partial sign-off is fine, and anything unticked simply stays as it is.
How items were assessed: items marked runtime-verified were reproduced (or confirmed fixed) against rdflib v2.4.0 with small scripts; the rest were assessed by reading the thread plus the current source. If any proposed closure looks wrong, that's exactly what this review step is for.
Summary: propose closing 110 (21 already fixed, 77 stale/obsolete/answered, 12 duplicates) · 5 need info from the reporter · 11 quick fixes · 49 actionable bugs · 32 enhancements · 5 docs · 34 PRs dispositioned · plus a modernization section at the end.
1. Proposed closures (110 issues)
1a. Already fixed — close with a short "fixed in current release" comment (21)
1b. Stale / obsolete / answered — close politely, invite reopening with a fresh repro (77)
Long #text nodes break RDFParser #14 — Long #text nodes break RDFParser — 2013 Firefox-specific RDF/XML DOM quirk; no repro or reports in 13 years
rdfparser problems and lack of parser test #21 — rdfparser problems and lack of parser test — 2013; parser and test suite have both been rewritten since
Use strict-transport-security: header to canonicalize http: and https: #23 — Use strict-transport-security: header to canonicalize http: and https: — 2013 idea with no thread; the http/https canonicalization question lives on in Schema.org is inconsistent about http and https in URIs for terms #550
rdflib.js/example/people/social_book.html - FOAF EXAMPLE NEEDED or DOAP? #26 — rdflib.js/example/people/social_book.html - FOAF EXAMPLE NEEDED or DOAP? — 2013 example rot; the external FOAF profile it depended on is long gone
requestURI: failure callback/hook not invoked when used with a proxy #27 — requestURI: failure callback/hook not invoked when used with a proxy — reported against removed jQuery/XHR web.js; fetcher fully rewritten on fetch API
Support a mode to always use the proxy #28 — Support a mode to always use the proxy — 2014 always-use-proxy request; fetcher rewritten multiple times since, no demand
The timeout fetcher attribute has no effect #30 — The timeout fetcher attribute has no effect — 2014 XHR-era fetcher timeout attribute; timeouts since reworked (see Timeouts - change default timeout in fetcher from 30s to 2min #454 /Default fetcher timeouts are too shprt #455 )
Filed based Turtle + SPARQL example #43 — Filed based Turtle + SPARQL example — 2014 doc request answered in-thread with gists; superseded by current README/docs
RDF/XML syntax error No namespace for rdf:about #47 — RDF/XML syntax error No namespace for rdf:about — 2014 RDF/XML namespace report from the pre-xmldom era; no repro since 2015
Really simple example for embedding in standards docs #53 — Really simple example for embedding in standards docs — 2015 nice-to-have example request, no movement in 11 years; tutorials now exist
Handling of base URI #58 — Handling of base URI — vague 2015 base-URI question; superseded by more specific Add option to stop making prefixes up #245 /Serializing to Turtle results in unused prefix and missing @base #251 per 2022 comment
$rdf.uri.protocol returns undefined for relative URI #61 — $rdf.uri.protocol returns undefined for relative URI — relative URIs genuinely have no protocol; arguably works-as-designed, no follow-up in 11 years
Fetch -- node hangs until timeout is reached #68 — Fetch -- node hangs until timeout is reached — 2015 report against XHR/jsdom fetcher on node 0.12; environment and code path gone
_stream_duplex.js module not found when building with browserify #74 — _stream_duplex.js module not found when building with browserify — 2015 browserify issue; modern bundler compat is tracked in The “/esm” directory cannot load via a “module” import. #657 /Vite: Uncaught SyntaxError: import not found: default N3Lexer.js:3:7 #515 /webpack 5 compatibility - reference to buffer #449
Using the fetcher in nodejs with a client certificate #85 — Using the fetcher in nodejs with a client certificate — WebID-TLS client certs deprecated; custom fetch can be injected via Fetcher options
Bad function in example/book.js #88 — Bad function in example/book.js — 2015 example-drift report; examples and API since reworked
Using SPARQL on a store with multiple graphs #89 — Using SPARQL on a store with multiple graphs — question; SPARQL engine is intentionally partial (see SPARQL filter #535 )
Get rid of hardcoded thisURI in web.js/Fetcher #96 — Get rid of hardcoded thisURI in web.js/Fetcher — web.js is gone; fetcher rewritten
Convert rdflib.js to JS Standard coding style #104 — Convert rdflib.js to JS Standard coding style — superseded: codebase moved to TypeScript + eslint (see Modernization below)
TypeError: $rdf.fetcher.lookUpThing is not a function #111 — TypeError: $rdf.fetcher.lookUpThing is not a function — 2016 report against since-rewritten fetcher/query wiring (companion PR A first suggestions for fixing bug #111. #113 also proposed for closure)
Proxied requests ends up putting proxied URL in triple slot 4, not original #118 — Proxied requests ends up putting proxied URL in triple slot 4, not original — 2016 one-liner with no body or repro; proxy handling rewritten since
handling HTTP responses with datasets (including multiple graphs) #119 — handling HTTP responses with datasets (including multiple graphs) — 2016 placeholder with no discussion in 10 years
Handling queries over blank nodes #121 — Handling queries over blank nodes — answered by timbl: the input was not valid RDF/XML
Serializer - stability -comma objects not in order? #136 — Serializer - stability -comma objects not in order? — 2016 report against a since-merged branch; serializer now emits sorted comma lists
$rdf is not defined #146 — $rdf is not defined — environment issue; charset workaround confirmed in thread
Tests #151 — Tests — 2016 test-suite meta-issue; superseded by the Modernization section below + Making sure all unit test files succeed when run in isolation #400 /Add e2e for browser #713
addStatement should not be a public method #165 — addStatement should not be a public method — 2017 API-surface opinion; no demand since, and removing it now would be a breaking change
Make serializer test case 8 work #176 — Make serializer test case 8 work — stale test-suite TODO; folded into test modernization below
SPARQL supported filters #178 — SPARQL supported filters — answered by SPARQL filter #535 : FILTER is not supported and there are no plans (use Comunica)
SPARQL filter #181 — SPARQL filter — same answer as SPARQL supported filters #178 /SPARQL filter #535 : SPARQL FILTER not supported by design
Sparql order by #186 — Sparql order by — ORDER BY not supported; SPARQL engine intentionally partial (SPARQL filter #535 )
Fails to parse 'application/rdf+xml' format when document has '<?xml version="1.0" encoding="utf-8"?>' as first line #187 — Fails to parse 'application/rdf+xml' format when document has '' as first line — XML-declaration parsing failures date from the pre-@xmldom era; no repro since
Update installation instructions and dist/ #188 — Update installation instructions and dist/ — 2017 install-docs report; installation docs and dist model since rewritten
SPARQL ASK #189 — SPARQL ASK — ASK not supported; SPARQL engine intentionally partial (SPARQL filter #535 )
RDFa parser base "hack", an example and thanks! #206 — RDFa parser base "hack", an example and thanks! — friendly discussion, no single action left
Test failling on node 6 #212 — Test failling on node 6 — node 6 / Travis era; both gone
inferencing engine? #217 — inferencing engine? — scope question (inference engine); out of scope, no follow-up in 8 years
Functional-style datamodel & performance #219 — Functional-style datamodel & performance — design discussion superseded by RDF/JS work (Implement RDFJS Representation Task Force spec #137 ); companion PR Term memoization #272 also stale
Need NamedNode.origin() method #233 — Need NamedNode.origin() method — NamedNode.site() covers the use case; no demand since 2018
FILTER Expression in SPARQL SELECT query is not evaluated #236 — FILTER Expression in SPARQL SELECT query is not evaluated — FILTER not supported by design (SPARQL filter #535 )
Please stop using arrays as associative arrays #242 — Please stop using arrays as associative arrays — code-quality concern now best addressed via the active serializer refactor (Typing and refactoring of serializer.js #740 )
Fix third party vulnerabilities identified by npm audit #252 — Fix third party vulnerabilities identified by npm audit — 2018 npm-audit snapshot is obsolete; dependency chain overhauled (audit gate proposed in Modernization)
Documentation for functions missing in 0.19.0 #259 — Documentation for functions missing in 0.19.0 — docs since regenerated via typedoc
Remove comma in JSDoc @param #260 — Remove comma in JSDoc @PARAM — JSDoc-era nit made moot by the TypeScript migration
SPARQL 1.1 #262 — SPARQL 1.1 — 8-year-old question answered by SPARQL filter #535 : SPARQL engine intentionally partial
Importing from node_modules causes 401 errors #268 — Importing from node_modules causes 401 errors — vague, environment-specific, no repro in 8 years
What is async and what is not #276 — What is async and what is not — TS types now document what returns a promise; superseded by typed API + docs work (Documentation examples how to use the library #656 )
Cannot remove items returned from globbing lookup #279 — Cannot remove items returned from globbing lookup — workaround confirmed in thread; globbing is deprecated in Solid
Not decoding booleans correctly #280 — Not decoding booleans correctly — works-as-designed: RDF/JS Literal.value is always a string; use .datatype (boolean serializer bugs tracked in Boolean literals parsed as "0", "1" #147 /Turtle serializer mis‑normalizes xsd:boolean literal "true" as "false" #772 )
fetcher not using solid.auth.fetch #284 — fetcher not using solid.auth.fetch — reporter self-solved; custom fetch via Fetcher options is the documented pattern
match only on loaded doc statements "why" (not metadata) #285 — match only on loaded doc statements "why" (not metadata) — question; the underlying noMeta gap is tracked in Fetcher.load saves metadata to graph even though noMeta is set to true #296
What is the lifetime of the store cache #287 — What is the lifetime of the store cache — question; cache-expiry design is tracked in Caching Solid ACL group listings #239
Weird behavior tied to testMode in SPARQLToQuery #293 — Weird behavior tied to testMode in SPARQLToQuery — workaround found in-thread; SPARQL engine partial
Non-standard HTTP vocabulary #294 — Non-standard HTTP vocabulary — answered by kjetilk; changing vocab now would be breaking with no consensus
updater.addDownstreamChangeListener timing issues #300 — updater.addDownstreamChangeListener timing issues — tied to the old websocket protocol; superseded by Upgrade WebSocket live update to use WebSocketSubscription2021 where available #549
SPARQL appears to ignore predicate #308 — SPARQL appears to ignore predicate — no repro; SPARQL engine partial (SPARQL filter #535 )
moderate vulnerability from archived repo #314 — moderate vulnerability from archived repo — 2019 vulnerability chain no longer applies; audit gate proposed in Modernization
formula.substitute is undocumented / does nothing #315 — formula.substitute is undocumented / does nothing — no activity in 7 years; reopen with a concrete use case
Add support for browser Native File System #354 — Add support for browser Native File System — 2019 browser-FS request addressed outside core via pluggable fetch; newer take kept open as Allow file access using the browser's local file access API #570
Remove kludge to detect servers that accept SPARQL queries #367 — Remove kludge to detect servers that accept SPARQL queries — 2019 placeholder, no discussion
Improvements to typings #376 — Improvements to typings — vague umbrella; the concrete typing issues are tracked in Typescript: Type 'NamedNode' is missing the following properties from type 'NamedNode': classOrder, dir, site, doc, and 9 more #451 /Typescript: first argument of serialize() should be optional #450
Send auth command when connecting to WebSocket #384 — Send auth command when connecting to WebSocket — tied to deprecated NSS websocket auth; superseded by Upgrade WebSocket live update to use WebSocketSubscription2021 where available #549
Look at 404 responses as well as 2xx when looking for Updates-Via headers #392 — Look at 404 responses as well as 2xx when looking for Updates-Via headers — old Updates-Via websocket protocol; superseded by Upgrade WebSocket live update to use WebSocketSubscription2021 where available #549
SPARQL query execution returns unrequested variables #393 — SPARQL query execution returns unrequested variables — no repro; SPARQL engine partial
Identify core areas of code base #404 — Identify core areas of code base — 2020 planning discussion that concluded
Web socket live updates seem to be broken #418 — Web socket live updates seem to be broken — vague report against deprecated NSS protocol on a server that no longer exists; see Upgrade WebSocket live update to use WebSocketSubscription2021 where available #549
Missing charset prevents rdflib from loading #422 — Missing charset prevents rdflib from loading — 2020 placeholder, no repro
Error when compiling with Typescript #433 — Error when compiling with Typescript — 2020 placeholder, no repro; TS consumers compile today
documentation: how to delete/replace nodes or literals? #463 — documentation: how to delete/replace nodes or literals? — answered in-thread by bourgeoa and timbl; asker found their solution
Send Patches down the webSocket instead of PATCH #465 — Send Patches down the webSocket instead of PATCH — depends on a websocket protocol that never landed; superseded by Upgrade WebSocket live update to use WebSocketSubscription2021 where available #549
Does not properly process 8-bit unicode escape sequences on string literals #494 — Does not properly process 8-bit unicode escape sequences on string literals — no repro; escape handling is covered by Turtle-conformance work (Failing RDF Turtle 1.1 conformance cases #329 )
Adding .doc() to bNodes??? #498 — Adding .doc() to bNodes??? — 2021 placeholder, no discussion
Add http HEAD handling #525 — Add http HEAD handling — 2021 placeholder, no discussion
SPARQL filter #535 — SPARQL filter — answered definitively: no FILTER support, no plans; Comunica recommended
Natively Support In-Browser RDF #538 — Natively Support In-Browser RDF — discussion concluded with jeff-zucker's dual-fetch examples
CSS fetcher.webOperation return allways text/turtle with rdflib@2.2.33 #629 — CSS fetcher.webOperation return allways text/turtle with rdflib@2.2.33 — root cause was in CSS, fixed there (CommunitySolidServer#1868)
Allow library building from source when including in package.json #654 — Allow library building from source when including in package.json — prepublishOnly makes git-deps not build by design; standard npm limitation, no follow-up
1c. Duplicates — close with a link to the canonical issue (12)
2. Needs info — friendly ping to the reporter, close later if no reply (5)
3. Actionable bugs, ranked (49)
Recurring themes, for context: Turtle/N3 conformance (#329 umbrella: #214 , #626 , #647 ), fetcher correctness (#204 , #617 , #296 , #461 , #295 /#348 , #585 ), serializer output (#251 + prefix family, #546 , #561 , #749 ), update-manager/PATCH (#659 /#313 , #479 ), booleans (#147 /#772 ), and packaging/bundlers (#657 umbrella: #449 , #515 , #665 , #685 ).
High severity (5)
Medium severity (27)
Boolean literals parsed as "0", "1" #147 — Boolean literals parsed as "0", "1" — boolean literal value normalization ('0'/'1' vs 'true'/'false') keeps generating downstream bugs (NSS can't PATCH booleans represented as "true" or "false" seems to be an Rdflib issue #604 /boolean value from store being changed in jsonLD serialization #619 /Turtle serializer mis‑normalizes xsd:boolean literal "true" as "false" #772 ); decide canonical behavior once
Chaining parse/write of rdf+xml leads to infinite expansion #182 — Chaining parse/write of rdf+xml leads to infinite expansion — RDF/XML parse→serialize round-trip expands output every cycle; old but has a clean inline repro — verify at 2.4.x
multi-line literals in turtle only supported with double-quotes #214 — multi-line literals in turtle only supported with double-quotes — runtime-verified: '''…''' literals throw Bad syntax; broken parenthesization near n3parser.js:1319; part of Failing RDF Turtle 1.1 conformance cases #329
Serializing to Turtle results in unused prefix and missing @base #251 — Serializing to Turtle results in unused prefix and missing @base — runtime-verified: unused '@Prefix : </#>.' emitted, no @base ; fix localized to prefixDirectivesMethod but output changes ripple across the ecosystem
CORS issue loading public resource #295 — CORS issue loading public resource — CORS/credentials retry mishandles thrown fetch exceptions (timbl analyzed); family with When retying without credentials, promise seems to be lost on double error #348
Fetcher.load saves metadata to graph even though noMeta is set to true #296 — Fetcher.load saves metadata to graph even though noMeta is set to true — runtime-verified: load(url,{noMeta:true}) still stores ~11 meta triples; the response-metadata save path lacks the noMeta guard
updateManager.update fails to generate proper variable names for blank nodes #313 — updateManager.update fails to generate proper variable names for blank nodes — UpdateManager can send ungrounded bnode variables in INSERT/DELETE (timbl confirmed); same family as Inserts in n3patch may contain Blanknodes : Forbidden by CSS from N3PATCH spec #659
Merging graphs with blank nodes #405 — Merging graphs with blank nodes — BlankNode.nextId collision when merging graphs (RinkeHoekstra pinpointed the culprit); nquads-parsed bnodes don't converge #71 folded in
Parsing text/html fails on self-closing tags #423 — Parsing text/html fails on self-closing tags — text/html is parsed with an XML parser so self-closing tags fail; matters for RDFa and consider supporting data islands? #424
webpack 5 compatibility - reference to buffer #449 — webpack 5 compatibility - reference to buffer — webpack 5 buffer/url polyfill breakage; packaging family with The “/esm” directory cannot load via a “module” import. #657 /Vite: Uncaught SyntaxError: import not found: default N3Lexer.js:3:7 #515 /Module not found: Can't resolve 'rdf-canonize-native' during build in RDFLib dependency #665 /Build module error ky-universal : Can't resolve Can't resolve 'web-streams-polyfill/ponyfill/es2018' #685
Typescript: Type 'NamedNode' is missing the following properties from type 'NamedNode': classOrder, dir, site, doc, and 9 more #451 — Typescript: Type 'NamedNode' is missing the following properties from type 'NamedNode': classOrder, dir, site, doc, and 9 more — tf-types interfaces still not exported from src/index.ts, so no valid annotation exists for Namespace() returns; export aliased types
serializer for application/nquads should not use long literal #452 — serializer for application/nquads should not use long literal — n-quads output can contain long literals, which the spec forbids; check flag plumbing in stringToN3 (the old +1/-1 from PR Fix an issue where serializer flags didn't affect strings #282 is already on main)
FetchQueue errors #461 — FetchQueue errors — FetchQueue timeout loop failure analyzed by jeff-zucker at fetcher.ts:1009; affects operations after fetcher.load
UpdaterManger.update() does never reject in case of error #479 — UpdaterManger.update() does never reject in case of error — UpdateManager.update() never rejects on error; promise plumbing bug
isRDFlibObject check for hasOwnProperty does not work with es6 classes #480 — isRDFlibObject check for hasOwnProperty does not work with es6 classes — verified: isRDFlibObject still uses hasOwnProperty('termType'), so es6-class terms (e.g. from Comunica) fail the guard; small contained fix
Vite: Uncaught SyntaxError: import not found: default N3Lexer.js:3:7 #515 — Vite: Uncaught SyntaxError: import not found: default N3Lexer.js:3:7 — Vite cannot bundle rdflib (N3Lexer import error); packaging family with The “/esm” directory cannot load via a “module” import. #657
RDF/XML Incorrect When Serializing Graph With Blank Nodes #546 — RDF/XML Incorrect When Serializing Graph With Blank Nodes — RDF/XML output incorrect for graphs with blank nodes; RDF/XML serializer family with Chaining parse/write of rdf+xml leads to infinite expansion #182 /RDF XML 1.1 langString serialization #724
N-Quads serializer cannot deal with default graph. #561 — N-Quads serializer cannot deal with default graph. — N-Quads serializer cannot handle the default graph; clear repro
findMembersNT searches the whole store not just one document #565 — findMembersNT searches the whole store not just one document — findMembersNT searches the whole store, not one document; timea proposed rollback+redesign in-thread
Rdflib accidentally sends out map headers #585 — Rdflib accidentally sends out map headers — fetcher accidentally sends a 'map: [object Object]' header, causing CORS failures; likely small fix once located
Support PREFIX directives in turtle parsers. #626 — Support PREFIX directives in turtle parsers. — SPARQL-style PREFIX directives unsupported in Turtle parser; common real-world failure; part of Failing RDF Turtle 1.1 conformance cases #329
deleteDocument() : Error : Statement to be removed is not on store #631 — deleteDocument() : Error : Statement to be removed is not on store — deleteDocument() throws 'Statement to be removed is not on store' when metadata contains Collections; PR Issue#631bis #636 attempts a fix
Parsing error on prefix:N.N syntax #647 — Parsing error on prefix:N.N syntax — prefix:1.18-style local names fail ('EOF in middle of path syntax'); PR Draft: add tests for the dotted IRI/prefixedname #696 has a test; relates to PRs N3 parsing of local names with special characters #523 /N3Parser: support escape sequences in local names #557 and Failing RDF Turtle 1.1 conformance cases #329
The “/esm” directory cannot load via a “module” import. #657 — The “/esm” directory cannot load via a “module” import. — published /esm build not browser-loadable (extensionless bare @babel/runtime imports); canonical packaging bug
Module not found: Can't resolve 'rdf-canonize-native' during build in RDFLib dependency #665 — Module not found: Can't resolve 'rdf-canonize-native' during build in RDFLib dependency — rdf-canonize-native resolution breaks builds; jsonld dependency chain; packaging family
Build module error ky-universal : Can't resolve Can't resolve 'web-streams-polyfill/ponyfill/es2018' #685 — Build module error ky-universal : Can't resolve Can't resolve 'web-streams-polyfill/ponyfill/es2018' — ky-universal polyfill warning under webpack 5; may already be resolved by the jsonld 9 upgrade — verify then close
NTriples serializer does not serialize nested collections #749 — NTriples serializer does not serialize nested collections — N-Triples serializer drops nested collections; fix already exists in DJ1TJOO's fork (Typing and refactoring of serializer.js #740 )
Low severity (17)
4. Actionable enhancements (32) and docs (5)
No action needed on these now — this is just confirming they stay open as the curated backlog.
Enhancements / design decisions
rdflib includes jsonparser.js but it doesn't appear to be used #87 — rdflib includes jsonparser.js but it doesn't appear to be used — src/jsonparser.js exists and is exported but unused by parse(); deprecate-or-document decision
Implement RDFJS Representation Task Force spec #137 — Implement RDFJS Representation Task Force spec — canonical RDF/JS Data Model compliance tracker (toCanonical removal, Rename Node to Term - comply to RDF/JS: Data model specification #360 folded in); umbrella for IndexedFormula is not RDFJS-compliant #238 /Compatibility with RDF/JS types #374 /isRDFlibObject check for hasOwnProperty does not work with es6 classes #480
rdf:Lists should be parsed into RDF triples #169 — rdf:Lists should be parsed into RDF triples — option to parse rdf:Lists as standard first/rest triples instead of Collection termType
Add a sync mode for JSON-LD parsing #209 — Add a sync mode for JSON-LD parsing — make parse() properly async for JSON-LD (angelo-v, active 2025)
IndexedFormula is not RDFJS-compliant #238 — IndexedFormula is not RDFJS-compliant — IndexedFormula#match should accept terms from other datafactories (RDF/JS Source interface)
Caching Solid ACL group listings #239 — Caching Solid ACL group listings — cache-expiry/eviction wishlist for the fetcher (refreshIfExpired already landed)
Add option to stop making prefixes up #245 — Add option to stop making prefixes up — option to stop inventing prefixes (serializer prefix-control family with Serializing to Turtle results in unused prefix and missing @base #251 /Generated Turtle prefix depends on trailing slash #288 /Impossible to set a namespace prefix in serializer #536 )
Auto-load metadata before update PATCH if necessary #250 — Auto-load metadata before update PATCH if necessary — update() should auto-load metadata when missing before PATCH (timbl's suggestion)
Generated Turtle prefix depends on trailing slash #288 — Generated Turtle prefix depends on trailing slash — generated Turtle prefix depends on trailing slash; prefix-control family
Set cache state after successful putBack #331 — Set cache state after successful putBack — set cache state to 'done' after successful putBack to avoid redundant refetch
Add WAC-Allow header awareness in updater's editable() function #332 — Add WAC-Allow header awareness in updater's editable() function — WAC-Allow awareness in updater.editable()
Support the Microdata format #345 — Support the Microdata format — microdata parser request (canonical for Microdata Support #34 ); scope decision for maintainers
Refactor the json-ld parser to not use a whole N3 library #349 — Refactor the json-ld parser to not use a whole N3 library — stop shipping a whole N3 library inside the JSON-LD parser (priority + code-bloat labels, active 2026)
Change defaultGraph iri #370 — Change defaultGraph iri — defaultGraph IRI 'chrome:theSession' is not a parseable URL; interop decision
Compatibility with RDF/JS types #374 — Compatibility with RDF/JS types — RDF/JS typings alignment — upstream moved to @rdfjs/types; rdflib now depends on it, so revisit
Add standard JSONLD parser tests #391 — Add standard JSONLD parser tests — adopt the official W3C JSON-LD test manifests; also covers the dynamic-import browser regression angelo-v found
Making sure all unit test files succeed when run in isolation #400 — Making sure all unit test files succeed when run in isolation — make every unit test file pass in isolation (test-hygiene; feeds Modernization)
Signature of all things which take S, P O, G should be consistent #417 — Signature of all things which take S, P O, G should be consistent — consistent liberal S,P,O,G signatures everywhere (st() vs add()); fixes Number and Date seems to be omitted from type list #416
consider supporting data islands? #424 — consider supporting data islands? — parse JSON-LD script data islands from HTML (canonical for Parse JSON-LD in HTML #344 /parse HTML data island ? #596 ); spec-backed, widely deployed
Default fetcher timeouts are too shprt #455 — Default fetcher timeouts are too shprt — decide default fetcher timeout (PR Timeouts - change default timeout in fetcher from 30s to 2min #454 proposes 30s→2min; michielbdejong disagrees)
Handle Atom XML feeds #467 — Handle Atom XML feeds — Atom/XML feed handling policy — csarven active 2024; maintainer decision on content-type authority
Use If-Match header with latest known ETag in update manager #482 — Use If-Match header with latest known ETag in update manager — If-Match/ETag conflict detection in UpdateManager; design sketched by timbl/josephguillaume; default-on is semver-major
Changing default graph for searches to the local one? Beware a wildcard graph param. #499 — Changing default graph for searches to the local one? Beware a wildcard graph param. — default-graph-for-searches semantics (breaking); keep on the table for a major
Impossible to set a namespace prefix in serializer #536 — Impossible to set a namespace prefix in serializer — allow forcing namespace prefixes in the serializer; prefix-control family
Upgrade WebSocket live update to use WebSocketSubscription2021 where available #549 — Upgrade WebSocket live update to use WebSocketSubscription2021 where available — canonical live-update modernization (WebSocketSubscription2021 / Solid Notifications); Send auth command when connecting to WebSocket #384 /Web socket live updates seem to be broken #418 /Upgrade web socket use to secure protcool #510 /updater.addDownstreamChangeListener timing issues #300 /Look at 404 responses as well as 2xx when looking for Updates-Via headers #392 /Send Patches down the webSocket instead of PATCH #465 close into this
Schema.org is inconsistent about http and https in URIs for terms #550 — Schema.org is inconsistent about http and https in URIs for terms — timbl policy question on schema.org http/https canonicalization; may need a canonicalization option
Allow file access using the browser's local file access API #570 — Allow file access using the browser's local file access API — File System Access API support (timbl, 2022 — newer take on closed Add support for browser Native File System #354 )
Jsonld serialise collections to @list #593 — Jsonld serialise collections to @list — JSON-LD serializer should emit collections as @list
Mixins? + prefix/namespace map with abbreviate/expand methods for terms #695 — Mixins? + prefix/namespace map with abbreviate/expand methods for terms — mixin-ify ConnectedStore/LiveStore + richer namespace map; thoughtful proposal needing maintainer design input
Add e2e for browser #713 — Add e2e for browser — add Playwright browser e2e (jeswr); feeds Modernization
Support for TriG serialization format? #714 — Support for TriG serialization format? — TriG serialization support
Typing and refactoring of serializer.js #740 — Typing and refactoring of serializer.js — DJ1TJOO's active serializer typing/refactor — an engaged contributor whose fork already fixes Serializer contains misspelling of 'this.keyords' --> 'this.keywords' #742 /Serializer checkIntegrity broken by constructor and setPrefix #743 /NTriples serializer does not serialize nested collections #749 /NTriples serializer misspelled rdf:nill #750 ; worth coordinating with
Documentation
5. Open PRs (34)
Mergeable now (2) — green checks; just need a maintainer merge
Needs rebase, still wanted (3)
Needs work / maintainer decision (11)
Supersede with fresh PRs, crediting the author (3)
Propose closing (15) — code paths rewritten or change already on main
6. Modernization proposals (current setup reviewed; all opt-in)
I read the current eslint.config.mjs, .github/workflows/ci.yml, and package.json at v2.4.0. The bones are good — CI matrix on Node 22/24, OIDC npm publish with a prerelease gate, typedoc to gh-pages. Proposals, each of which can be its own small PR:
7. Quick-fix draft PRs I'd open next (pending sign-off on this plan)
All verified against v2.4.0 source at the stated locations; each PR will be draft , clearly agent-authored, with a regression test:
Serializer contains misspelling of 'this.keyords' --> 'this.keywords' #742 — this.keyords → this.keywords (src/serializer.js:682; restores the k flag)
NTriples serializer misspelled rdf:nill #750 — rdf:nill → rdf:nil (src/serializer.js:309)
Turtle serializer mis‑normalizes xsd:boolean literal "true" as "false" #772 — boolean lexical form "true" serialized as "false" (src/serializer.js:580; melvincarvalho's suggested fix + tests, also touches Boolean literals parsed as "0", "1" #147 )
Mime-Type for N-Triples #110 — accept application/n-triples in parse() (src/parse.ts; supersedes PR Closes #110: Added support for application/n-triples #220 with credit)
Typescript: first argument of serialize() should be optional #450 — allow undefined first argument in serialize() typings (src/serialize.ts; supersedes PR Allow falsy targets to be passed to the serializer #237 with credit)
Remaining quick-fix backlog for a second round: #148 , #205 , #275 , #319 (+PR #281 ), #340 , #741 .
Thanks for reading this far — again, no rush whatsoever. Comment inline, tick what you agree with, and I'll only act on what's approved. 🤖
Hi! Following up on #823, I went through all 212 open issues and 34 open PRs and this is the consolidated triage plan for sign-off. Tick a box to approve that line, strike it out or comment to veto — partial sign-off is fine, and anything unticked simply stays as it is.
How items were assessed: items marked runtime-verified were reproduced (or confirmed fixed) against rdflib v2.4.0 with small scripts; the rest were assessed by reading the thread plus the current source. If any proposed closure looks wrong, that's exactly what this review step is for.
Summary: propose closing 110 (21 already fixed, 77 stale/obsolete/answered, 12 duplicates) · 5 need info from the reporter · 11 quick fixes · 49 actionable bugs · 32 enhancements · 5 docs · 34 PRs dispositioned · plus a modernization section at the end.
1. Proposed closures (110 issues)
1a. Already fixed — close with a short "fixed in current release" comment (21)
1b. Stale / obsolete / answered — close politely, invite reopening with a fresh repro (77)
thisURIin web.js/Fetcher #96 — Get rid of hardcodedthisURIin web.js/Fetcher — web.js is gone; fetcher rewrittennoMetais set to true #296authcommand when connecting to WebSocket #384 — Sendauthcommand when connecting to WebSocket — tied to deprecated NSS websocket auth; superseded by Upgrade WebSocket live update to use WebSocketSubscription2021 where available #549package.json#654 — Allow library building from source when including inpackage.json— prepublishOnly makes git-deps not build by design; standard npm limitation, no follow-up1c. Duplicates — close with a link to the canonical issue (12)
2. Needs info — friendly ping to the reporter, close later if no reply (5)
3. Actionable bugs, ranked (49)
Recurring themes, for context: Turtle/N3 conformance (#329 umbrella: #214, #626, #647), fetcher correctness (#204, #617, #296, #461, #295/#348, #585), serializer output (#251 + prefix family, #546, #561, #749), update-manager/PATCH (#659/#313, #479), booleans (#147/#772), and packaging/bundlers (#657 umbrella: #449, #515, #665, #685).
High severity (5)
PREFIXdirectives in turtle parsers. #626/Parsing error on prefix:N.N syntax #647/Does not properly process 8-bit unicode escape sequences on string literals #494Medium severity (27)
noMetais set to true #296 — Fetcher.load saves metadata to graph even thoughnoMetais set to true — runtime-verified: load(url,{noMeta:true}) still stores ~11 meta triples; the response-metadata save path lacks the noMeta guardPREFIXdirectives in turtle parsers. #626 — SupportPREFIXdirectives in turtle parsers. — SPARQL-style PREFIX directives unsupported in Turtle parser; common real-world failure; part of Failing RDF Turtle 1.1 conformance cases #329Low severity (17)
4. Actionable enhancements (32) and docs (5)
No action needed on these now — this is just confirming they stay open as the curated backlog.
Enhancements / design decisions
authcommand when connecting to WebSocket #384/Web socket live updates seem to be broken #418/Upgrade web socket use to secure protcool #510/updater.addDownstreamChangeListener timing issues #300/Look at 404 responses as well as 2xx when looking for Updates-Via headers #392/Send Patches down the webSocket instead of PATCH #465 close into thisabbreviate/expandmethods for terms #695 — Mixins? + prefix/namespace map withabbreviate/expandmethods for terms — mixin-ify ConnectedStore/LiveStore + richer namespace map; thoughtful proposal needing maintainer design inputrdf:nill#750; worth coordinating withDocumentation
5. Open PRs (34)
Mergeable now (2) — green checks; just need a maintainer merge
Needs rebase, still wanted (3)
Needs work / maintainer decision (11)
Supersede with fresh PRs, crediting the author (3)
Propose closing (15) — code paths rewritten or change already on main
abbreviate/expandmethods for terms #695/error in some compilation contexts (due to circular dependencies?) #5806. Modernization proposals (current setup reviewed; all opt-in)
I read the current
eslint.config.mjs,.github/workflows/ci.yml, andpackage.jsonat v2.4.0. The bones are good — CI matrix on Node 22/24, OIDC npm publish with a prerelease gate, typedoc to gh-pages. Proposals, each of which can be its own small PR:npm run lintexists but is not in the CI job, and the flat config only sets two rules (semi,no-console) as warnings on**/*.js— TypeScript files are effectively unlinted. Propose: addtypescript-eslintrecommended (warnings-only at first, autofix what's safe), and add a non-blocking lint step to CI so new code sees it.nyc/c8over the mocha run and publish a coverage summary on PRs (no threshold gate initially, just visibility).npm version+ the publish workflow. Propose release-please (or changesets) with conventional commits going forward → automatic CHANGELOG and GitHub Releases (Create Releases with minified versions for greater adoption #49 asked for this in 2014!). Squash-merge with conventional titles keeps contributor friction near zero.engines+.nvmrc(Add a dot nvmrc file #340), state the support policy in the README (e.g. "active LTS"), and schedule the TS 6 migration deliberately rather than via dependabot (Bump typescript from 5.9.3 to 6.0.3 #803).npm audit --omit=devas a non-blocking CI step; group dependabot updates monthly to reduce PR noise.esm/andlib/outputs in a bare Node process and a bundler.7. Quick-fix draft PRs I'd open next (pending sign-off on this plan)
All verified against v2.4.0 source at the stated locations; each PR will be draft, clearly agent-authored, with a regression test:
this.keyords→this.keywords(src/serializer.js:682; restores thekflag)rdf:nill#750 —rdf:nill→rdf:nil(src/serializer.js:309)"true"serialized as"false"(src/serializer.js:580; melvincarvalho's suggested fix + tests, also touches Boolean literals parsed as "0", "1" #147)application/n-triplesinparse()(src/parse.ts; supersedes PR Closes #110: Added support for application/n-triples #220 with credit)undefinedfirst argument inserialize()typings (src/serialize.ts; supersedes PR Allow falsy targets to be passed to the serializer #237 with credit)Remaining quick-fix backlog for a second round: #148, #205, #275, #319 (+PR #281), #340, #741.
Thanks for reading this far — again, no rush whatsoever. Comment inline, tick what you agree with, and I'll only act on what's approved. 🤖