Standards
Every standard and specification Solid Memo uses, with its version, its status, a link to where it is published, and where the code uses it. A term you do not know is in the glossary. The rules the code follows beyond these formats, such as SM-2, are in policy.md.
Open means the specification is published for anyone to read and implement, free of charge and of royalties, with no single vendor deciding who may use it. Every specification below is open in that sense. Some are drafts or de facto specifications rather than formal standards; Drafts and de facto specifications says which, and why each one does not stand in the way of reuse.
Solid
| Standard | Version | Status | Where used | Open |
|---|---|---|---|---|
| Solid Protocol | 0.11.0 | W3C Solid Community Group draft | Reading and writing the pod: packages/solid/src/ through @inrupt/solid-client; the storage found by pim:storage (data-model.md) | Yes (draft) |
| Solid-OIDC | 0.1.0 | W3C Solid Community Group draft | Login and session restore: solidSessionGateway.ts through @inrupt/solid-client-authn-browser (authentication.md) | Yes (draft) |
| WebID and the Solid WebID Profile | WebID 1.0 (2014); Solid WebID Profile 1.0.0 | W3C Incubator Group editor's draft; W3C Solid Community Group draft | The user's identity and the profile the app reads the issuer, storage and type indexes from (authentication.md, onboarding.md, data-model.md) | Yes (draft) |
| Type Indexes | 1.0.0 | Editor's draft | Finding and registering an instance: typeIndex.ts (data-model.md) | Yes (draft) |
| Web Access Control and Access Control Policy | WAC 1.0.0; ACP 0.9.0 | W3C Solid Community Group drafts | Making a published release public: solidReleasePublisher.ts, through @inrupt/solid-client's universal access, which speaks whichever the pod uses (boundaries.md) | Yes (draft) |
| Linked Data Platform | 1.0 | W3C Recommendation | Containers in the pod and in the guest's pod: localPod.ts (guest-mode.md) | Yes |
Linked data
| Standard | Version | Status | Where used | Open |
|---|---|---|---|---|
| RDF | 1.1 | W3C Recommendation | All data in the pod, the vocabulary, the shapes and the deck library | Yes |
| Turtle | 1.1 | W3C Recommendation | Every document Solid Memo writes, read and written with N3.js: packages/turtle/ (architecture.md) | Yes |
| JSON-LD | 1.1 | W3C Recommendation | A deck saved as a file (data-model.md, deckFile.ts); the site's description in apps/web/index.html | Yes |
| SPARQL 1.1 Update | 1.1 | W3C Recommendation | An edit to a document in the pod, sent as a PATCH of DELETE DATA and INSERT DATA blocks (datasets.ts), and accepted by the guest's pod (localPod.ts). The Solid Protocol's own patch format, N3 Patch, is not used | Yes |
| RDF Schema | 1.1 | W3C Recommendation | Solid Memo's vocabulary, ns/vocab/v1.ttl (vocab.md) | Yes |
| OWL 2 | 2 | W3C Recommendation | The vocabulary's classes and properties, and owl:deprecated on a retired card (vocab.md) | Yes |
| XML Schema datatypes | 1.1 | W3C Recommendation | Typed literals (xsd:dateTime, xsd:integer, …) | Yes |
| SHACL | 1.0 (W3C Recommendation, 2017) | W3C Recommendation | The shapes in ns/shapes/, checked in the browser by rdf-validate-shacl and in CI by pySHACL (shapes.md, validation.md) | Yes |
| DCAT | 3 | W3C Recommendation | Decks, releases and the library's catalog (deck-library.md, releaseModel.ts) | Yes |
| DCAT-AP | 3.0.1 | SEMIC (European Commission) specification | Profile validation of decks and the library, with the vendored shapes in packages/vocab/vendor/dcat-ap/3.0.1/ (validation.md) | Yes |
| ADMS | 1.0 | W3C Working Group Note | adms:versionNotes on a release (deck-library.md) | Yes |
| SKOS | 2009 | W3C Recommendation | The concept schemes in ns/vocab/ (vocab.md), checked with the vendored SkoHub shapes | Yes |
| PROV-O | 2013 | W3C Recommendation | How a release was made, and the sources it was derived from (deck-library.md, provenanceRules.ts) | Yes |
| SPDX RDF terms | 2.3 | Linux Foundation specification (SPDX 2.2.1 is ISO/IEC 5962:2021) | spdx:checksum with SHA-256 for the script a deck was made by, in its provenance (decks/swedish-labour-market-taxonomy-occupation-names/v2.ttl), checked by DCAT-AP's checksum shape; the spdx: prefix a release is written with (solidReleaseDraftRepository.ts) | Yes |
| DCMI Metadata Terms | 2020 | DCMI Recommendation (ISO 15836-2) | Titles, descriptions, creators, licenses and dates (dcterms:) | Yes |
| FOAF | 0.99 | Specification by its authors, stable since 2014 | Agents: creators and the publisher (agentRecord.ts) | Yes |
| vCard Ontology | 2014 | W3C Interest Group Note | A deck version's contact, a vcard:Kind with the project's issue tracker as its vcard:hasURL (deck-library.md), checked by deckLibrary.ts | Yes |
| schema.org | current release, unpinned (releases) | W3C Community Group vocabulary, de facto | Courses, chapters, steps and wrong options (courses.md); the site's description in apps/web/index.html | Yes (de facto) |
| EU Vocabularies authority tables | as referenced in ns/vocab/external.ttl | Publications Office of the European Union reference data | A deck's languages and its data theme EDUC (deck-library.md) | Yes |
| IANA media types | registry | IANA registry | dcat:mediaType of a deck's distribution | Yes |
Text and languages
| Standard | Version | Status | Where used | Open |
|---|---|---|---|---|
| CommonMark | 0.31.2 | Specification by the CommonMark project | Text in Markdown: packages/markdown/ (markdown.md) | Yes |
| GitHub Flavored Markdown, pipe tables only | 0.29-gfm | Specification by GitHub, de facto | Tables in Markdown text, through micromark-extension-gfm-table (markdown.md) | Yes (de facto) |
| markdown-cjk-friendly | through micromark-extension-cjk-friendly ^2.0.2 | Proposed amendment to CommonMark | Emphasis next to Chinese, Japanese and Korean text (markdown.md) | Yes (proposal) |
| BCP 47 | RFC 5646 and RFC 4647 | IETF Best Current Practice | Language tags on text, deck languages and the app's locales: languageTag.ts, locale.ts (vocab.md, i18n.md) | Yes |
| Unicode CLDR plural rules | the browser's CLDR | Unicode Consortium | Plural messages, through Intl.PluralRules (i18n.md, policy.md) | Yes |
| ECMAScript Internationalization API | the browser's | Ecma International standard (ECMA-402) | Plural rules, number and date formats: i18n.tsx | Yes |
| Unicode Normalization Forms | UAX #15 | Unicode Standard Annex | Text in normalization form C in the deck library and in search (deck-library.md) | Yes |
| Unicode Bidirectional Algorithm | UAX #9 | Unicode Standard Annex | Text written right to left keeps its own direction: isolated between U+2068 and U+2069 in a message (langText.ts), and by the style sheet (i18n.md) | Yes |
| Unicode Text Segmentation | UAX #29, the runtime's | Unicode Standard Annex | Characters counted as grapheme clusters, through Intl.Segmenter, in the deck library's checks (deckLibrary.ts) | Yes |
| Unicode Collation Algorithm | UTS #10, the browser's | Unicode Technical Standard | Sorting and comparing cards and decks, through Intl.Collator (cardQuery.ts, deckTable.ts) | Yes |
| CSS Writing Modes | Level 4 | W3C Candidate Recommendation | direction and unicode-bidi: isolate for the right-to-left languages, under :lang() in style.css (i18n.md) | Yes |
| CSV | RFC 4180 | IETF RFC (Informational) | The answers a learner downloads from the statistics: answerCsv.ts (statistics.md) | Yes |
The web
| Standard | Version | Status | Where used | Open |
|---|---|---|---|---|
| OpenID Connect Core and OAuth 2.0 | 1.0; RFC 6749 | OpenID Foundation final specification; IETF RFC | Under Solid-OIDC (authentication.md) | Yes |
| DPoP | RFC 9449 | IETF RFC | Under Solid-OIDC: tokens bound to the browser's key | Yes |
| HTTP Semantics | RFC 9110 | IETF Internet Standard | Conditional writes to the pod and the guest's pod: If-Match the ETag read, If-None-Match: * to create (solidDeckRepository.ts, localPod.ts, migrations.md) | Yes |
| Web Linking | RFC 8288 | IETF RFC (Proposed Standard) | The Link header with rel="type" that finds the storage, walking up from the WebID (solidStorageGateway.ts, data-model.md) | Yes |
| UUID | RFC 9562, version 4 | IETF RFC (Proposed Standard) | The names of new decks and cards, deck-<uuid> and card-<uuid>, which end up in IRIs in the pod, and the guest's pod's ETags, through crypto.randomUUID() (solidDeckRepository.ts, appUseCases.ts) | Yes |
| Content Security Policy | Level 3 | W3C Working Draft | The policy meta tag in apps/web/index.html, checked by build.test.ts (markdown.md); and the docs' pages, whose policy docsSite.ts writes and checkPage holds them to (markdown.md) | Yes |
| Media Queries | Level 5 | W3C Working Draft | prefers-color-scheme for the theme and prefers-reduced-motion for motion (theme.tsx, motion.ts, style.css) | Yes |
| SVG | 1.1 (Second Edition) | W3C Recommendation | The docs' diagrams, drawn by the build into docs/diagrams/ and held by checkSvg to what Mermaid writes (diagrams.ts, markdown.md) | Yes |
| WOFF | 2.0 | W3C Recommendation | The app's self-hosted fonts (vendor-code.md), and Fredoka, embedded in each of the docs' diagrams (markdown.md) | Yes |
| IndexedDB | 3.0 | W3C specification | The guest's pod: indexedDbResourceStore.ts (guest-mode.md) | Yes |
| Web Storage | HTML Living Standard | WHATWG standard | Choices kept on the device (privacy.md) | Yes |
| Web Locks | W3C Working Draft | W3C Working Draft | Keeping tabs apart while the guest's pod is written or moved (guest-mode.md) | Yes |
| Open Graph | — | De facto, published by Meta | Link previews in apps/web/index.html | Yes (de facto) |
| Sitemaps | 0.9 | De facto, by the major search engines | sitemap.xml, written by the build (siteMap.ts) | Yes (de facto) |
| robots.txt | RFC 9309 | IETF RFC | robots.txt, written by the build (siteMap.ts) | Yes |
| WCAG | 2.2 | W3C Recommendation | The target, level AA, of the web app and the Studio, which the journeys check every screen they visit against with axe (accessibility.md); among it, the Studio's minimum target size and single-key shortcuts that can be turned off (studio.md) | Yes |
The app is built on the web platform as a whole: HTML, CSS, the DOM, Fetch and ECMAScript. The table lists a part of it only when the app's data or what the reader sees depends on it.
Licenses in deck metadata are named by their own IRIs, such as
https://creativecommons.org/licenses/by/4.0/, typed
dcterms:LicenseDocument (deck-library.md).
The project
| Standard | Version | Status | Where used | Open |
|---|---|---|---|---|
| REUSE | 3.3 | Specification by the Free Software Foundation Europe | Every file's copyright and license, in its SPDX header or in REUSE.toml, checked by reuse lint in CI (style.md, testing.md) | Yes |
| SPDX License List | current release, unpinned | Linux Foundation reference data | License identifiers in the files' SPDX-License-Identifier headers and in LICENSES/; dcterms:license <https://spdx.org/licenses/MIT> on the topics scheme (vocab.md) | Yes |
| publiccode.yml | publiccodeYmlVersion: "0" | Specification by Developers Italia, de facto | publiccode.yml, checked by the publiccode.yml parser in CI (testing.md) | Yes (de facto) |
| Citation File Format | 1.2.0 | Specification by its authors, de facto | CITATION.cff, its version and date set by each release (releasing.md) | Yes (de facto) |
| Semantic Versioning | 2.0.0 | Specification by its authors, de facto | The app's versions, from 1.0.0, each chosen by semantic-release from the commits' types (releasing.md) | Yes (de facto) |
| Conventional Commits | 1.0.0 | Specification by its authors, de facto | Every commit message from version 1.0.0 on, checked by commitlint in CI (CONTRIBUTING.md) | Yes (de facto) |
| Contributor Covenant | 2.1 | Code of conduct by its authors, de facto | CODE_OF_CONDUCT.md | Yes (de facto) |
| EditorConfig | — | De facto, by its authors | The whitespace the repository is written in: .editorconfig (style.md) | Yes (de facto) |
Drafts and de facto specifications
These are not formal standards. Each one is published openly and may be implemented by anyone, free of charge, so none of them stands in the way of others working with Solid Memo's code or data.
- The Solid specifications (the Solid Protocol, Solid-OIDC, the
Solid WebID Profile, WAC and ACP) are drafts of the W3C Solid
Community Group, not W3C Recommendations. The W3C
Linked Web Storage Working Group
is now taking them toward a Recommendation. They are what every
Solid server and app implements, and Solid Memo is tested against
several servers (testing.md). Solid Memo speaks
them through the Inrupt client libraries, and keeps that code in one
package,
@solid-memo/solid(vendor-code.md), so a change in the specifications is a change there. - The type indexes are an editor's draft. They are how Solid apps find each other's data today. Solid Memo uses them to find its instances and to tell other apps where its data is. An instance can also be attached by its URL, without a type index (discovery chain).
- schema.org is a vocabulary run by a W3C Community Group, with no formal standing, but it is the vocabulary search engines and learning tools read, and it is free to use (CC BY-SA 3.0). Its terms are extra types and properties beside Solid Memo's own (courses.md), so a tool that does not know schema.org still reads the data.
- GitHub Flavored Markdown is GitHub's own specification. Solid Memo takes only its pipe tables, which most Markdown tools read.
- markdown-cjk-friendly is a proposed amendment to CommonMark, by
one author. It changes only where emphasis starts and ends next to
Chinese, Japanese and Korean text. A CommonMark reader without it
still reads the text, and shows some asterisks as typed.
Both are fixed by the
sm:markdownconcept: a wider or different dialect would be a new concept (markdown.md), so text already written keeps its meaning. - SM-2 is an algorithm published by SuperMemo, not a standard. Its
description is public and anyone may implement it
(srs.md, policy.md). A review state says
which scheduler wrote it (
sm:scheduler, vocab.md), so another scheduler can be added beside it. - Open Graph and Sitemaps are de facto web conventions for link previews and search engines. Nothing in the app depends on them.
- publiccode.yml, the Citation File Format, Semantic Versioning, Conventional Commits, the Contributor Covenant and EditorConfig are de facto conventions for the repository and its metadata, each published by its authors for anyone to use. They describe the project to people and tools; nothing in the app or its data depends on them.