├── .dockerignore ├── .env.example ├── .eslintrc.js ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── adding-your-tooling.yml │ ├── bug_report.yml │ ├── config.yml │ ├── docs.yml │ └── feature_request.yml ├── dependabot.yml ├── pull_request_template.md └── workflows │ ├── README.md │ ├── build-preview.yml │ ├── ci.yml │ ├── codeql.yml │ ├── deploy-preview.yml │ ├── issue.yml │ ├── link-checker.yml │ ├── new-implementation.yml │ ├── pr-body-validation.yml │ ├── pr-dependencies.yml │ ├── production-deployment.yml │ ├── pull-request-target.yml │ ├── stale-issues-prs.yml │ ├── sync-contributors.yml │ ├── sync-project-roadmap.yml │ ├── trigger-update-landscape-tooling.yml │ └── validate-tooling-data.yml ├── .gitignore ├── .gitmodules ├── .husky └── pre-commit ├── .prettierignore ├── .prettierrc ├── .yarnrc.yml ├── .zshrc ├── CODEOWNERS ├── CONTRIBUTING-docs.md ├── CONTRIBUTING.md ├── Dockerfile ├── INSTALLATION.md ├── LICENSE ├── README.md ├── components.json ├── components ├── Accordion.tsx ├── AmbassadorsBanner.tsx ├── AmbassadorsCard.tsx ├── AmbassadorsList.tsx ├── CarbonsAds.tsx ├── Card.tsx ├── Code.tsx ├── DarkModeToggle.tsx ├── DocTable.tsx ├── DocsHelp.tsx ├── Faq.tsx ├── GettingStarted.tsx ├── Headlines.tsx ├── JsonEditor.tsx ├── Layout.tsx ├── NavigationButtons.tsx ├── Remember.tsx ├── ScrollButton.tsx ├── Sidebar.tsx ├── SiteLayout.tsx ├── StyledMarkdown.tsx ├── jsonSchemaLinks.ts └── ui │ ├── button.tsx │ └── checkbox.tsx ├── context.ts ├── cypress.config.ts ├── cypress ├── components │ ├── Accordian.cy.tsx │ ├── Card.cy.tsx │ ├── Code.cy.tsx │ ├── DarkModeToggle.cy.tsx │ ├── DocsHelp.cy.tsx │ ├── Faq.cy.tsx │ ├── Headlines.cy.tsx │ ├── JsonEditor.cy.tsx │ ├── Remember.cy.tsx │ └── ScrollButton.cy.tsx ├── e2e │ └── homepage.cy.ts ├── plugins │ └── mockNextRouterUtils.ts └── support │ ├── commands.ts │ ├── component-index.html │ ├── component.ts │ └── e2e.ts ├── data ├── ambassadors-contributions.json ├── ambassadors.json ├── case-studies.json ├── community-users.json ├── faq.json ├── keywords.yml ├── roadmap.json ├── tooling-data.schema.json ├── tooling-data.yaml └── use-cases.json ├── lib ├── calendarUtils.ts ├── config.ts ├── extractPathWithoutFragment.ts ├── getFindResultsByGlobalRegExp.ts ├── getPartsOfJson.ts ├── getScopesOfParsedJsonSchema.ts ├── getStaticMarkdownPaths.ts ├── getStaticMarkdownProps.ts ├── getStaticPropsFromSingleMarkdown.ts ├── slugifyMarkdownHeadline.ts ├── useSetUrlParam.ts └── utils.ts ├── makefile ├── next-env.d.ts ├── next-sitemap.config.js ├── next.config.js ├── nyc.config.js ├── package.json ├── pages ├── 404.page.tsx ├── [slug].page.tsx ├── _app.page.tsx ├── _document.page.tsx ├── ambassadors │ └── index.page.tsx ├── blog │ ├── generateRssFeed.tsx │ ├── index.page.tsx │ └── posts │ │ ├── 6-river-systems-case-study.md │ │ ├── GSOD-docs-project-2024.md │ │ ├── [slug].page.tsx │ │ ├── and-then-there-were-three.md │ │ ├── apidays-paris-2023-recap.md │ │ ├── apidays-paris-2024-recap.md │ │ ├── applicability-json-schema-fundamentals-part-1.md │ │ ├── bowtie-intro.md │ │ ├── bundling-json-schema-compound-documents.md │ │ ├── code-of-conduct-for-json-schema.md │ │ ├── cookpad-case-study-en.md │ │ ├── cookpad-case-study-jp.md │ │ ├── custom-annotations-will-continue.md │ │ ├── dynamicref-and-generics.md │ │ ├── fixing-json-schema-output.md │ │ ├── future-of-json-schema.md │ │ ├── get-started-with-json-schema-in-node-js.md │ │ ├── github-case-study.md │ │ ├── gsoc24-wrapup.md │ │ ├── hello-2023--hello-json-schema-community.md │ │ ├── hello-world-hello-postman.md │ │ ├── hyperborea.md │ │ ├── interpreting-output.md │ │ ├── joining-postman.md │ │ ├── json-schema-adopters.md │ │ ├── json-schema-ambassadors.md │ │ ├── json-schema-in-5-minutes.md │ │ ├── json-schema-joins-the-openjsf.md │ │ ├── manfred-case-study-es.md │ │ ├── manfred-case-study.md │ │ ├── modelling-inheritance.md │ │ ├── new-website.md │ │ ├── oracle-case-study.md │ │ ├── postman-case-study.md │ │ ├── remote-case-study.md │ │ ├── rxdb-case-study.md │ │ ├── schema-static-analysis.md │ │ ├── stable-json-schema.md │ │ ├── the-architectural-scope-of-json-schema.md │ │ ├── the-last-breaking-change.md │ │ ├── tyler-technologies-case-study.md │ │ ├── understanding-lexical-dynamic-scopes.md │ │ ├── validating-openapi-and-json-schema.md │ │ ├── w3c-wot-case-study.md │ │ └── website-analytics-snapshot-2023.md ├── community │ └── index.page.tsx ├── docs │ └── index.page.tsx ├── draft-05 │ ├── index.md │ ├── index.page.tsx │ └── release-notes.md ├── draft-06 │ ├── [slug].page.tsx │ ├── index.md │ ├── index.page.tsx │ ├── json-hyper-schema-release-notes.md │ └── json-schema-release-notes.md ├── draft-07 │ ├── [slug].page.tsx │ ├── index.md │ ├── index.page.tsx │ ├── json-hyper-schema-release-notes.md │ └── json-schema-release-notes.md ├── draft │ ├── 2019-09 │ │ ├── [slug].page.tsx │ │ ├── index.md │ │ ├── index.page.tsx │ │ └── release-notes.md │ └── 2020-12 │ │ ├── [slug].page.tsx │ │ ├── index.md │ │ ├── index.page.tsx │ │ └── release-notes.md ├── implementers │ ├── [slug].page.tsx │ ├── _index.md │ ├── index.page.tsx │ └── interfaces.md ├── index.page.tsx ├── learn │ ├── [slug].page.tsx │ ├── file-system.md │ ├── getting-started-step-by-step │ │ ├── getting-started-step-by-step.md │ │ ├── index.page.tsx │ │ └── next-steps.md │ ├── glossary.md │ ├── guides │ │ └── index.page.tsx │ ├── index.page.tsx │ ├── json-schema-examples.md │ └── miscellaneous-examples.md ├── md-style-guide.md ├── overview │ ├── [slug].page.tsx │ ├── case-studies │ │ └── index.page.tsx │ ├── code-of-conduct │ │ ├── _index.md │ │ └── index.page.tsx │ ├── faq │ │ └── index.page.tsx │ ├── pro-help │ │ └── index.page.tsx │ ├── roadmap │ │ └── index.page.tsx │ ├── similar-technologies.md │ ├── sponsors │ │ ├── _index.md │ │ └── index.page.tsx │ ├── use-cases │ │ └── index.page.tsx │ └── what-is-jsonschema.md ├── specification-links.md ├── specification.md ├── specification │ ├── json-hyper-schema │ │ ├── _index.md │ │ └── index.page.tsx │ ├── migration │ │ ├── _index.md │ │ └── index.page.tsx │ └── release-notes │ │ ├── _index.md │ │ └── index.page.tsx ├── tools │ ├── JSONSchemaTool.ts │ ├── components │ │ ├── GroupByMenu.tsx │ │ ├── SearchBar.tsx │ │ ├── Sidebar.tsx │ │ ├── ToolingDetailModal.tsx │ │ ├── ToolingTable.tsx │ │ └── ui │ │ │ ├── Badge.tsx │ │ │ ├── Checkbox.tsx │ │ │ ├── DropdownMenu.tsx │ │ │ ├── Radio.tsx │ │ │ └── Tag.tsx │ ├── hooks │ │ └── useToolsTransform.tsx │ ├── index.page.tsx │ └── lib │ │ ├── analytics.schema.json │ │ ├── getDistinctEntries.ts │ │ ├── postAnalytics.ts │ │ └── toTitleCase.ts ├── understanding-json-schema │ ├── [slug].page.tsx │ ├── _index.md │ ├── about.md │ ├── basics.md │ ├── conventions.md │ ├── credits.md │ ├── index.page.tsx │ ├── keywords │ │ └── index.page.tsx │ ├── reference │ │ ├── [slug].page.tsx │ │ ├── _index.md │ │ ├── annotations.md │ │ ├── array.md │ │ ├── boolean.md │ │ ├── combining.md │ │ ├── comments.md │ │ ├── composition.md │ │ ├── conditionals.md │ │ ├── const.md │ │ ├── enum.md │ │ ├── generic.md │ │ ├── index.page.tsx │ │ ├── metadata.md │ │ ├── non_json_data.md │ │ ├── null.md │ │ ├── numeric.md │ │ ├── object.md │ │ ├── regular_expressions.md │ │ ├── schema.md │ │ ├── string.md │ │ └── type.md │ └── structuring.md └── work-in-progress.md ├── postcss.config.js ├── public ├── UnderstandingJSONSchema.pdf ├── _headers ├── _redirects ├── data │ ├── getting-started-examples.json │ └── getting-started-examples │ │ ├── instances │ │ ├── conditional-ok.json │ │ ├── default-extended-ok.json │ │ ├── default-ko.json │ │ ├── default-ok.json │ │ ├── enumerated-ok.json │ │ └── regex-ok.json │ │ └── schemas │ │ ├── conditional.json │ │ ├── default-extended.json │ │ ├── default.json │ │ ├── enumerated.json │ │ └── regex.json ├── draft-00 │ ├── draft-zyp-json-schema-00.txt │ ├── hyper-schema │ ├── json-ref │ ├── links │ └── schema ├── draft-01 │ ├── draft-zyp-json-schema-01.html │ ├── hyper-schema │ ├── json-ref │ ├── links │ └── schema ├── draft-02 │ ├── draft-zyp-json-schema-02.txt │ ├── hyper-schema │ ├── json-ref │ ├── links │ └── schema ├── draft-03 │ ├── draft-zyp-json-schema-03.pdf │ ├── examples │ │ ├── address │ │ ├── calendar │ │ ├── card │ │ ├── geo │ │ └── interfaces │ ├── hyper-schema │ ├── json-ref │ ├── links │ └── schema ├── draft-04 │ ├── draft-fge-json-schema-validation-00.html │ ├── draft-luff-json-hyper-schema-00.html │ ├── draft-zyp-json-schema-04.html │ ├── hyper-schema │ ├── json-schema-core.html │ ├── json-schema-hyperschema.html │ ├── json-schema-validation.html │ ├── links │ └── schema ├── draft-05 │ ├── draft-wright-json-schema-00.pdf │ ├── draft-wright-json-schema-hyperschema-00.pdf │ └── draft-wright-json-schema-validation-00.pdf ├── draft-06 │ ├── draft-wright-json-schema-01.html │ ├── draft-wright-json-schema-hyperschema-01.html │ ├── draft-wright-json-schema-validation-01.html │ ├── hyper-schema │ ├── json-schema-core.html │ ├── json-schema-hypermedia.html │ ├── json-schema-validation.html │ ├── links │ └── schema ├── draft-07 │ ├── draft-handrews-json-schema-00.pdf │ ├── draft-handrews-json-schema-01.html │ ├── draft-handrews-json-schema-hyperschema-00.html │ ├── draft-handrews-json-schema-hyperschema-01.html │ ├── draft-handrews-json-schema-validation-00.pdf │ ├── draft-handrews-json-schema-validation-01.html │ ├── draft-handrews-relative-json-pointer-00.html │ ├── draft-handrews-relative-json-pointer-01.html │ ├── hyper-schema │ ├── hyper-schema-output │ ├── json-schema-core.html │ ├── json-schema-hypermedia.html │ ├── json-schema-validation.html │ ├── links │ ├── relative-json-pointer.html │ └── schema ├── draft │ ├── 2019-09 │ │ ├── draft-handrews-json-schema-02.html │ │ ├── draft-handrews-json-schema-hyperschema-02.html │ │ ├── draft-handrews-json-schema-validation-02.html │ │ ├── draft-handrews-relative-json-pointer-02.html │ │ ├── hyper-schema │ │ ├── json-schema-core.html │ │ ├── json-schema-hypermedia.html │ │ ├── json-schema-validation.html │ │ ├── links │ │ ├── meta │ │ │ ├── applicator │ │ │ ├── content │ │ │ ├── core │ │ │ ├── format │ │ │ ├── hyper-schema │ │ │ ├── meta-data │ │ │ └── validation │ │ ├── output │ │ │ ├── hyper-schema │ │ │ ├── schema │ │ │ └── verbose-example │ │ └── schema │ └── 2020-12 │ │ ├── draft-bhutton-json-schema-00.html │ │ ├── draft-bhutton-json-schema-01.html │ │ ├── draft-bhutton-json-schema-validation-00.html │ │ ├── draft-bhutton-json-schema-validation-01.html │ │ ├── draft-bhutton-relative-json-pointer-00.html │ │ ├── hyper-schema │ │ ├── json-schema-core.html │ │ ├── json-schema-validation.html │ │ ├── links │ │ ├── meta │ │ ├── applicator │ │ ├── content │ │ ├── core │ │ ├── format-annotation │ │ ├── format-assertion │ │ ├── hyper-schema │ │ ├── meta-data │ │ ├── unevaluated │ │ └── validation │ │ ├── output │ │ ├── schema │ │ └── verbose-example │ │ ├── relative-json-pointer.html │ │ └── schema ├── favicon-lightblue.ico ├── favicon-white.ico ├── favicon.ico ├── icons │ ├── arrow.svg │ ├── book-dark.svg │ ├── book.svg │ ├── bulb.svg │ ├── bulb2.svg │ ├── cancel-dark.svg │ ├── cancel.svg │ ├── checkmark.svg │ ├── clipboard-dark.svg │ ├── clipboard.svg │ ├── close.svg │ ├── compass-dark.svg │ ├── compass.svg │ ├── contribute.svg │ ├── copied.svg │ ├── copy.svg │ ├── dialect.svg │ ├── environment.svg │ ├── external-link-black.svg │ ├── external-link.svg │ ├── eye-dark.svg │ ├── eye.svg │ ├── filter.svg │ ├── grad-cap-dark.svg │ ├── grad-cap.svg │ ├── green-tick.svg │ ├── info-blue.svg │ ├── info-yellow.svg │ ├── language.svg │ ├── left-arrow.svg │ ├── license.svg │ ├── list.svg │ ├── menu.svg │ ├── moon.svg │ ├── outlink.svg │ ├── red-cross.svg │ ├── roadmap.svg │ ├── rss.svg │ ├── star.svg │ ├── sun.svg │ ├── theme-switch.svg │ ├── toc-menu.svg │ ├── tooling.svg │ ├── warning.svg │ └── x-mark.svg ├── illustrations │ └── schema.svg ├── img │ ├── ambassadors │ │ ├── Andreas Eberhart.jpg │ │ ├── Ege Korkan.jpg │ │ ├── Esther Okafor.jpg │ │ └── illustrations │ │ │ ├── case-studies.png │ │ │ ├── content.png │ │ │ ├── contributing.png │ │ │ ├── ecosystem.png │ │ │ ├── speaker.png │ │ │ └── video.png │ ├── avatars │ │ ├── benhutton.webp │ │ ├── benjagm.webp │ │ ├── blessing.webp │ │ ├── daniel.png │ │ ├── dhairya.webp │ │ ├── gregsdennis.webp │ │ ├── jasondesrosiers.jpeg │ │ ├── julian.webp │ │ ├── jviotti.webp │ │ ├── loiclefevre.webp │ │ ├── melinda.webp │ │ ├── mikeralphson.webp │ │ ├── onyedikachi.jpg │ │ ├── simonplenderleith.webp │ │ ├── valeria.webp │ │ ├── yanick.jpg │ │ └── yeray.webp │ ├── community │ │ └── ambassadors.png │ ├── event │ │ ├── Json-Schema-Blog.png │ │ └── meet.png │ ├── home-page │ │ ├── community-illustration.svg │ │ ├── community.svg │ │ ├── cover-1.jpeg │ │ ├── cover-2.jpeg │ │ ├── slack-json-schema.png │ │ └── slack.png │ ├── json_schema.svg │ ├── logos │ │ ├── 6river-logo-white.svg │ │ ├── 6river-logo.svg │ │ ├── Postman_logo-grey.svg │ │ ├── Slack-mark.svg │ │ ├── algolia-logo-white.png │ │ ├── bowtie.svg │ │ ├── cookpad-logo.png │ │ ├── dark-mode │ │ │ ├── airbnb_white.png │ │ │ ├── apideck_white.svg │ │ │ ├── asyncapi_white.svg │ │ │ ├── common-room_white.svg │ │ │ ├── llc_white.svg │ │ │ └── slack_white.svg │ │ ├── github-logo-white.svg │ │ ├── github-logo.svg │ │ ├── github_logo-white.svg │ │ ├── globe-white.svg │ │ ├── icons8-linkedin-2.svg │ │ ├── icons8-youtube.svg │ │ ├── logo-blue.svg │ │ ├── logo-white.svg │ │ ├── manfred-color.svg │ │ ├── netlify-white-logo.png │ │ ├── openjs_foundation-logo-horizontal-color.svg │ │ ├── openjs_foundation-logo-horizontal-white.svg │ │ ├── orbit-logo-white.png │ │ ├── postman_logo-white.svg │ │ ├── remote-logo.png │ │ ├── rss.svg │ │ ├── rxdb-logo.svg │ │ ├── slack_logo_small-white.svg │ │ ├── speaker-white.svg │ │ ├── sponsors │ │ │ ├── airbnb-logo.png │ │ │ ├── anon-black.png │ │ │ ├── anon-white.png │ │ │ ├── apideck-logo.png │ │ │ ├── apideck-white.svg │ │ │ ├── apideck.svg │ │ │ ├── asyncapi-logo-dark.svg │ │ │ ├── copycopter-white.png │ │ │ ├── copycopter.png │ │ │ ├── endjin-logo.svg │ │ │ ├── it_flashcards-white.svg │ │ │ ├── it_flashcards.svg │ │ │ ├── llc-logo.svg │ │ │ ├── n8n-logo-dark.svg │ │ │ ├── n8n-logo-white.svg │ │ │ ├── octue-black.svg │ │ │ ├── octue-white.svg │ │ │ ├── postman_logo-orange.svg │ │ │ ├── retool-logo.svg │ │ │ ├── route4me-logo-dark.svg │ │ │ ├── route4me-logo-white.svg │ │ │ ├── rxdb.svg │ │ │ ├── stoplight-logo.svg │ │ │ ├── vps-server-logo.svg │ │ │ ├── wda-dark.svg │ │ │ └── wda.svg │ │ ├── supported │ │ │ ├── common-room.svg │ │ │ ├── netlify-logo.png │ │ │ ├── new-orbit-logo-color.svg │ │ │ ├── orbit-logo-color.png │ │ │ └── slack-logo.svg │ │ ├── toast_logo-white.svg │ │ ├── toast_logo.svg │ │ ├── tyler-tech-logo.svg │ │ ├── usedby │ │ │ ├── github-white.png │ │ │ ├── microsoft-white.png │ │ │ ├── postman-white.png │ │ │ └── zapier-logo_white.png │ │ ├── wot-logo.png │ │ └── x-twitter.svg │ ├── media-keywords.png │ ├── posts │ │ ├── 2021 │ │ │ ├── bundling-json-schema-compound-documents │ │ │ │ └── cover.webp │ │ │ ├── code-of-conduct-for-json-schema │ │ │ │ └── cover.webp │ │ │ ├── cookpad-case-study │ │ │ │ ├── cover.webp │ │ │ │ ├── fridge.webp │ │ │ │ └── office.webp │ │ │ └── validating-openapi-and-json-schema │ │ │ │ └── cover.webp │ │ ├── 2022 │ │ │ ├── and-then-there-were-three │ │ │ │ └── cover.webp │ │ │ ├── bowtie-intro │ │ │ │ └── cover.webp │ │ │ ├── dynamicref-and-generics │ │ │ │ └── cover.webp │ │ │ ├── fixing-json-schema-output │ │ │ │ └── cover.webp │ │ │ ├── fundamentals-part-1 │ │ │ │ ├── cover.webp │ │ │ │ └── tt │ │ │ │ │ ├── XOR1.webp │ │ │ │ │ ├── XOR2.webp │ │ │ │ │ ├── allOf.webp │ │ │ │ │ ├── anyOf.webp │ │ │ │ │ └── oneOf.webp │ │ │ ├── get-started-with-json-schema-in-node-js │ │ │ │ └── cover.webp │ │ │ ├── hello-world-hello-postman │ │ │ │ └── cover.webp │ │ │ ├── hyperborea │ │ │ │ └── cover.jpg │ │ │ ├── joining-postman │ │ │ │ └── baldy-hs-web.webp │ │ │ ├── json-schema-in-5-minutes │ │ │ │ └── cover.webp │ │ │ ├── json-schema-joins-the-openjsf │ │ │ │ └── cover.webp │ │ │ ├── stability │ │ │ │ └── arches.webp │ │ │ ├── the-architectural-scope-of-json-schema │ │ │ │ └── cover.webp │ │ │ ├── the-last-breaking-change │ │ │ │ └── cover.webp │ │ │ ├── tyler-technologies-case-study │ │ │ │ ├── 2187563_0051.webp │ │ │ │ ├── 2187563_0278.webp │ │ │ │ └── cover.webp │ │ │ └── w3c-wot-case-study │ │ │ │ ├── cover.webp │ │ │ │ └── wot-examples.webp │ │ ├── 2023 │ │ │ ├── 6-river-systems-case-study │ │ │ │ ├── chuck.webp │ │ │ │ ├── cover.webp │ │ │ │ └── manage.webp │ │ │ ├── apidays-paris-2023-recap │ │ │ │ ├── apidays-paris-2023.png │ │ │ │ └── booth-apidays.jpeg │ │ │ ├── custom-annotations-will-continue │ │ │ │ └── cover.webp │ │ │ ├── github-case-study │ │ │ │ ├── building.webp │ │ │ │ ├── cover.webp │ │ │ │ └── working.webp │ │ │ ├── hello-2023--hello-json-schema-community │ │ │ │ └── jai.webp │ │ │ ├── interpreting-output │ │ │ │ └── cover.webp │ │ │ ├── json-schema-adopters │ │ │ │ ├── join-button.png │ │ │ │ └── patrick-tomasso.jpg │ │ │ ├── modelling-inheritance │ │ │ │ └── cover.webp │ │ │ ├── new-website │ │ │ │ ├── cover.webp │ │ │ │ └── site-2016.webp │ │ │ ├── postman-case-study │ │ │ │ └── cover.webp │ │ │ ├── remote-case-study │ │ │ │ ├── Remote-Contract details.webp │ │ │ │ ├── Remote-Form builder.webp │ │ │ │ ├── blog-image.webp │ │ │ │ └── cover.webp │ │ │ ├── schema-static-analysis │ │ │ │ └── cover.webp │ │ │ └── website-analytics-snapshot-2023 │ │ │ │ ├── Screenshot 2023-07-21 at 12.12.31.webp │ │ │ │ ├── Screenshot 2023-07-31 at 10.39.20.webp │ │ │ │ └── cover.webp │ │ ├── 2024 │ │ │ ├── GSOD-docs-project-2024 │ │ │ │ └── duy-pham.webp │ │ │ ├── apidays-paris-2024-recap │ │ │ │ ├── json-schema-conference.png │ │ │ │ ├── json-schema-team.jpg │ │ │ │ └── loic-lefevre-talk.jpg │ │ │ ├── json-schema-ambassadors │ │ │ │ └── cover.webp │ │ │ ├── manfred-case-study │ │ │ │ ├── MAC_Export.webp │ │ │ │ ├── MAC_Structure.webp │ │ │ │ ├── background.webp │ │ │ │ ├── manfred_team.webp │ │ │ │ └── period.webp │ │ │ └── understanding-lexical-dynamic-scopes │ │ │ │ ├── cover.webp │ │ │ │ ├── directed-graph.webp │ │ │ │ ├── dynamic-scope-1.webp │ │ │ │ ├── dynamic-scope-2.webp │ │ │ │ ├── dynamic-scope-internal-align.webp │ │ │ │ ├── dynamic-scope-pop-1.webp │ │ │ │ ├── dynamic-scope-pop-2.webp │ │ │ │ ├── dynamic-scope-pop-3.webp │ │ │ │ ├── dynamic-scope-pop-4.webp │ │ │ │ ├── dynamic-scope-pop-5.webp │ │ │ │ ├── dynamic-scope-ref-remote-1.webp │ │ │ │ ├── dynamic-scope-ref-remote-2.webp │ │ │ │ ├── dynamic-scope-ref-remote-3.webp │ │ │ │ ├── dynamic-scope-ref-remote-4.webp │ │ │ │ ├── lexical-scope-1.webp │ │ │ │ ├── lexical-scope-2.webp │ │ │ │ ├── lexical-scope-3.webp │ │ │ │ ├── lexical-scope-ref-local.webp │ │ │ │ ├── lexical-scope-ref-remote-1.webp │ │ │ │ ├── lexical-scope-ref-remote-2.webp │ │ │ │ ├── lexical-scope-ref-remote-3.webp │ │ │ │ ├── scopes-multiple-ids.webp │ │ │ │ ├── scopes-schema-resources.webp │ │ │ │ └── scopes-static-anchors.webp │ │ └── 2025 │ │ │ ├── gsoc24 │ │ │ └── gsoc24-banner-main.png │ │ │ ├── oracle-case-study │ │ │ ├── banner.webp │ │ │ ├── blog_frontpage.webp │ │ │ ├── converged_database.webp │ │ │ ├── form.webp │ │ │ └── json-schema-form.webp │ │ │ ├── rxdb-case-study │ │ │ └── cover.jpeg │ │ │ └── stable-json-schema │ │ │ └── mt-taranaki.webp │ ├── scroll.svg │ ├── stage-bg.svg │ ├── tools │ │ ├── adding_your_tool.png │ │ ├── logos │ │ │ ├── json-everything.svg │ │ │ └── justinrainbow-json-schema.png │ │ └── try_bowtie.png │ └── what-is-json-schema.png ├── logo-blue.svg ├── logo-white.svg ├── logo.svg └── understanding │ ├── fail.png │ ├── fail.svg │ ├── jsonschema.css │ ├── jsonschema.js │ ├── logo.ico │ ├── logo.pdf │ ├── logo.png │ ├── octopus.png │ ├── octopus.svg │ ├── pass.png │ ├── pass.svg │ └── schema.png ├── store.ts ├── styles └── globals.css ├── svgr.d.ts ├── tailwind.config.js ├── tsconfig.json └── yarn.lock /.dockerignore: -------------------------------------------------------------------------------- 1 | # Include any files or directories that you don't want to be copied to your 2 | # container here (e.g., local build artifacts, temporary files, etc.). 3 | # 4 | # For more help, visit the .dockerignore file reference guide at 5 | # https://docs.docker.com/go/build-context-dockerignore/ 6 | 7 | **/.classpath 8 | **/.dockerignore 9 | **/.env 10 | **/.git 11 | **/.gitignore 12 | **/.project 13 | **/.settings 14 | **/.toolstarget 15 | **/.vs 16 | **/.vscode 17 | **/.next 18 | **/.cache 19 | **/*.*proj.user 20 | **/*.dbmdl 21 | **/*.jfm 22 | **/charts 23 | **/docker-compose* 24 | **/compose* 25 | **/Dockerfile* 26 | **/node_modules 27 | **/npm-debug.log 28 | **/obj 29 | **/secrets.dev.yaml 30 | **/values.dev.yaml 31 | **/build 32 | **/dist 33 | LICENSE 34 | README.md 35 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_ALGOLIA_API_KEY= 2 | NEXT_PUBLIC_ALGOLIA_APP_ID= -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | 3 | *.sh text eol=lf -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | contact_links: 3 | - name: Have any issues to discuss regarding JSON Schema? 4 | url: https://json-schema.org/slack 5 | about: Join us on Slack and meet members and contributors. -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/docs.yml: -------------------------------------------------------------------------------- 1 | name: 📝 Documentation 2 | description: Propose changes and improvements to JSON Schema Docs. 3 | labels: ["📝 Documentation", "Status: Triage"] 4 | title: "[📝 Docs]: " 5 | projects: "json-schema-org/16" 6 | body: 7 | - type: markdown 8 | attributes: 9 | value: | 10 | Thank you for contributing to JSON Schema Docs! 📑 👩🏻‍💻 We appreciate your feedback, ideas, and contributions. 11 | 12 | Before filing this issue, please make sure to check if there's already a similar issue open in our [JSON Schema Docs Board](https://github.com/orgs/json-schema-org/projects/16). 13 | 14 | - type: textarea 15 | id: reason-context 16 | attributes: 17 | label: What Docs changes are you proposing? 18 | description: Why do the Docs need this improvement? What is the motivation for this change? How will this change benefit the community? 19 | placeholder: "I would like to contribute to JSON Schema Docs 📑 by..." 20 | validations: 21 | required: true 22 | - type: checkboxes 23 | id: terms 24 | attributes: 25 | label: Code of Conduct 26 | description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/json-schema-org/.github/blob/main/CODE_OF_CONDUCT.md) 27 | options: 28 | - label: I agree to follow this project's Code of Conduct 29 | required: true 30 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | name: ⭐️ Feature request 2 | description: Suggest an idea for this project 3 | title: "✨ Enhancement: " 4 | labels: ["✨ Enhancement", "Status: Triage"] 5 | projects: "json-schema-org/11" 6 | body: 7 | - type: textarea 8 | attributes: 9 | label: Is your feature request related to a problem? Please describe 10 | description: A clear and concise description of what the problem is 11 | validations: 12 | required: true 13 | - type: textarea 14 | attributes: 15 | label: Describe the solution you'd like 16 | description: A clear and concise description of what you want to happen 17 | validations: 18 | required: true 19 | - type: textarea 20 | attributes: 21 | label: Describe alternatives you've considered 22 | description: A clear and concise description of any alternative solutions or features you've considered 23 | validations: 24 | required: false 25 | - type: textarea 26 | attributes: 27 | label: Additional context 28 | description: Add any other context about the problem here 29 | validations: 30 | required: false 31 | - type: dropdown 32 | attributes: 33 | label: Are you working on this? 34 | options: 35 | - 'Yes' 36 | - 'No' 37 | validations: 38 | required: true -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # configuration file for Dependabot 2 | version: 2 3 | updates: 4 | # Configuration for yarn package ecosystem 5 | - package-ecosystem: "npm" 6 | 7 | # Directory containing the package manifests (e.g. yarn.lock) 8 | directory: "/" 9 | 10 | # Schedule for dependency updates 11 | schedule: 12 | interval: "weekly" 13 | 14 | # Customize commit messages for dependency updates 15 | commit-message: 16 | prefix: "chore(deps):" 17 | 18 | # Configuration for GitHub Actions dependencies 19 | - package-ecosystem: "github-actions" 20 | 21 | # Workflow files stored in the default location of `.github/workflows`. (You don't need to specify `/.github/workflows` for `directory`. You can use `directory: "/"`.) 22 | directory: "/" 23 | 24 | # Schedule for dependency updates 25 | schedule: 26 | interval: "weekly" 27 | 28 | # Customize commit messages for dependency updates 29 | commit-message: 30 | prefix: "chore(deps):" 31 | -------------------------------------------------------------------------------- /.github/workflows/codeql.yml: -------------------------------------------------------------------------------- 1 | name: "CodeQL Code Scanning" 2 | 3 | on: 4 | push: 5 | branches: [ "main" ] 6 | pull_request: 7 | branches: [ "main" ] 8 | 9 | jobs: 10 | analyze: 11 | name: Analyze (${{ matrix.language }}) 12 | runs-on: 'ubuntu-latest' 13 | permissions: 14 | security-events: write 15 | 16 | strategy: 17 | fail-fast: false 18 | matrix: 19 | include: 20 | - language: javascript-typescript 21 | build-mode: none 22 | 23 | steps: 24 | - name: Checkout repository 25 | uses: actions/checkout@v4 26 | 27 | # Initializes the CodeQL tools for scanning. 28 | - name: Initialize CodeQL 29 | uses: github/codeql-action/init@v3 30 | with: 31 | languages: ${{ matrix.language }} 32 | build-mode: ${{ matrix.build-mode }} 33 | 34 | # Perform the CodeQL Analysis 35 | - name: Perform CodeQL Analysis 36 | uses: github/codeql-action/analyze@v3 37 | with: 38 | category: "/language:${{matrix.language}}" 39 | -------------------------------------------------------------------------------- /.github/workflows/deploy-preview.yml: -------------------------------------------------------------------------------- 1 | name: Upload Preview Deployment 2 | on: 3 | workflow_run: 4 | workflows: ['Build Preview Deployment'] 5 | types: 6 | - completed 7 | 8 | permissions: 9 | actions: read 10 | deployments: write 11 | contents: read 12 | pull-requests: write 13 | 14 | jobs: 15 | deploy-preview: 16 | runs-on: ubuntu-latest 17 | if: ${{ github.event.workflow_run.conclusion == 'success' }} 18 | name: Deploy Preview to Cloudflare Pages 19 | steps: 20 | # Downloads the build directory from the previous workflow 21 | - name: Download build artifact 22 | uses: actions/download-artifact@v4 23 | id: preview-build-artifact 24 | with: 25 | name: preview-build 26 | path: build 27 | github-token: ${{ secrets.GITHUB_TOKEN }} 28 | run-id: ${{ github.event.workflow_run.id }} 29 | 30 | - name: Deploy to Cloudflare Pages 31 | uses: AdrianGonz97/refined-cf-pages-action@v1 32 | with: 33 | apiToken: ${{ secrets.CF_API_TOKEN }} 34 | accountId: ${{ secrets.CF_ACCOUNT_ID }} 35 | githubToken: ${{ secrets.GITHUB_TOKEN }} 36 | projectName: ${{ vars.CF_PROJECT_NAME }} 37 | directory: ${{ steps.preview-build-artifact.outputs.download-path }} 38 | deploymentName: Preview -------------------------------------------------------------------------------- /.github/workflows/issue.yml: -------------------------------------------------------------------------------- 1 | name: Issue Workflow 2 | 3 | on: 4 | issues: 5 | types: ['opened'] 6 | 7 | jobs: 8 | issue-labeler: 9 | name: Adding Label to Issue 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Auto Label Issue 13 | uses: Renato66/auto-label@v3.1.1 14 | with: 15 | repo-token: ${{ secrets.GITHUB_TOKEN }} 16 | ignore-comments: true 17 | default-labels: '["Status: Triage"]' 18 | 19 | issue-greeting: 20 | name: Greeting Message to User 21 | runs-on: ubuntu-latest 22 | steps: 23 | - name: Send Greeting Message 24 | uses: actions/first-interaction@v1 25 | with: 26 | repo-token: ${{ secrets.GITHUB_TOKEN }} 27 | issue-message: | 28 | Welcome to the [JSON Schema](https://json-schema.org/) Community. We are so excited you are here! Thanks a lot for reporting your first issue!! 🎉🎉 Please make sure to take a look at our [contributors guide](https://github.com/json-schema-org/website/blob/main/CONTRIBUTING.md) if you plan on opening a pull request. 29 | For more details, check out the [README.md](https://github.com/json-schema-org/website?tab=readme-ov-file#-welcome-to-the-json-schema-website) file. 30 | -------------------------------------------------------------------------------- /.github/workflows/pr-dependencies.yml: -------------------------------------------------------------------------------- 1 | name: Check PR Dependencies 2 | 3 | on: pull_request 4 | 5 | jobs: 6 | check_dependencies: 7 | runs-on: ubuntu-latest 8 | name: Check Dependencies 9 | steps: 10 | - uses: gregsdennis/dependencies-action@main 11 | env: 12 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} -------------------------------------------------------------------------------- /.github/workflows/trigger-update-landscape-tooling.yml: -------------------------------------------------------------------------------- 1 | name: Trigger Update Landscape Tooling Workflow 2 | 3 | on: 4 | push: 5 | paths: 6 | - data/tooling-data.yaml 7 | branches: 8 | - main 9 | workflow_dispatch: 10 | 11 | 12 | jobs: 13 | trigger-workflow: 14 | runs-on: ubuntu-latest 15 | 16 | steps: 17 | - name: Create workflow token 18 | id: app-token 19 | uses: actions/create-github-app-token@v1 20 | with: 21 | app-id: ${{ vars.APP_ID }} 22 | private-key: ${{ secrets.PRIVATE_KEY }} 23 | 24 | - name: Trigger update landscape repository workflow 25 | env: 26 | AUTH_TOKEN: ${{ steps.app-token.output.token }} 27 | run: | 28 | curl -L \ 29 | -X POST \ 30 | -H "Accept: application/vnd.github.v3+json" \ 31 | -H "Authorization: Bearer $AUTH_TOKEN" \ 32 | https://api.github.com/repos/json-schema-org/landscape/actions/workflows/update-landscape-tooling.yml/dispatches \ 33 | -d '{"ref":"main"}' 34 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # project specific 4 | /public/rss 5 | 6 | # dependencies 7 | /node_modules 8 | /.pnp 9 | .pnp.js 10 | 11 | # testing 12 | /coverage 13 | /.nyc_output 14 | coverage.json 15 | 16 | # next.js 17 | /.next/ 18 | /out/ 19 | 20 | # production 21 | /build 22 | 23 | # misc 24 | .DS_Store 25 | *.pem 26 | 27 | # debug 28 | npm-debug.log* 29 | yarn-debug.log* 30 | yarn-error.log* 31 | .pnpm-debug.log* 32 | 33 | # local env files 34 | .env.local 35 | .env.development.local 36 | .env.test.local 37 | .env.production.local 38 | .env 39 | 40 | # vercel 41 | .vercel 42 | 43 | # typescript 44 | *.tsbuildinfo 45 | 46 | /.idea 47 | 48 | 49 | .vscode/* 50 | !.vscode/launch.json 51 | 52 | .idea/* 53 | 54 | # yarn 55 | .pnp.* 56 | .yarn/* 57 | !.yarn/patches 58 | !.yarn/plugins 59 | !.yarn/releases 60 | !.yarn/sdks 61 | !.yarn/versions 62 | 63 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | echo 'Performing code styling, testing, and building processes before committing' 2 | 3 | # Check ESLint Standards 4 | yarn run lint || 5 | ( 6 | echo 'ESLint Check Failed. Run yarn run lint:fix, Review the listed issues, make the required adjustments, add the changes, and attempt to commit again.' 7 | false; 8 | ) 9 | 10 | # Check tsconfig standards 11 | yarn run typecheck || 12 | ( 13 | echo 'The TypeScript configuration check has failed. Address the outlined issues above.' 14 | false; 15 | ) 16 | 17 | # If everything passes... Now we can commit 18 | echo 'The code appears to meet the required standards. Proceeding with the build process.' 19 | 20 | yarn run build || 21 | ( 22 | echo 'The Next.js build process encountered errors. Refer to the error messages above for troubleshooting steps.' 23 | false; 24 | ) 25 | 26 | # If everything passes... Now we can commit 27 | echo 'The code has been successfully validated and built. Proceeding with the commit process...' -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .github 3 | _includes -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "singleQuote": true, 4 | "trailingComma": "all", 5 | "jsxSingleQuote": true, 6 | "arrowParens": "always", 7 | "tabWidth": 2, 8 | "useTabs": false, 9 | "endOfLine": "auto" 10 | } 11 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | -------------------------------------------------------------------------------- /.zshrc: -------------------------------------------------------------------------------- 1 | # Homebrew 2 | export PATH=/opt/homebrew/bin:$PATH 3 | export NVM_DIR=~/.nvm 4 | source $(brew --prefix nvm)/nvm.sh 5 | -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | ############################################################## 2 | # 3 | # List of approvers/reviewers for JSON Schema website 4 | # 5 | ############################################################## 6 | # 7 | # Get in touch with us via the JSON Schema Community 8 | # https://json-schema.org/#community 9 | # 10 | # 11 | # Learn about CODEOWNERS file format: 12 | # https://help.github.com/en/articles/about-code-owners 13 | # 14 | 15 | # This group will be the default group approving/reviewing PRs 16 | * @json-schema-org/web-team -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:20-alpine 2 | 3 | WORKDIR /app 4 | 5 | COPY package*.json ./ 6 | 7 | RUN apk add --update git && \ 8 | git init && \ 9 | git submodule init && \ 10 | git submodule update && \ 11 | yarn 12 | 13 | COPY . . 14 | 15 | EXPOSE 3000 16 | 17 | CMD yarn dev 18 | -------------------------------------------------------------------------------- /components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "new-york", 4 | "rsc": false, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "", 8 | "css": "src/styles/globals.css", 9 | "baseColor": "neutral", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "utils": "@/lib/utils", 16 | "ui": "@/components/ui", 17 | "lib": "@/lib", 18 | "hooks": "@/hooks" 19 | }, 20 | "iconLibrary": "lucide" 21 | } 22 | -------------------------------------------------------------------------------- /components/AmbassadorsList.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | interface AmbassadorsLink { 4 | title: string; 5 | icon: string; 6 | details: string; 7 | } 8 | 9 | interface AmbassadorsListProps { 10 | ambassadorList: { 11 | contents: AmbassadorsLink[]; 12 | }; 13 | } 14 | 15 | const AmbassadorList = ({ ambassadorList }: AmbassadorsListProps) => { 16 | return ( 17 | 38 | ); 39 | }; 40 | 41 | export default AmbassadorList; 42 | -------------------------------------------------------------------------------- /components/Code.tsx: -------------------------------------------------------------------------------- 1 | import React, { useContext } from 'react'; 2 | import classnames from 'classnames'; 3 | import { BlockContext, BlockContextValue } from '~/context'; 4 | 5 | export default function Code({ children }: { children: any }) { 6 | // eslint-disable-next-line react-hooks/rules-of-hooks 7 | const blockContext = useContext(BlockContext); 8 | return ( 9 | 17 | {children} 18 | 19 | ); 20 | } 21 | -------------------------------------------------------------------------------- /components/Faq.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import faqData from '../data/faq.json'; 3 | import Accordion from '~/components/Accordion'; 4 | 5 | export default function Faq({ category }: { category: string }) { 6 | const filteredFAQs = faqData.filter((item) => item.category === category); 7 | 8 | return ( 9 |
10 |
11 |

12 | {category.toUpperCase()} 13 |

14 | 15 |
16 |
17 | ); 18 | } 19 | -------------------------------------------------------------------------------- /components/ScrollButton.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from 'react'; 2 | import Image from 'next/image'; 3 | 4 | export default function ScrollButton() { 5 | const [backToTopButton, setBackToTopButton] = useState(false); 6 | 7 | useEffect(() => { 8 | const handleScroll = () => { 9 | // Check the scroll position 10 | setBackToTopButton(window.scrollY > 150); 11 | }; 12 | 13 | // Add scroll event listener to window 14 | window.addEventListener('scroll', handleScroll); 15 | 16 | // Cleanup function to remove the event listener when the component unmounts 17 | /* istanbul ignore next : can't test cleanup function */ 18 | return () => window.removeEventListener('scroll', handleScroll); 19 | }, []); 20 | 21 | const scrollUp = () => { 22 | window.scrollTo({ 23 | top: 1, 24 | left: 0, 25 | }); 26 | }; 27 | 28 | return ( 29 |
30 | {backToTopButton && ( 31 | 45 | )} 46 |
47 | ); 48 | } 49 | -------------------------------------------------------------------------------- /components/SiteLayout.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Layout from '../components/Layout'; 3 | 4 | type SiteLayoutProps = { 5 | children?: React.ReactNode; 6 | isDropdown?: boolean; 7 | }; 8 | 9 | export const SiteLayout: React.FC = ({ 10 | children, 11 | }): JSX.Element => { 12 | return {children}; 13 | }; 14 | 15 | export const getLayout = ( 16 | page: React.ReactNode, 17 | props?: SiteLayoutProps, 18 | ): JSX.Element => { 19 | return {page}; 20 | }; 21 | -------------------------------------------------------------------------------- /components/ui/checkbox.tsx: -------------------------------------------------------------------------------- 1 | /* eslint-disable linebreak-style */ 2 | import * as React from 'react'; 3 | 4 | import * as CheckboxPrimitive from '@radix-ui/react-checkbox'; 5 | 6 | import { CheckIcon } from 'lucide-react'; 7 | 8 | import { cn } from '@/lib/utils'; 9 | 10 | function Checkbox({ 11 | // eslint-disable-next-line react/prop-types 12 | className, 13 | 14 | ...props 15 | }: React.ComponentProps) { 16 | return ( 17 | 26 | 30 | 31 | 32 | 33 | ); 34 | } 35 | 36 | export { Checkbox }; 37 | -------------------------------------------------------------------------------- /context.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export enum BlockContextValue { 4 | Information, 5 | CodeBlock, 6 | Details, 7 | } 8 | 9 | export const SectionContext = React.createContext< 10 | | null 11 | | 'learn' 12 | | 'docs' 13 | | 'implementers' 14 | | 'tools' 15 | | 'implementations' 16 | | 'blog' 17 | | 'community' 18 | | 'specification' 19 | | 'overview' 20 | | 'getting-started' 21 | | 'reference' 22 | | 'roadmap' 23 | | 'ambassador' 24 | | 'pro-help' 25 | >(null); 26 | export const BlockContext = React.createContext(null); 27 | export const FullMarkdownContext = React.createContext(null); 28 | -------------------------------------------------------------------------------- /cypress.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'cypress'; 2 | 3 | export default defineConfig({ 4 | component: { 5 | devServer: { 6 | framework: 'next', 7 | bundler: 'webpack', 8 | }, 9 | specPattern: 'cypress/components/**/*.cy.{js,jsx,ts,tsx}', 10 | setupNodeEvents(on, config) { 11 | // eslint-disable-next-line @typescript-eslint/no-var-requires 12 | require('@cypress/code-coverage/task')(on, config); 13 | return config; 14 | }, 15 | }, 16 | e2e: { 17 | setupNodeEvents(on, config) { 18 | // eslint-disable-next-line @typescript-eslint/no-var-requires 19 | require('@cypress/code-coverage/task')(on, config); 20 | return config; 21 | }, 22 | }, 23 | }); 24 | -------------------------------------------------------------------------------- /cypress/components/Code.cy.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Code from '~/components/Code'; 3 | 4 | describe('Code Component', () => { 5 | const testCodeRendering = (props: { children: string }) => { 6 | cy.mount(); 7 | cy.get('[data-test="code"]').should('have.text', props.children); 8 | }; 9 | 10 | it('should render code correctly', () => { 11 | testCodeRendering({ children: 'const foo = "bar";' }); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /cypress/components/ScrollButton.cy.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ScrollButton from '~/components/ScrollButton'; 3 | 4 | describe('ScrollButton Component', () => { 5 | // Should render and function correctly 6 | it('should render and function correctly', () => { 7 | // Mount the ScrollButton component 8 | cy.mount( 9 |
10 | 11 |
, 12 | ); 13 | 14 | // Initially, the button should not exist 15 | cy.get('[data-test="scroll-button"]').should('not.exist'); 16 | 17 | // when window scrollY is >150 the button should exist 18 | cy.window().scrollTo(0, 151); 19 | 20 | // Check if the button is exist 21 | cy.get('[data-test="scroll-button"]').should('exist'); 22 | 23 | // Click the button 24 | cy.get('[data-test="scroll-button"]').click(); 25 | 26 | // Check if the window scroll to top 27 | cy.window().its('scrollY').should('eq', 1); 28 | 29 | // check again if the button is not exist 30 | cy.get('[data-test="scroll-button"]').should('not.exist'); 31 | 32 | // when window scrollY is <150 the button should not exist 33 | cy.window().scrollTo(0, 149); 34 | cy.get('[data-test="scroll-button"]').should('not.exist'); 35 | }); 36 | }); 37 | -------------------------------------------------------------------------------- /cypress/e2e/homepage.cy.ts: -------------------------------------------------------------------------------- 1 | // describe('Homepage', () => { 2 | // it('should contains - Build more. Break less. Empower others.', () => { 3 | // cy.viewport(1280, 720); 4 | // cy.visit('http://localhost:3000'); 5 | // cy.contains(/Build more. Break less. Empower others./i); 6 | // }); 7 | // }); 8 | -------------------------------------------------------------------------------- /cypress/plugins/mockNextRouterUtils.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Mocks the Next.js router object. 3 | * @returns The mock router object. 4 | */ 5 | 6 | export interface MockRouter { 7 | push: any; 8 | replace: any; 9 | prefetch: any; 10 | pathname: string; 11 | query: Record; 12 | asPath: string; 13 | events: { 14 | on: any; 15 | off: any; 16 | emit: any; 17 | }; 18 | } 19 | 20 | export default function mockNextRouter() { 21 | const push = cy.stub().as('routerPush'); 22 | const replace = cy.stub().as('routerReplace'); 23 | const prefetch = cy.stub().as('routerPrefetch'); 24 | 25 | const mockRouter: MockRouter = { 26 | push, 27 | replace, 28 | prefetch, 29 | pathname: '/', 30 | query: {}, 31 | asPath: '/', 32 | events: { 33 | on: cy.stub(), 34 | off: cy.stub(), 35 | emit: cy.stub(), 36 | }, 37 | }; 38 | 39 | // eslint-disable-next-line @typescript-eslint/no-var-requires 40 | cy.stub(require('next/router'), 'useRouter').returns(mockRouter); 41 | 42 | return mockRouter; 43 | } 44 | -------------------------------------------------------------------------------- /cypress/support/commands.ts: -------------------------------------------------------------------------------- 1 | /// 2 | // *********************************************** 3 | // This example commands.ts shows you how to 4 | // create various custom commands and overwrite 5 | // existing commands. 6 | // 7 | // For more comprehensive examples of custom 8 | // commands please read more here: 9 | // https://on.cypress.io/custom-commands 10 | // *********************************************** 11 | // 12 | // 13 | // -- This is a parent command -- 14 | // Cypress.Commands.add('login', (email, password) => { ... }) 15 | // 16 | // 17 | // -- This is a child command -- 18 | // Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) 19 | // 20 | // 21 | // -- This is a dual command -- 22 | // Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) 23 | // 24 | // 25 | // -- This will overwrite an existing command -- 26 | // Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) 27 | // 28 | // declare global { 29 | // namespace Cypress { 30 | // interface Chainable { 31 | // login(email: string, password: string): Chainable 32 | // drag(subject: string, options?: Partial): Chainable 33 | // dismiss(subject: string, options?: Partial): Chainable 34 | // visit(originalFn: CommandOriginalFn, url: string, options: Partial): Chainable 35 | // } 36 | // } 37 | // } 38 | -------------------------------------------------------------------------------- /cypress/support/component-index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Components App 8 | 9 |
10 | 11 | 12 |
13 | 14 | -------------------------------------------------------------------------------- /cypress/support/component.ts: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example support/component.ts is processed and 3 | // loaded automatically before your test files. 4 | // 5 | // This is a great place to put global configuration and 6 | // behavior that modifies Cypress. 7 | // 8 | // You can change the location of this file or turn off 9 | // automatically serving support files with the 10 | // 'supportFile' configuration option. 11 | // 12 | // You can read more here: 13 | // https://on.cypress.io/configuration 14 | // *********************************************************** 15 | 16 | // Import commands.js using ES2015 syntax: 17 | import './commands'; 18 | import '@cypress/code-coverage/support'; 19 | import { mount } from 'cypress/react18'; 20 | import '../../styles/globals.css'; 21 | 22 | // Augment the Cypress namespace to include type definitions for 23 | // your custom command. 24 | // Alternatively, can be defined in cypress/support/component.d.ts 25 | // with a at the top of your spec. 26 | 27 | declare global { 28 | // eslint-disable-next-line @typescript-eslint/no-namespace 29 | namespace Cypress { 30 | interface Chainable { 31 | mount: typeof mount; 32 | } 33 | } 34 | } 35 | 36 | Cypress.Commands.add('mount', mount); 37 | 38 | // Example use: 39 | // cy.mount() 40 | -------------------------------------------------------------------------------- /cypress/support/e2e.ts: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example support/e2e.ts is processed and 3 | // loaded automatically before your test files. 4 | // 5 | // This is a great place to put global configuration and 6 | // behavior that modifies Cypress. 7 | // 8 | // You can change the location of this file or turn off 9 | // automatically serving support files with the 10 | // 'supportFile' configuration option. 11 | // 12 | // You can read more here: 13 | // https://on.cypress.io/configuration 14 | // *********************************************************** 15 | 16 | // Import commands.js using ES2015 syntax: 17 | import './commands'; 18 | import '@cypress/code-coverage/support'; 19 | -------------------------------------------------------------------------------- /data/ambassadors.json: -------------------------------------------------------------------------------- 1 | ../_includes/community/programs/ambassadors/ambassadors.json -------------------------------------------------------------------------------- /lib/config.ts: -------------------------------------------------------------------------------- 1 | export const HOST = 'https://www.json-schema.org'; 2 | 3 | export const DRAFT_ORDER = [ 4 | '2020-12', 5 | '2019-09', 6 | '7', 7 | '6', 8 | '5', 9 | '4', 10 | '3', 11 | '2', 12 | '1', 13 | '0', 14 | ] as const; 15 | 16 | export type JSONSchemaDraft = (typeof DRAFT_ORDER)[number]; 17 | -------------------------------------------------------------------------------- /lib/extractPathWithoutFragment.ts: -------------------------------------------------------------------------------- 1 | export default function extractPathWithoutFragment(pathWithFragment: string) { 2 | const fragmentIndex = pathWithFragment.indexOf('#'); 3 | if (fragmentIndex !== -1) { 4 | return pathWithFragment.substring(0, fragmentIndex); 5 | } else { 6 | return pathWithFragment; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /lib/getStaticMarkdownPaths.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | 3 | export default async function getStaticMarkdownPaths(path: string) { 4 | const files = fs.readdirSync(path); 5 | const paths = files 6 | .filter((file) => { 7 | const isMarkdownFile = file.substr(-3) === '.md'; 8 | const isProtected = ['_'].includes(file.substr(0, 1)); 9 | return isMarkdownFile && !isProtected; 10 | }) 11 | .map((fileName) => ({ 12 | params: { 13 | slug: fileName.replace('.md', ''), 14 | }, 15 | })); 16 | return { 17 | paths, 18 | fallback: false, 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /lib/getStaticMarkdownProps.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import matter from 'gray-matter'; 3 | 4 | type Props = { params?: { slug: string } }; 5 | 6 | export default async function getStaticMarkdownProps( 7 | props: Props, 8 | path: string, 9 | ) { 10 | const slug = props.params?.slug || '_index'; 11 | 12 | const fileName2 = `${path}/${slug}.md`; 13 | const fileName = fs.readFileSync(fileName2, 'utf-8'); 14 | 15 | const { data: frontmatter, content } = matter(fileName); 16 | 17 | return { 18 | props: { 19 | frontmatter, 20 | content, 21 | }, 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /lib/getStaticPropsFromSingleMarkdown.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import matter from 'gray-matter'; 3 | 4 | export default async function getStaticPropsFromSingleMarkdown(path: string) { 5 | const contentMarkdown = fs.readFileSync(path, 'utf-8'); 6 | const { content } = matter(contentMarkdown); 7 | return { props: { content } }; 8 | } 9 | -------------------------------------------------------------------------------- /lib/slugifyMarkdownHeadline.ts: -------------------------------------------------------------------------------- 1 | import slugify from 'slugify'; 2 | 3 | export default function slugifyMarkdownHeadline( 4 | markdownChildren: string | any[], 5 | ): string { 6 | const FRAGMENT_REGEX = /\[#(?(\w|-|_)*)\]/g; 7 | if (!markdownChildren) return ''; 8 | if (typeof markdownChildren === 'string') 9 | return slugify(markdownChildren, { lower: true, trim: true }); 10 | const metaSlug = markdownChildren.reduce((acc, child) => { 11 | if (acc) return acc; 12 | if (typeof child !== 'string') return null; 13 | const fragment = FRAGMENT_REGEX.exec(child); 14 | if (!fragment) return null; 15 | const slug = fragment?.groups?.slug; 16 | return slug || null; 17 | }, null); 18 | if (metaSlug) return metaSlug; 19 | 20 | const joinedChildren = markdownChildren 21 | .filter((child) => typeof child === 'string') 22 | .map((string) => string.replace(FRAGMENT_REGEX, '')) 23 | .join(' '); 24 | const slug = slugify(joinedChildren, { lower: true, trim: true }); 25 | return slug; 26 | } 27 | -------------------------------------------------------------------------------- /lib/useSetUrlParam.ts: -------------------------------------------------------------------------------- 1 | import { useRouter } from 'next/router'; 2 | 3 | const HOST = 'https://json-schema.org'; 4 | 5 | export default function useSetUrlParam() { 6 | const router = useRouter(); 7 | const url = new URL(`${HOST}${router.asPath}`); 8 | return (param: string, value: string | null) => { 9 | if (value === null) { 10 | url.searchParams.delete(param); 11 | } else { 12 | url.searchParams.set(param, value); 13 | } 14 | router.push(url.href.slice(HOST.length)); 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { clsx, type ClassValue } from 'clsx'; 2 | import { twMerge } from 'tailwind-merge'; 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)); 6 | } 7 | -------------------------------------------------------------------------------- /makefile: -------------------------------------------------------------------------------- 1 | install: 2 | docker build -t app . 3 | run: 4 | docker run --rm -it -v "$PWD":/app -p 3000:3000 app -------------------------------------------------------------------------------- /next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/pages/building-your-application/configuring/typescript for more information. 6 | -------------------------------------------------------------------------------- /next-sitemap.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next-sitemap').IConfig} */ 2 | module.exports = { 3 | siteUrl: process.env.SITE_URL || 'https://json-schema.org/', 4 | generateRobotsTxt: true, // (optional), 5 | outDir: 'out', 6 | // ...other options 7 | } 8 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | output: 'export', 5 | pageExtensions: ['page.tsx'], 6 | images: { 7 | unoptimized: true, 8 | }, 9 | webpack: (config, { dev, isServer }) => { 10 | if (dev && !isServer) { 11 | config.module.rules.push({ 12 | test: /\.(js|jsx|ts|tsx)$/, 13 | exclude: /node_modules/, 14 | use: [ 15 | { 16 | loader: 'babel-loader', 17 | options: { 18 | presets: ['next/babel'], 19 | plugins: ['istanbul'], 20 | }, 21 | }, 22 | ], 23 | }); 24 | } 25 | 26 | const fileLoaderRule = config.module.rules.find((rule) => 27 | rule.test?.test?.('.svg'), 28 | ); 29 | 30 | config.module.rules.push( 31 | { 32 | ...fileLoaderRule, 33 | test: /\.svg$/i, 34 | resourceQuery: /url/, // *.svg?url 35 | }, 36 | 37 | { 38 | test: /\.svg$/i, 39 | issuer: fileLoaderRule.issuer, 40 | resourceQuery: { not: [...fileLoaderRule.resourceQuery.not, /url/] }, 41 | use: ['@svgr/webpack'], 42 | }, 43 | ); 44 | 45 | fileLoaderRule.exclude = /\.svg$/i; 46 | return config; 47 | }, 48 | }; 49 | 50 | module.exports = nextConfig; 51 | 52 | -------------------------------------------------------------------------------- /nyc.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | all: true, 3 | include: ['pages/**/*.tsx', 'components/**/*.tsx'], 4 | exclude: [ 5 | 'cypress/**/*.{js,ts,jsx,tsx}', 6 | '**/*.d.ts', 7 | '**/*.cy.{js,ts,jsx,tsx}', 8 | ], 9 | reporter: ['text', 'json', 'html'], 10 | 'report-dir': './coverage', 11 | }; 12 | -------------------------------------------------------------------------------- /pages/[slug].page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { getLayout } from '~/components/Sidebar'; 3 | import Head from 'next/head'; 4 | import StyledMarkdown from '~/components/StyledMarkdown'; 5 | import getStaticMarkdownPaths from '~/lib/getStaticMarkdownPaths'; 6 | import getStaticMarkdownProps from '~/lib/getStaticMarkdownProps'; 7 | import { Headline1 } from '~/components/Headlines'; 8 | import { SectionContext } from '~/context'; 9 | import { DocsHelp } from '~/components/DocsHelp'; 10 | import NextPrevButton from '~/components/NavigationButtons'; 11 | 12 | export async function getStaticPaths() { 13 | return getStaticMarkdownPaths('pages'); 14 | } 15 | export async function getStaticProps(args: any) { 16 | return getStaticMarkdownProps(args, 'pages'); 17 | } 18 | 19 | export default function StaticMarkdownPage({ 20 | frontmatter, 21 | content, 22 | }: { 23 | frontmatter: any; 24 | content: any; 25 | }) { 26 | const fileRenderType = '_md'; 27 | const newTitle = 'JSON Schema - ' + frontmatter.title; 28 | return ( 29 | 30 | 31 | {newTitle} 32 | 33 | {frontmatter.title} 34 | 35 | 41 | 42 | 43 | ); 44 | } 45 | StaticMarkdownPage.getLayout = getLayout; 46 | -------------------------------------------------------------------------------- /pages/_app.page.tsx: -------------------------------------------------------------------------------- 1 | import '../styles/globals.css'; 2 | import 'tailwindcss/tailwind.css'; 3 | import React from 'react'; 4 | import type { AppProps } from 'next/app'; 5 | import { ThemeProvider } from 'next-themes'; 6 | 7 | function MyApp({ Component, pageProps }: AppProps) { 8 | // @ts-ignore 9 | const getLayout = Component.getLayout || ((page: JSX.Element) => page); 10 | const AnyComponent = Component as any; 11 | return ( 12 | 13 | {getLayout(, pageProps)} 14 | 15 | ); 16 | } 17 | 18 | export default MyApp; 19 | -------------------------------------------------------------------------------- /pages/_document.page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Document, { 3 | Html, 4 | Head, 5 | Main, 6 | NextScript, 7 | DocumentContext, 8 | } from 'next/document'; 9 | 10 | class MyDocument extends Document { 11 | static async getInitialProps(ctx: DocumentContext) { 12 | const initialProps = await Document.getInitialProps(ctx); 13 | return { ...initialProps }; 14 | } 15 | 16 | render() { 17 | return ( 18 | 19 | 20 | 21 | 26 | 30 | 34 | 35 | 36 |
37 | 38 | 39 | 40 | ); 41 | } 42 | } 43 | export default MyDocument; 44 | -------------------------------------------------------------------------------- /pages/draft-05/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Draft-05' 3 | Published: '13 October 2016' 4 | type: docs 5 | authors: ['Austin Wright'] 6 | Metaschema: 'https://json-schema.org/draft-04/schema' 7 | Specification: 'https://json-schema.org/draft-05/draft-wright-json-schema-00.pdf' 8 | --- 9 | 10 | ### Draft-05 Documents 11 | 12 | - Core: [draft-wright-json-schema-00](https://json-schema.org/draft-05/draft-wright-json-schema-00.pdf) ([changes](https://json-schema.org/draft-05/draft-wright-json-schema-00.pdf#appendix-B)) 13 | - Validation: [draft-wright-json-schema-validation-00](https://json-schema.org/draft-05/draft-wright-json-schema-validation-00.pdf) ([changes](https://json-schema.org/draft-05/draft-wright-json-schema-validation-00.pdf#appendix-B)) 14 | - Hyper-Schema: [draft-wright-json-schema-hyperschema-00](https://json-schema.org/draft-05/draft-wright-json-schema-hyperschema-00.pdf) ([changes](https://json-schema.org/draft-05/draft-wright-json-schema-hyperschema-00.pdf#appendix-B)) 15 | - Draft 5 was primarily a cleanup of Draft 4 and continued to use the Draft 4 meta-schemas. 16 | - Published: 13-October-2016 17 | -------------------------------------------------------------------------------- /pages/draft-05/index.page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { getLayout } from '~/components/Sidebar'; 3 | import fs from 'fs'; 4 | import matter from 'gray-matter'; 5 | import StyledMarkdown from '~/components/StyledMarkdown'; 6 | import { SectionContext } from '~/context'; 7 | import DocTable from '~/components/DocTable'; 8 | import { Headline1 } from '~/components/Headlines'; 9 | import { DocsHelp } from '~/components/DocsHelp'; 10 | 11 | export async function getStaticProps() { 12 | const index = fs.readFileSync('pages/draft-05/index.md', 'utf-8'); 13 | const main = fs.readFileSync('pages/draft-05/release-notes.md', 'utf-8'); 14 | const { content: indexContent, data: indexData } = matter(index); 15 | const { content: bodyContent } = matter(main); 16 | 17 | const frontmatter = { ...indexData }; 18 | return { 19 | props: { 20 | blocks: { 21 | index: indexContent, 22 | body: bodyContent, 23 | }, 24 | frontmatter, 25 | }, 26 | }; 27 | } 28 | 29 | export default function ImplementationsPages({ 30 | blocks, 31 | frontmatter, 32 | }: { 33 | blocks: any; 34 | frontmatter: any; 35 | }) { 36 | const fileRenderType = 'indexmd'; 37 | return ( 38 | 39 | {frontmatter.title} 40 | 41 | 42 | 43 | 44 | 45 | ); 46 | } 47 | ImplementationsPages.getLayout = getLayout; 48 | -------------------------------------------------------------------------------- /pages/draft-05/release-notes.md: -------------------------------------------------------------------------------- 1 | ### Explanation for lack of draft-05 meta-schemas 2 | 3 | “Draft-05” in the sequential meta-schema numbering would have referred to the draft-wright-jsonschema\*-00 specifications. 4 | 5 | These specifications were intended as modernized and tidied versions of the specifications referenced by the “Draft-04” meta-schemas, so those draft-04 meta-schemas should continue to be used. 6 | 7 | “Draft-06” meta-schemas will be published for the next set of specifications. 8 | -------------------------------------------------------------------------------- /pages/draft-06/[slug].page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Head from 'next/head'; 3 | import { getLayout } from '~/components/Sidebar'; 4 | import StyledMarkdown from '~/components/StyledMarkdown'; 5 | import getStaticMarkdownPaths from '~/lib/getStaticMarkdownPaths'; 6 | import getStaticMarkdownProps from '~/lib/getStaticMarkdownProps'; 7 | import { Headline1 } from '~/components/Headlines'; 8 | import { SectionContext } from '~/context'; 9 | import { DocsHelp } from '~/components/DocsHelp'; 10 | 11 | export async function getStaticPaths() { 12 | return getStaticMarkdownPaths('pages/draft-06'); 13 | } 14 | export async function getStaticProps(args: any) { 15 | return getStaticMarkdownProps(args, 'pages/draft-06'); 16 | } 17 | 18 | export default function StaticMarkdownPage({ 19 | frontmatter, 20 | content, 21 | }: { 22 | frontmatter: any; 23 | content: any; 24 | }) { 25 | const fileRenderType = '_md'; 26 | const newTitle = 'JSON Schema - ' + frontmatter.title; 27 | 28 | return ( 29 | 30 | 31 | {newTitle} 32 | 33 | {frontmatter.title} 34 | 35 | 36 | 37 | ); 38 | } 39 | StaticMarkdownPage.getLayout = getLayout; 40 | -------------------------------------------------------------------------------- /pages/draft-06/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'Draft-06' 3 | Published: '21 April 2017' 4 | type: docs 5 | authors: ['Austin Wright', 'Henry Andrews'] 6 | Metaschema: 'https://json-schema.org/draft-06/schema' 7 | Specification: 'https://json-schema.org/draft-06/draft-wright-json-schema-01.html' 8 | --- 9 | 10 | ### Draft-06 Documents 11 | 12 | - Validation: [draft-wright-json-schema-validation-01](https://json-schema.org/draft-06/draft-wright-json-schema-validation-01.html) ([changes](https://json-schema.org/draft-06/draft-wright-json-schema-validation-01.html#rfc.appendix.B)) ([schema migration FAQ](https://json-schema.org/draft-06/json-schema-release-notes)) 13 | - Hyper-Schema: [draft-wright-json-schema-hyperschema-01](https://json-schema.org/draft-06/draft-wright-json-schema-hyperschema-01.html) ([changes](https://json-schema.org/draft-06/draft-wright-json-schema-hyperschema-01.html#rfc.appendix.B)) ([hyper-schema migration FAQ](https://json-schema.org/draft-06/json-hyper-schema-release-notes)) 14 | - [JSON Schema meta-schema](https://json-schema.org/draft-06/schema) 15 | - [JSON Hyper-Schema meta-schema](https://json-schema.org/draft-06/hyper-schema) 16 | 17 | ### Release Notes 18 | 19 | - [JSON Schema Release Notes](../draft-06/json-schema-release-notes) 20 | - [JSON Hyper-Schema Release Notes](../draft-06/json-hyper-schema-release-notes) 21 | -------------------------------------------------------------------------------- /pages/draft-06/index.page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { getLayout } from '~/components/Sidebar'; 3 | import fs from 'fs'; 4 | import matter from 'gray-matter'; 5 | import StyledMarkdown from '~/components/StyledMarkdown'; 6 | import { SectionContext } from '~/context'; 7 | import DocTable from '~/components/DocTable'; 8 | import { Headline1 } from '~/components/Headlines'; 9 | import { DocsHelp } from '~/components/DocsHelp'; 10 | 11 | export async function getStaticProps() { 12 | const index = fs.readFileSync('pages/draft-06/index.md', 'utf-8'); 13 | 14 | const { content: indexContent, data: indexData } = matter(index); 15 | 16 | const frontmatter = { ...indexData }; 17 | return { 18 | props: { 19 | blocks: { 20 | index: indexContent, 21 | }, 22 | frontmatter, 23 | }, 24 | }; 25 | } 26 | 27 | export default function ImplementationsPages({ 28 | blocks, 29 | frontmatter, 30 | }: { 31 | blocks: any; 32 | frontmatter: any; 33 | }) { 34 | const fileRenderType = 'indexmd'; 35 | return ( 36 | 37 | {frontmatter.title} 38 | 39 | 40 | 41 | 42 | ); 43 | } 44 | ImplementationsPages.getLayout = getLayout; 45 | -------------------------------------------------------------------------------- /pages/draft-07/[slug].page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Head from 'next/head'; 3 | import StyledMarkdown from '~/components/StyledMarkdown'; 4 | import { getLayout } from '~/components/Sidebar'; 5 | import getStaticMarkdownPaths from '~/lib/getStaticMarkdownPaths'; 6 | import getStaticMarkdownProps from '~/lib/getStaticMarkdownProps'; 7 | import { Headline1 } from '~/components/Headlines'; 8 | import { SectionContext } from '~/context'; 9 | import { DocsHelp } from '~/components/DocsHelp'; 10 | 11 | export async function getStaticPaths() { 12 | return getStaticMarkdownPaths('pages/draft-07'); 13 | } 14 | export async function getStaticProps(args: any) { 15 | return getStaticMarkdownProps(args, 'pages/draft-07'); 16 | } 17 | 18 | export default function StaticMarkdownPage({ 19 | frontmatter, 20 | content, 21 | }: { 22 | frontmatter: any; 23 | content: any; 24 | }) { 25 | const fileRenderType = '_md'; 26 | const newTitle = 'JSON Schema - ' + frontmatter.title; 27 | 28 | return ( 29 | 30 | 31 | {newTitle} 32 | 33 | {frontmatter.title} 34 | 35 | 36 | 37 | ); 38 | } 39 | StaticMarkdownPage.getLayout = getLayout; 40 | -------------------------------------------------------------------------------- /pages/draft-07/index.page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { getLayout } from '~/components/Sidebar'; 3 | import fs from 'fs'; 4 | import matter from 'gray-matter'; 5 | import StyledMarkdown from '~/components/StyledMarkdown'; 6 | import { SectionContext } from '~/context'; 7 | import DocTable from '~/components/DocTable'; 8 | import { Headline1 } from '~/components/Headlines'; 9 | import { DocsHelp } from '~/components/DocsHelp'; 10 | 11 | export async function getStaticProps() { 12 | const index = fs.readFileSync('pages/draft-07/index.md', 'utf-8'); 13 | 14 | const { content: indexContent, data: indexData } = matter(index); 15 | 16 | const frontmatter = { ...indexData }; 17 | return { 18 | props: { 19 | blocks: { 20 | index: indexContent, 21 | }, 22 | frontmatter, 23 | }, 24 | }; 25 | } 26 | 27 | export default function ImplementationsPages({ 28 | blocks, 29 | frontmatter, 30 | }: { 31 | blocks: any; 32 | frontmatter: any; 33 | }) { 34 | const fileRenderType = 'indexmd'; 35 | return ( 36 | 37 | {frontmatter.title} 38 | 39 | 40 | 41 | 42 | ); 43 | } 44 | ImplementationsPages.getLayout = getLayout; 45 | -------------------------------------------------------------------------------- /pages/draft/2019-09/[slug].page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Head from 'next/head'; 3 | import { getLayout } from '~/components/Sidebar'; 4 | import StyledMarkdown from '~/components/StyledMarkdown'; 5 | import getStaticMarkdownPaths from '~/lib/getStaticMarkdownPaths'; 6 | import getStaticMarkdownProps from '~/lib/getStaticMarkdownProps'; 7 | import { Headline1 } from '~/components/Headlines'; 8 | import { SectionContext } from '~/context'; 9 | import { DocsHelp } from '~/components/DocsHelp'; 10 | 11 | export async function getStaticPaths() { 12 | return getStaticMarkdownPaths('pages/draft/2019-09'); 13 | } 14 | export async function getStaticProps(args: any) { 15 | return getStaticMarkdownProps(args, 'pages/draft/2019-09'); 16 | } 17 | 18 | export default function StaticMarkdownPage({ 19 | frontmatter, 20 | content, 21 | }: { 22 | frontmatter: any; 23 | content: any; 24 | }) { 25 | const fileRenderType = '_md'; 26 | const newTitle = 'JSON Schema - ' + frontmatter.title; 27 | 28 | return ( 29 | 30 | 31 | {newTitle} 32 | 33 | {frontmatter.title} 34 | 35 | 36 | 37 | ); 38 | } 39 | StaticMarkdownPage.getLayout = getLayout; 40 | -------------------------------------------------------------------------------- /pages/draft/2019-09/index.page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { getLayout } from '~/components/Sidebar'; 3 | import fs from 'fs'; 4 | import matter from 'gray-matter'; 5 | import StyledMarkdown from '~/components/StyledMarkdown'; 6 | import { SectionContext } from '~/context'; 7 | import DocTable from '~/components/DocTable'; 8 | import { Headline1 } from '~/components/Headlines'; 9 | import { DocsHelp } from '~/components/DocsHelp'; 10 | 11 | export async function getStaticProps() { 12 | const index = fs.readFileSync('pages/draft/2019-09/index.md', 'utf-8'); 13 | const { content: indexContent, data: indexData } = matter(index); 14 | 15 | const frontmatter = { ...indexData }; 16 | return { 17 | props: { 18 | blocks: { 19 | index: indexContent, 20 | }, 21 | frontmatter, 22 | }, 23 | }; 24 | } 25 | 26 | export default function ImplementationsPages({ 27 | blocks, 28 | frontmatter, 29 | }: { 30 | blocks: any; 31 | frontmatter: any; 32 | }) { 33 | const fileRenderType = 'indexmd'; 34 | return ( 35 | 36 | {frontmatter.title} 37 | 38 | 39 | 40 | 41 | ); 42 | } 43 | ImplementationsPages.getLayout = getLayout; 44 | -------------------------------------------------------------------------------- /pages/draft/2020-12/[slug].page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Head from 'next/head'; 3 | import { getLayout } from '~/components/Sidebar'; 4 | import StyledMarkdown from '~/components/StyledMarkdown'; 5 | import getStaticMarkdownPaths from '~/lib/getStaticMarkdownPaths'; 6 | import getStaticMarkdownProps from '~/lib/getStaticMarkdownProps'; 7 | import { Headline1 } from '~/components/Headlines'; 8 | import { SectionContext } from '~/context'; 9 | import { DocsHelp } from '~/components/DocsHelp'; 10 | 11 | export async function getStaticPaths() { 12 | return getStaticMarkdownPaths('pages/draft/2020-12'); 13 | } 14 | export async function getStaticProps(args: any) { 15 | return getStaticMarkdownProps(args, 'pages/draft/2020-12'); 16 | } 17 | 18 | export default function StaticMarkdownPage({ 19 | frontmatter, 20 | content, 21 | }: { 22 | frontmatter: any; 23 | content: any; 24 | }) { 25 | const fileRenderType = '_md'; 26 | const newTitle = 'JSON Schema - ' + frontmatter.title; 27 | 28 | return ( 29 | 30 | 31 | {newTitle} 32 | 33 | {frontmatter.title} 34 | 35 | 36 | 37 | ); 38 | } 39 | StaticMarkdownPage.getLayout = getLayout; 40 | -------------------------------------------------------------------------------- /pages/draft/2020-12/index.page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { getLayout } from '~/components/Sidebar'; 3 | import fs from 'fs'; 4 | import matter from 'gray-matter'; 5 | import StyledMarkdown from '~/components/StyledMarkdown'; 6 | import { SectionContext } from '~/context'; 7 | import DocTable from '~/components/DocTable'; 8 | import { Headline1 } from '~/components/Headlines'; 9 | import { DocsHelp } from '~/components/DocsHelp'; 10 | 11 | export async function getStaticProps() { 12 | const index = fs.readFileSync('pages/draft/2020-12/index.md', 'utf-8'); 13 | const { content: indexContent, data: indexData } = matter(index); 14 | 15 | const frontmatter = { ...indexData }; 16 | return { 17 | props: { 18 | blocks: { 19 | index: indexContent, 20 | }, 21 | frontmatter, 22 | }, 23 | }; 24 | } 25 | 26 | export default function ImplementationsPages({ 27 | blocks, 28 | frontmatter, 29 | }: { 30 | blocks: any; 31 | frontmatter: any; 32 | }) { 33 | const fileRenderType = 'indexmd'; 34 | return ( 35 | 36 | {frontmatter.title} 37 | 38 | 39 | 40 | 41 | ); 42 | } 43 | ImplementationsPages.getLayout = getLayout; 44 | -------------------------------------------------------------------------------- /pages/implementers/[slug].page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Head from 'next/head'; 3 | import StyledMarkdown from '~/components/StyledMarkdown'; 4 | import { getLayout } from '~/components/Sidebar'; 5 | import getStaticMarkdownPaths from '~/lib/getStaticMarkdownPaths'; 6 | import getStaticMarkdownProps from '~/lib/getStaticMarkdownProps'; 7 | import { Headline1 } from '~/components/Headlines'; 8 | import { SectionContext } from '~/context'; 9 | import { DocsHelp } from '~/components/DocsHelp'; 10 | import NextPrevButton from '~/components/NavigationButtons'; 11 | 12 | export async function getStaticPaths() { 13 | return getStaticMarkdownPaths('pages/implementers'); 14 | } 15 | export async function getStaticProps(args: any) { 16 | return getStaticMarkdownProps(args, 'pages/implementers'); 17 | } 18 | 19 | export default function StaticMarkdownPage({ 20 | frontmatter, 21 | content, 22 | }: { 23 | frontmatter: any; 24 | content: any; 25 | }) { 26 | const fileRenderType = '_md'; 27 | const newTitle = 'JSON Schema - ' + frontmatter.title; 28 | return ( 29 | 30 | 31 | {newTitle} 32 | 33 | {frontmatter.title} 34 | 35 | 41 | 42 | 43 | ); 44 | } 45 | StaticMarkdownPage.getLayout = getLayout; 46 | -------------------------------------------------------------------------------- /pages/implementers/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "For Implementers" 3 | section: docs 4 | prev: 5 | label: Structuring a complex schema 6 | url: /understanding-json-schema/structuring 7 | next: 8 | label: Common Interfaces across Implementations 9 | url: /implementers/interfaces 10 | --- 11 | 12 | Implement JSON Schema 13 | ========================= 14 | 15 | Dive into the technical details of implementing JSON Schema. 16 | This section is for developers building tools and libraries that work with JSON Schema. 17 | -------------------------------------------------------------------------------- /pages/learn/[slug].page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Head from 'next/head'; 3 | import StyledMarkdown from '~/components/StyledMarkdown'; 4 | import { getLayout } from '~/components/Sidebar'; 5 | import getStaticMarkdownPaths from '~/lib/getStaticMarkdownPaths'; 6 | import getStaticMarkdownProps from '~/lib/getStaticMarkdownProps'; 7 | import { Headline1 } from '~/components/Headlines'; 8 | import { SectionContext } from '~/context'; 9 | import { DocsHelp } from '~/components/DocsHelp'; 10 | import NextPrevButton from '~/components/NavigationButtons'; 11 | 12 | export async function getStaticPaths() { 13 | return getStaticMarkdownPaths('pages/learn'); 14 | } 15 | export async function getStaticProps(args: any) { 16 | return getStaticMarkdownProps(args, 'pages/learn'); 17 | } 18 | 19 | export default function StaticMarkdownPage({ 20 | frontmatter, 21 | content, 22 | }: { 23 | frontmatter: any; 24 | content: any; 25 | }) { 26 | const fileRenderType = '_md'; 27 | const newTitle = 'JSON Schema - ' + frontmatter.title; 28 | return ( 29 | 30 | 31 | {newTitle} 32 | 33 | {frontmatter.title} 34 | 35 | 41 | 42 | 43 | ); 44 | } 45 | StaticMarkdownPage.getLayout = getLayout; 46 | -------------------------------------------------------------------------------- /pages/learn/getting-started-step-by-step/next-steps.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Getting Started Next Steps 3 | section: docs 4 | --- 5 | 6 | ## What Next? 7 | 8 | Now that you know how to create a JSON Schema and use it to validate JSON data, we'd invite you to continue your JSON Schema journey: 9 | * Learn more about JSON Schema by visiting the [reference documentation](../understanding-json-schema). 10 | * Explore the details of the current version of the Spec [2020-12](https://json-schema.org/specification). 11 | 12 | If you already know how to create JSON Schemas and you are looking for different JSON Schema use cases like schema generation, code generation, documentation, UI generation or JSON Schema processing or conversion, please visit [Tools](https://json-schema.org/tools) and explore the amazing tooling available in the JSON Schema Ecosystem. 13 | -------------------------------------------------------------------------------- /pages/learn/guides/index.page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { getLayout } from '~/components/Sidebar'; 3 | import Head from 'next/head'; 4 | import { Headline1 } from '~/components/Headlines'; 5 | import { SectionContext } from '~/context'; 6 | import { DocsHelp } from '~/components/DocsHelp'; 7 | import NextPrevButton from '~/components/NavigationButtons'; 8 | import Card from '~/components/Card'; 9 | 10 | export default function Welcome() { 11 | const fileRenderType = 'tsx'; 12 | 13 | const newTitle = 'Guides'; 14 | return ( 15 | 16 | 17 | {newTitle} 18 | 19 | {newTitle} 20 |

21 | Welcome to our new Guides section! 22 |
23 |

24 |
25 | 33 |
34 | 40 | 41 |
42 | ); 43 | } 44 | Welcome.getLayout = getLayout; 45 | -------------------------------------------------------------------------------- /pages/overview/[slug].page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Head from 'next/head'; 3 | import { getLayout } from '~/components/Sidebar'; 4 | import StyledMarkdown from '~/components/StyledMarkdown'; 5 | import getStaticMarkdownPaths from '~/lib/getStaticMarkdownPaths'; 6 | import getStaticMarkdownProps from '~/lib/getStaticMarkdownProps'; 7 | import { Headline1 } from '~/components/Headlines'; 8 | import { SectionContext } from '~/context'; 9 | import { DocsHelp } from '~/components/DocsHelp'; 10 | import NextPrevButton from '~/components/NavigationButtons'; 11 | 12 | export async function getStaticPaths() { 13 | return getStaticMarkdownPaths('pages/overview'); 14 | } 15 | export async function getStaticProps(args: any) { 16 | return getStaticMarkdownProps(args, 'pages/overview'); 17 | } 18 | 19 | export default function StaticMarkdownPage({ 20 | frontmatter, 21 | content, 22 | }: { 23 | frontmatter: any; 24 | content: any; 25 | }) { 26 | const fileRenderType = '_md'; 27 | const newTitle = 'JSON Schema - ' + frontmatter.title; 28 | 29 | return ( 30 | 31 | 32 | {newTitle} 33 | 34 | {frontmatter.title} 35 | 36 | 42 | 43 | 44 | ); 45 | } 46 | StaticMarkdownPage.getLayout = getLayout; 47 | -------------------------------------------------------------------------------- /pages/overview/code-of-conduct/_index.md: -------------------------------------------------------------------------------- 1 | ../../../_includes/dot-github/CODE_OF_CONDUCT.md -------------------------------------------------------------------------------- /pages/overview/code-of-conduct/index.page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { getLayout } from '~/components/Sidebar'; 3 | import fs from 'fs'; 4 | import Head from 'next/head'; 5 | import matter from 'gray-matter'; 6 | import StyledMarkdown from '~/components/StyledMarkdown'; 7 | import { SectionContext } from '~/context'; 8 | import { DocsHelp } from '~/components/DocsHelp'; 9 | import NextPrevButton from '~/components/NavigationButtons'; 10 | 11 | export async function getStaticProps() { 12 | const block = fs.readFileSync( 13 | 'pages/overview/code-of-conduct/_index.md', 14 | 'utf-8', 15 | ); 16 | const { content: blockContent } = matter(block); 17 | return { 18 | props: { 19 | blocks: [blockContent], 20 | }, 21 | }; 22 | } 23 | 24 | export default function Content({ 25 | blocks, 26 | }: { 27 | blocks: any[]; 28 | frontmatter: any; 29 | content: any; 30 | }) { 31 | const newTitle = 'Code of Conduct'; 32 | const fileRenderType = 33 | 'https://github.com/json-schema-org/.github/blob/main/CODE_OF_CONDUCT.md'; 34 | return ( 35 | 36 | 37 | {newTitle} 38 | 39 | 40 | 46 | 47 | 48 | ); 49 | } 50 | Content.getLayout = getLayout; 51 | -------------------------------------------------------------------------------- /pages/overview/faq/index.page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { getLayout } from '~/components/Sidebar'; 3 | import Head from 'next/head'; 4 | import { SectionContext } from '~/context'; 5 | import Faq from '~/components/Faq'; 6 | import { Headline1 } from '~/components/Headlines'; 7 | import { DocsHelp } from '~/components/DocsHelp'; 8 | import NextPrevButton from '~/components/NavigationButtons'; 9 | 10 | export default function Content() { 11 | const newTitle = 'FAQ'; 12 | const fileRenderType = 'tsx'; 13 | 14 | return ( 15 | 16 | 17 | {newTitle} 18 | 19 | {newTitle} 20 |

21 | Below you'll find answers to questions we get asked the most about JSON 22 | Schema. 23 |

24 | 25 | 26 | 32 | 33 |
34 | ); 35 | } 36 | Content.getLayout = getLayout; 37 | -------------------------------------------------------------------------------- /pages/overview/similar-technologies.md: -------------------------------------------------------------------------------- 1 | --- 2 | section: docs 3 | title: Similar Technologies 4 | prev: 5 | label: Pro Help 6 | url: '/overview/pro-help' 7 | next: 8 | label: Code of Conduct 9 | url: '/overview/code-of-conduct' 10 | --- 11 | 12 | While we think that JSON Schema has a unique value proposition, we'd like to provide visibility to other technologies that share similar goals: 13 | 14 | 15 | 16 | * **JSON Constraint Rules (JCR):** JCR aims to provide a more expressive way to define constraints on JSON data compared to JSON Schema. While still under development, you can learn more about it on GitHub: [http://codalogic.github.io/jcr/](http://codalogic.github.io/jcr/). 17 | 18 | * **CBOR Constrained Data Description Language (CBL):** Similar to JCR, CBL focuses on describing constraints, but specifically for the CBOR data format. Dive deeper into CBL in the CBL IETF draft: [https://datatracker.ietf.org/doc/draft-cordell-jcr-co-constraints/](https://datatracker.ietf.org/doc/draft-cordell-jcr-co-constraints/). 19 | 20 | * **CBOR Data Definition Language (Cddl):** While not strictly focused on constraints, Cddl allows defining the structure of CBOR data. Check out the Cddl IETF draft: [https://tools.ietf.org/html/draft-greevenbosch-appsawg-cbor-cddl-08](https://tools.ietf.org/html/draft-greevenbosch-appsawg-cbor-cddl-08) for more information. 21 | 22 | ## Contributing to the Community 23 | 24 | Do you know of any other relevant technologies that we should add to this list? Please submit a pull request. We encourage contributions! 25 | 26 | 27 | -------------------------------------------------------------------------------- /pages/overview/sponsors/_index.md: -------------------------------------------------------------------------------- 1 | ../../../_includes/community/programs/sponsors/sponsors.md -------------------------------------------------------------------------------- /pages/overview/sponsors/index.page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { getLayout } from '~/components/Sidebar'; 3 | import fs from 'fs'; 4 | import Head from 'next/head'; 5 | import { Headline1 } from '~/components/Headlines'; 6 | import matter from 'gray-matter'; 7 | import StyledMarkdown from '~/components/StyledMarkdown'; 8 | import { SectionContext } from '~/context'; 9 | import { DocsHelp } from '~/components/DocsHelp'; 10 | import NextPrevButton from '~/components/NavigationButtons'; 11 | 12 | export async function getStaticProps() { 13 | const block1 = fs.readFileSync('pages/overview/sponsors/_index.md', 'utf-8'); 14 | const { content: block1Content } = matter(block1); 15 | return { 16 | props: { 17 | blocks: [block1Content], 18 | }, 19 | }; 20 | } 21 | 22 | export default function ContentExample({ blocks }: { blocks: any[] }) { 23 | const newTitle = 'Sponsors'; 24 | const fileRenderType = 25 | 'https://github.com/json-schema-org/community/blob/main/programs/sponsors/sponsors.md'; 26 | return ( 27 | 28 | 29 | {newTitle} 30 | 31 | {newTitle} 32 | 33 | 39 | 40 | 41 | ); 42 | } 43 | ContentExample.getLayout = getLayout; 44 | -------------------------------------------------------------------------------- /pages/specification/migration/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Migrating from older drafts 3 | section: docs 4 | prev: 5 | label: Specification Links 6 | url: /specification-links 7 | next: 8 | label: Release Notes 9 | url: /specification/release-notes 10 | --- 11 | 12 | The release notes discuss the changes impacting users and implementers: 13 | 14 | -------------------------------------------------------------------------------- /pages/specification/release-notes/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Release notes 3 | type: docs 4 | prev: 5 | label: Migration 6 | url: /specification/migration 7 | next: 8 | label: JSON Hyper-Schema 9 | url: /specification/json-hyper-schema 10 | --- 11 | 12 | Find below the Release Notes of all JSON Schema drafts: 13 | -------------------------------------------------------------------------------- /pages/tools/JSONSchemaTool.ts: -------------------------------------------------------------------------------- 1 | import type { JSONSchemaDraft } from '~/lib/config'; 2 | 3 | export interface JSONSchemaTool { 4 | name: string; 5 | description?: string; 6 | toolingTypes: string[]; 7 | languages?: string[]; 8 | environments?: string[]; 9 | dependsOnValidators?: string[]; 10 | creators?: Person[]; 11 | maintainers?: Person[]; 12 | license?: string; 13 | source?: string; 14 | homepage?: string; 15 | documentation?: object; 16 | supportedDialects?: { 17 | draft?: JSONSchemaDraft[]; 18 | additional?: { 19 | name: string; 20 | homepage?: string; 21 | source: string; 22 | }[]; 23 | }; 24 | bowtie?: BowtieData; 25 | toolingListingNotes?: string; 26 | compliance?: { 27 | config?: { 28 | docs?: string; 29 | instructions?: string; 30 | }; 31 | }; 32 | landscape?: { 33 | logo?: string; 34 | optOut?: boolean; 35 | }; 36 | lastUpdated?: string; 37 | status?: 'obsolete'; 38 | } 39 | 40 | export interface Person { 41 | name?: string; 42 | email?: string; 43 | username?: string; 44 | platform?: 'github' | 'gitlab' | 'bitbucket' | string; 45 | } 46 | 47 | export interface BowtieData { 48 | id: string; 49 | dialects: Array; 50 | badges_urls: { 51 | supported_versions: string; 52 | compliance: { 53 | [dialectURI: string]: string; 54 | }; 55 | }; 56 | } 57 | 58 | export interface BowtieReport { 59 | [source: string]: BowtieData; 60 | } 61 | -------------------------------------------------------------------------------- /pages/tools/components/SearchBar.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from 'react'; 2 | import type { Transform } from '../hooks/useToolsTransform'; 3 | 4 | const SearchBar = ({ transform }: { transform: Transform }) => { 5 | const [query, setQuery] = useState(transform.query); 6 | 7 | const changeHandler = (e: React.ChangeEvent) => { 8 | setQuery(e.target.value); 9 | }; 10 | 11 | useEffect(() => { 12 | setQuery(transform.query); 13 | }, [transform.query]); 14 | 15 | return ( 16 |
17 |
18 | 26 |
27 |
28 | ); 29 | }; 30 | 31 | export default SearchBar; 32 | -------------------------------------------------------------------------------- /pages/tools/components/ui/Badge.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from 'react'; 2 | 3 | const Badge = ({ children }: { children: ReactNode }) => { 4 | return ( 5 |
6 | {children} 7 |
8 | ); 9 | }; 10 | 11 | export default Badge; 12 | -------------------------------------------------------------------------------- /pages/tools/components/ui/Checkbox.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from 'react'; 2 | 3 | export default function Checkbox({ 4 | label, 5 | value, 6 | name, 7 | checked, 8 | }: { 9 | label: string; 10 | value: string; 11 | name: string; 12 | checked?: boolean; 13 | }) { 14 | const [isChecked, setIsChecked] = useState(checked); 15 | 16 | useEffect(() => { 17 | setIsChecked(checked); 18 | }, [checked]); 19 | 20 | const handleChange = () => { 21 | setIsChecked((prevChecked) => !prevChecked); 22 | }; 23 | 24 | return ( 25 | 37 | ); 38 | } 39 | -------------------------------------------------------------------------------- /pages/tools/components/ui/Radio.tsx: -------------------------------------------------------------------------------- 1 | import React, { ChangeEventHandler } from 'react'; 2 | 3 | export default function Radio({ 4 | label, 5 | value, 6 | selectedValue, 7 | onChange, 8 | }: { 9 | label: string; 10 | value: string; 11 | selectedValue: string; 12 | onChange: ChangeEventHandler; 13 | }) { 14 | return ( 15 | 31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /pages/tools/components/ui/Tag.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from 'react'; 2 | import classnames from 'classnames'; 3 | 4 | interface TagProps { 5 | children: ReactNode; 6 | intent?: 'success' | 'warning' | 'error' | 'neutral'; 7 | } 8 | 9 | const Tag = ({ children, intent = 'neutral' }: TagProps) => { 10 | return ( 11 |
25 | {children} 26 |
27 | ); 28 | }; 29 | 30 | export default Tag; 31 | -------------------------------------------------------------------------------- /pages/tools/lib/getDistinctEntries.ts: -------------------------------------------------------------------------------- 1 | import jsonpath from 'jsonpath'; 2 | 3 | const getDistinctEntries = ( 4 | data: T, 5 | path: string, 6 | exclude: Array = [], 7 | ): Array => { 8 | if (!data || typeof data !== 'object') { 9 | throw new Error('Invalid data input. Expected an object or an array.'); 10 | } 11 | if (typeof path !== 'string') { 12 | throw new Error('Invalid path input. Expected a string.'); 13 | } 14 | 15 | const values = Array.from(new Set(jsonpath.query(data, path))); 16 | 17 | return values.filter((value) => !exclude.includes(value)); 18 | }; 19 | 20 | export default getDistinctEntries; 21 | -------------------------------------------------------------------------------- /pages/tools/lib/toTitleCase.ts: -------------------------------------------------------------------------------- 1 | export default function toTitleCase( 2 | text: string, 3 | delimiter: string = ' ', 4 | separator: string = ' ', 5 | ) { 6 | return text 7 | .split(delimiter) 8 | .map(function (word: string) { 9 | return word.charAt(0).toUpperCase() + word.slice(1); 10 | }) 11 | .join(separator); 12 | } 13 | -------------------------------------------------------------------------------- /pages/understanding-json-schema/credits.md: -------------------------------------------------------------------------------- 1 | --- 2 | section: docs 3 | title: "Acknowledgments" 4 | --- 5 | 6 | Michael Droettboom wishes to thank the following contributors: 7 | 8 | - Alexander Kjeldaas 9 | - Alexander Lang 10 | - Anders D. Johnson 11 | - Armand Abric 12 | - Ben Hutton 13 | - Brandon Wright 14 | - Brent Tubbs 15 | - Chris Carpenter 16 | - Christopher Mark Gore 17 | - David Branner 18 | - David Michael Karr 19 | - David Worth 20 | - E. M. Bray 21 | - Fenhl 22 | - forevermatt 23 | - goldaxe 24 | - Henry Andrews 25 | - Hervé 26 | - Hongwei 27 | - Jesse Claven 28 | - Koen Rouwhorst 29 | - Mike Kobit 30 | - Oliver Kurmis 31 | - Sam Blackman 32 | - Vincent Jacques 33 | -------------------------------------------------------------------------------- /pages/understanding-json-schema/index.page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { getLayout } from '~/components/Sidebar'; 3 | import fs from 'fs'; 4 | import matter from 'gray-matter'; 5 | import StyledMarkdown from '~/components/StyledMarkdown'; 6 | import { DocsHelp } from '~/components/DocsHelp'; 7 | import { SectionContext } from '~/context'; 8 | import NextPrevButton from '~/components/NavigationButtons'; 9 | 10 | export async function getStaticProps() { 11 | const block1 = fs.readFileSync( 12 | 'pages/understanding-json-schema/_index.md', 13 | 'utf-8', 14 | ); 15 | const { content: block1Content } = matter(block1); 16 | return { 17 | props: { 18 | blocks: [block1Content], 19 | }, 20 | }; 21 | } 22 | export default function ContentExample({ 23 | blocks, 24 | }: { 25 | blocks: any[]; 26 | frontmatter: any; 27 | content: any; 28 | }) { 29 | const fileRenderType = '_indexmd'; 30 | return ( 31 | 32 | 33 | 39 | 40 | 41 | ); 42 | } 43 | ContentExample.getLayout = getLayout; 44 | -------------------------------------------------------------------------------- /pages/understanding-json-schema/reference/_index.md: -------------------------------------------------------------------------------- 1 | JSON Schema Reference 2 | ===================== 3 | 4 | * [Type-specific keywords](reference/type) 5 | * [string](reference/string) 6 | * [Regular Expressions](reference/regular_expressions) 7 | * [Numeric types](reference/numeric) 8 | * [object](reference/object) 9 | * [array](reference/array) 10 | * [boolean](reference/boolean) 11 | * [null](reference/null) 12 | * [Generic keywords](reference/generic) 13 | * [Annotations](reference/annotations) 14 | * [Comments](reference/comments) 15 | * [Enumerated values](reference/enum) 16 | * [Constant values](reference/const) 17 | * [Media: string-encoding non-JSON data](reference/non_json_data) 18 | * [Schema Composition](reference/combining) 19 | * [Applying Subschemas Conditionally](reference/conditionals) 20 | * [Declaring a Dialect](reference/schema) -------------------------------------------------------------------------------- /pages/understanding-json-schema/reference/boolean.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "boolean" 3 | section: docs 4 | prev: 5 | label: Array 6 | url: /understanding-json-schema/reference/array 7 | next: 8 | label: 'Null' 9 | url: /understanding-json-schema/reference/null 10 | --- 11 | 12 | 13 | 14 | The boolean type matches only two special values: `true` and `false`. 15 | Note that values that *evaluate* to `true` or `false`, such as 1 and 0, 16 | are not accepted by the [schema](../../learn/glossary#schema). 17 | 18 | [tabs-start "Language-specific info"] 19 | 20 | [tab "Python"] 21 | In Python, "boolean" is analogous to `bool`. Note that in JSON, 22 | `true` and `false` are lower case, whereas in Python they are 23 | capitalized (`True` and `False`). 24 | 25 | [tab "Ruby"] 26 | In Ruby, "boolean" is analogous to `TrueClass` and `FalseClass`. Note 27 | that in Ruby there is no `Boolean` class. 28 | 29 | [tab "Objective-C"] 30 | In Objective-C, "boolean" is analogous to `BOOL`. 31 | 32 | [tab "Swift"] 33 | In Swift, "boolean" is analogous to `Bool`. 34 | 35 | [tabs-end] 36 | 37 | ```json 38 | // props { "isSchema": true } 39 | { "type": "boolean" } 40 | ``` 41 | ```json 42 | // props { "indent": true, "valid": true } 43 | true 44 | ``` 45 | ```json 46 | // props { "indent": true, "valid": true } 47 | false 48 | ``` 49 | ```json 50 | // props { "indent": true, "valid": false } 51 | "true" 52 | ``` 53 | Values that evaluate to `true` or `false` are still not accepted by the schema: 54 | 55 | ```json 56 | // props { "indent": true, "valid": false } 57 | 0 58 | ``` -------------------------------------------------------------------------------- /pages/understanding-json-schema/reference/comments.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Comments" 3 | section: docs 4 | prev: 5 | label: Annotations 6 | url: /understanding-json-schema/reference/annotations 7 | next: 8 | label: Enumerated values 9 | url: /understanding-json-schema/reference/enum 10 | --- 11 | 12 | 13 | 14 | The `$comment` [keyword](../../learn/glossary#keyword) is strictly intended for adding comments to a 15 | schema. Its value must always be a string. Unlike the annotations 16 | `title`, `description`, and `examples`, JSON schema [implementations](../../learn/glossary#implementation) 17 | aren\'t allowed to attach any meaning or behavior to it whatsoever, and 18 | may even strip them at any time. Therefore, they are useful for leaving 19 | notes to future editors of a JSON schema, but should not be used to 20 | communicate to users of the schema. 21 | 22 | ```json 23 | { 24 | "$comment": "Created by John Doe", 25 | "type": "object", 26 | "properties": { 27 | "country": { 28 | "$comment": "TODO: add enum of countries" 29 | } 30 | } 31 | } 32 | ``` 33 | -------------------------------------------------------------------------------- /pages/understanding-json-schema/reference/composition.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Schema composition" 3 | section: docs 4 | prev: 5 | label: Conditional schema validation 6 | url: /understanding-json-schema/reference/conditionals 7 | next: 8 | label: Boolean JSON Schema combination 9 | url: /understanding-json-schema/reference/combining 10 | --- 11 | 12 | JSON Schema offers powerful features for constructing complex and flexible schema structures. The main approaches to combining JSON schemas are the following: 13 | 14 | - **Modular combination**. This approach allows you to break down your data model into reusable components, fostering modularity, and maintainability. In [Modular JSON Schema combination](../../understanding-json-schema/structuring) you will learn about creating and utilizing reusable schemas, subschemas, and even self-referential (recursive) schemas. 15 | 16 | - **Boolean combination**. This approach allows you to validate a single data value against multiple criteria at the same time. JSON Schema provides a set of keywords that act like boolean operators (AND, OR, NOT) to achieve this. To enhance your understanding of these keywords and learn how to leverage them for complex validations, see [Boolean JSON Schema combination](../../understanding-json-schema/reference/combining). 17 | 18 | By mastering these techniques you will make your JSON schemas more scalable, flexible, and easy to maintain. -------------------------------------------------------------------------------- /pages/understanding-json-schema/reference/const.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Constant values" 3 | section: docs 4 | prev: 5 | label: Enumerated values 6 | url: /understanding-json-schema/reference/enum 7 | next: 8 | label: Schema annotations and comments 9 | url: /understanding-json-schema/reference/metadata 10 | --- 11 | 12 | 13 | 14 | The `const` [keyword](../../learn/glossary#keyword) is used to restrict a value to a single value. 15 | 16 | For example, if you only support shipping to the United States for 17 | export reasons: 18 | 19 | ```json 20 | // props { "isSchema": true } 21 | { 22 | "properties": { 23 | "country": { 24 | "const": "United States of America" 25 | } 26 | } 27 | } 28 | ``` 29 | ```json 30 | // props { "indent": true, "valid": true } 31 | { "country": "United States of America" } 32 | ``` 33 | ```json 34 | // props { "indent": true, "valid": false } 35 | { "country": "Canada" } 36 | ``` -------------------------------------------------------------------------------- /pages/understanding-json-schema/reference/enum.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Enumerated values" 3 | section: docs 4 | prev: 5 | label: Enumerated and Constant Values 6 | url: /understanding-json-schema/reference/generic 7 | next: 8 | label: Constant values 9 | url: /understanding-json-schema/reference/const 10 | --- 11 | 12 | The `enum` [keyword](../../learn/glossary#keyword) is used to restrict a value to a fixed set of values. 13 | It must be an array with at least one element, where each element is 14 | unique. 15 | 16 | The following is an example for validating street light colors: 17 | 18 | ```json 19 | // props { "isSchema": true } 20 | { 21 | "enum": ["red", "amber", "green"] 22 | } 23 | ``` 24 | ```json 25 | // props { "indent": true, "valid": true } 26 | "red" 27 | ``` 28 | ```json 29 | // props { "indent": true, "valid": false } 30 | "blue" 31 | ``` 32 | 33 | You can use `enum` even without a type, to accept values of different 34 | types. Let\'s extend the example to use `null` to indicate \"off\", and 35 | also add 42, just for fun. 36 | 37 | ```json 38 | // props { "isSchema": true } 39 | { 40 | "enum": ["red", "amber", "green", null, 42] 41 | } 42 | ``` 43 | ```json 44 | // props { "indent": true, "valid": true } 45 | "red" 46 | ``` 47 | ```json 48 | // props { "indent": true, "valid": true } 49 | null 50 | ``` 51 | ```json 52 | // props { "indent": true, "valid": true } 53 | 42 54 | ``` 55 | ```json 56 | // props { "indent": true, "valid": false } 57 | 0 58 | ``` -------------------------------------------------------------------------------- /pages/understanding-json-schema/reference/generic.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Enumerated and constant values" 3 | section: docs 4 | prev: 5 | label: Dialect and vocabulary declaration 6 | url: /understanding-json-schema/reference/schema 7 | next: 8 | label: Enumerated values 9 | url: /understanding-json-schema/reference/enum 10 | --- 11 | 12 | The `enum` and `const` keywords contribute to data validation by defining limits on the values a property can hold. 13 | 14 | - **Define a set of values**. Use the `enum` keyword to specify a finite set of acceptable values for a property. This ensures that only predefined options are valid. 15 | 16 | - **Define a fixed, single value**. Use the `const` keyword to force a property to have a single, fixed value. This keyword is more restrictive than `enum`. 17 | 18 | Learn more about how to use these keywords with the following resources: 19 | 20 | - [Enumerated values](../../understanding-json-schema/reference/enum) 21 | - [Constant values](../../understanding-json-schema/reference/const) 22 | 23 | By effectively utilizing these keywords, you can significantly enhance the reliability and accuracy of your JSON data. -------------------------------------------------------------------------------- /pages/understanding-json-schema/reference/null.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "null" 3 | section: docs 4 | prev: 5 | label: boolean 6 | url: /understanding-json-schema/reference/boolean 7 | next: 8 | label: Numeric Types 9 | url: /understanding-json-schema/reference/numeric 10 | --- 11 | 12 | When a [schema](../../learn/glossary#schema) specifies a `type` of `null`, it has only one acceptable value: `null`. 13 | 14 | > It's important to remember that in JSON, `null` isn't equivalent to something being absent. See [Required Properties](../../understanding-json-schema/reference/object#required) for an example. 15 | 16 | [tabs-start "Language-specific info"] 17 | 18 | [tab "Python"] 19 | In Python, `null` is analogous to `None`. 20 | 21 | [tab "Ruby"] 22 | In Ruby, `null` is analogous to `nil`. 23 | 24 | [tab "Objective-C"] 25 | In Objective-C, `null` is analogous to `nil`. 26 | 27 | [tab "Swift"] 28 | In Swift, `null` is analogous to `nil`. 29 | 30 | [tabs-end] 31 | 32 | ```json 33 | // props { "isSchema": true } 34 | { "type": "null" } 35 | ``` 36 | ```json 37 | // props { "indent": true, "valid": true } 38 | null 39 | ``` 40 | ```json 41 | // props { "indent": true, "valid": false } 42 | false 43 | ``` 44 | ```json 45 | // props { "indent": true, "valid": false } 46 | 0 47 | ``` 48 | ```json 49 | // props { "indent": true, "valid": false } 50 | "" 51 | ``` 52 | ```json 53 | // props { "indent": true, "valid": false } 54 | ⠀ 55 | ``` -------------------------------------------------------------------------------- /pages/work-in-progress.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Work In Progress Feedback 3 | --- 4 | 5 | ## Right now 6 | 7 | We're working towards JSON Schema 2022-NN. 8 | 9 | See the [GitHub repository](https://github.com/json-schema-org/json-schema-spec) for ongoing spec work. 10 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /public/UnderstandingJSONSchema.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/UnderstandingJSONSchema.pdf -------------------------------------------------------------------------------- /public/_headers: -------------------------------------------------------------------------------- 1 | # Dialect Schemas 2 | /draft/:draft/*schema 3 | Access-Control-Allow-Origin: * 4 | Content-Type: application/schema+json 5 | Cache-Control: public, max-age=31536000, immutable 6 | 7 | # Vocabulary Schemas 8 | /draft/:draft/meta/* 9 | Access-Control-Allow-Origin: * 10 | Content-Type: application/schema+json 11 | Cache-Control: public, max-age=31536000, immutable 12 | 13 | # Links Schemas 14 | /draft/:draft/links 15 | Access-Control-Allow-Origin: * 16 | Content-Type: application/schema+json 17 | Cache-Control: public, max-age=31536000, immutable 18 | 19 | # Output Schemas 20 | /draft/:draft/output/*schema 21 | Access-Control-Allow-Origin: * 22 | Content-Type: application/schema+json 23 | Cache-Control: public, max-age=31536000, immutable 24 | 25 | # Older Meta-Schemas 26 | /draft-:draft/*schema 27 | Access-Control-Allow-Origin: * 28 | Content-Type: application/schema+json 29 | Cache-Control: public, max-age=31536000, immutable 30 | 31 | # Older Links Schemas 32 | /draft-:draft/links 33 | Access-Control-Allow-Origin: * 34 | Content-Type: application/schema+json 35 | Cache-Control: public, max-age=31536000, immutable 36 | 37 | # Older Ouput Schemas 38 | /draft-07/hyper-schema-output 39 | Access-Control-Allow-Origin: * 40 | Content-Type: application/schema+json 41 | Cache-Control: public, max-age=31536000, immutable 42 | 43 | # JSON Reference Schemas 44 | /draft-:draft/json-ref 45 | Access-Control-Allow-Origin: * 46 | Content-Type: application/schema+json 47 | Cache-Control: public, max-age=31536000, immutable 48 | -------------------------------------------------------------------------------- /public/data/getting-started-examples/instances/conditional-ok.json: -------------------------------------------------------------------------------- 1 | { 2 | "isMember": true, 3 | "membershipNumber": "1234567890" 4 | } 5 | -------------------------------------------------------------------------------- /public/data/getting-started-examples/instances/default-extended-ok.json: -------------------------------------------------------------------------------- 1 | { 2 | "productId": 1, 3 | "productName": "An ice sculpture", 4 | "price": 12.5, 5 | "tags": ["cold", "ice"], 6 | "dimensions": { 7 | "length": 7.0, 8 | "width": 12.0, 9 | "height": 9.5 10 | }, 11 | "warehouseLocation": { 12 | "latitude": -78.75, 13 | "longitude": 20.4 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /public/data/getting-started-examples/instances/default-ko.json: -------------------------------------------------------------------------------- 1 | { 2 | "productId": 1, 3 | "product": "An ice sculpture", 4 | "price": "100" 5 | } 6 | -------------------------------------------------------------------------------- /public/data/getting-started-examples/instances/default-ok.json: -------------------------------------------------------------------------------- 1 | { 2 | "productId": 1, 3 | "productName": "An ice sculpture", 4 | "price": 12.5, 5 | "tags": ["cold", "ice"] 6 | } 7 | -------------------------------------------------------------------------------- /public/data/getting-started-examples/instances/enumerated-ok.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": [1, 2, 3] 3 | } 4 | -------------------------------------------------------------------------------- /public/data/getting-started-examples/instances/regex-ok.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "ABC-123" 3 | } 4 | -------------------------------------------------------------------------------- /public/data/getting-started-examples/schemas/conditional.json: -------------------------------------------------------------------------------- 1 | { 2 | "$id": "https://example.com/conditional-validation-if-else.schema.json", 3 | "$schema": "https://json-schema.org/draft/2020-12/schema", 4 | "title": "Conditional Validation with If-Else", 5 | "type": "object", 6 | "properties": { 7 | "isMember": { 8 | "type": "boolean" 9 | }, 10 | "membershipNumber": { 11 | "type": "string" 12 | } 13 | }, 14 | "required": ["isMember"], 15 | "if": { 16 | "properties": { 17 | "isMember": { 18 | "const": true 19 | } 20 | } 21 | }, 22 | "then": { 23 | "properties": { 24 | "membershipNumber": { 25 | "type": "string", 26 | "minLength": 10, 27 | "maxLength": 10 28 | } 29 | } 30 | }, 31 | "else": { 32 | "properties": { 33 | "membershipNumber": { 34 | "type": "string", 35 | "minLength": 15 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /public/data/getting-started-examples/schemas/default-extended.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "$id": "https://example.com/product.schema.json", 4 | "title": "Product", 5 | "description": "A product from Acme's catalog", 6 | "type": "object", 7 | "properties": { 8 | "productId": { 9 | "description": "The unique identifier for a product", 10 | "type": "integer" 11 | }, 12 | "productName": { 13 | "description": "Name of the product", 14 | "type": "string" 15 | }, 16 | "price": { 17 | "description": "The price of the product", 18 | "type": "number", 19 | "exclusiveMinimum": 0 20 | }, 21 | "tags": { 22 | "description": "Tags for the product", 23 | "type": "array", 24 | "items": { 25 | "type": "string" 26 | }, 27 | "minItems": 1, 28 | "uniqueItems": true 29 | }, 30 | "dimensions": { 31 | "type": "object", 32 | "properties": { 33 | "length": { 34 | "type": "number" 35 | }, 36 | "width": { 37 | "type": "number" 38 | }, 39 | "height": { 40 | "type": "number" 41 | } 42 | }, 43 | "required": ["length", "width", "height"] 44 | }, 45 | "warehouseLocation": { 46 | "description": "Coordinates of the warehouse where the product is located.", 47 | "$ref": "https://example.com/geographical-location.schema.json" 48 | } 49 | }, 50 | "required": ["productId", "productName", "price"] 51 | } 52 | -------------------------------------------------------------------------------- /public/data/getting-started-examples/schemas/default.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2020-12/schema", 3 | "$id": "https://example.com/product.schema.json", 4 | "title": "Product", 5 | "description": "A product from Acme's catalog", 6 | "type": "object", 7 | "properties": { 8 | "productId": { 9 | "description": "The unique identifier for a product", 10 | "type": "integer" 11 | }, 12 | "productName": { 13 | "description": "Name of the product", 14 | "type": "string" 15 | }, 16 | "price": { 17 | "description": "The price of the product", 18 | "type": "number", 19 | "exclusiveMinimum": 0 20 | }, 21 | "tags": { 22 | "description": "Tags for the product", 23 | "type": "array", 24 | "items": { 25 | "type": "string" 26 | }, 27 | "minItems": 1, 28 | "uniqueItems": true 29 | } 30 | }, 31 | "required": ["productId", "productName", "price"] 32 | } 33 | -------------------------------------------------------------------------------- /public/data/getting-started-examples/schemas/enumerated.json: -------------------------------------------------------------------------------- 1 | { 2 | "$id": "https://example.com/enumerated-values.schema.json", 3 | "$schema": "https://json-schema.org/draft/2020-12/schema", 4 | "title": "Enumerated Values", 5 | "type": "object", 6 | "properties": { 7 | "data": { 8 | "enum": [42, true, "hello", null, [1, 2, 3]] 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /public/data/getting-started-examples/schemas/regex.json: -------------------------------------------------------------------------------- 1 | { 2 | "$id": "https://example.com/regex-pattern.schema.json", 3 | "$schema": "https://json-schema.org/draft/2020-12/schema", 4 | "title": "Regular Expression Pattern", 5 | "type": "object", 6 | "properties": { 7 | "code": { 8 | "type": "string", 9 | "pattern": "^[A-Z]{3}-\\d{3}$" 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /public/draft-00/hyper-schema: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-00/hyper-schema.json -------------------------------------------------------------------------------- /public/draft-00/json-ref: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-00/json-ref.json -------------------------------------------------------------------------------- /public/draft-00/links: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-00/links.json -------------------------------------------------------------------------------- /public/draft-00/schema: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-00/schema.json -------------------------------------------------------------------------------- /public/draft-01/hyper-schema: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-01/hyper-schema.json -------------------------------------------------------------------------------- /public/draft-01/json-ref: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-01/json-ref.json -------------------------------------------------------------------------------- /public/draft-01/links: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-01/links.json -------------------------------------------------------------------------------- /public/draft-01/schema: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-01/schema.json -------------------------------------------------------------------------------- /public/draft-02/hyper-schema: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-02/hyper-schema.json -------------------------------------------------------------------------------- /public/draft-02/json-ref: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-02/json-ref.json -------------------------------------------------------------------------------- /public/draft-02/links: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-02/links.json -------------------------------------------------------------------------------- /public/draft-02/schema: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-02/schema.json -------------------------------------------------------------------------------- /public/draft-03/draft-zyp-json-schema-03.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/draft-03/draft-zyp-json-schema-03.pdf -------------------------------------------------------------------------------- /public/draft-03/examples/address: -------------------------------------------------------------------------------- 1 | { 2 | "description" : "An Address following the convention of http://microformats.org/wiki/hcard", 3 | "type" : "object", 4 | "properties" : { 5 | "post-office-box" : { "type" : "string" }, 6 | "extended-address" : { "type" : "string" }, 7 | "street-address" : { "type":"string" }, 8 | "locality" : { "type" : "string", "required" : true }, 9 | "region" : { "type" : "string", "required" : true }, 10 | "postal-code" : { "type" : "string" }, 11 | "country-name" : { "type" : "string", "required" : true } 12 | }, 13 | "dependencies" : { 14 | "post-office-box" : "street-address", 15 | "extended-address" : "street-address", 16 | "street-address" : "region", 17 | "locality" : "region", 18 | "region" : "country-name" 19 | } 20 | } -------------------------------------------------------------------------------- /public/draft-03/examples/calendar: -------------------------------------------------------------------------------- 1 | { 2 | "description" : "A representation of an event", 3 | "type" : "object", 4 | "properties" : { 5 | "dtstart" : { 6 | "format" : "date-time", 7 | "type" : "string", 8 | "description" : "Event starting time", 9 | "required":true 10 | }, 11 | "summary" : { 12 | "type":"string", 13 | "required":true 14 | }, 15 | "location" : { 16 | "type" : "string" 17 | }, 18 | "url" : { 19 | "type" : "string", 20 | "format" : "url" 21 | }, 22 | "dtend" : { 23 | "format" : "date-time", 24 | "type" : "string", 25 | "description" : "Event ending time" 26 | }, 27 | "duration" : { 28 | "format" : "date", 29 | "type" : "string", 30 | "description" : "Event duration" 31 | }, 32 | "rdate" : { 33 | "format" : "date-time", 34 | "type" : "string", 35 | "description" : "Recurrence date" 36 | }, 37 | "rrule" : { 38 | "type" : "string", 39 | "description" : "Recurrence rule" 40 | }, 41 | "category" : { 42 | "type" : "string" 43 | }, 44 | "description" : { 45 | "type" : "string" 46 | }, 47 | "geo" : { "$ref" : "http://json-schema.org/draft-03/geo" } 48 | } 49 | } 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /public/draft-03/examples/geo: -------------------------------------------------------------------------------- 1 | { 2 | "description" : "A geographical coordinate", 3 | "type" : "object", 4 | "properties" : { 5 | "latitude" : { "type" : "number" }, 6 | "longitude" : { "type" : "number" } 7 | } 8 | } -------------------------------------------------------------------------------- /public/draft-03/examples/interfaces: -------------------------------------------------------------------------------- 1 | { 2 | "extends":"http://json-schema.org/hyper-schema", 3 | "description":"A schema for schema interface definitions that describe programmatic class structures using JSON schema syntax", 4 | "properties":{ 5 | "methods":{ 6 | "type":"object", 7 | "description":"This defines the set of methods available to the class instances", 8 | "additionalProperties":{ 9 | "type":"object", 10 | "description":"The definition of the method", 11 | "properties":{ 12 | "parameters":{ 13 | "type":"array", 14 | "description":"The set of parameters that should be passed to the method when it is called", 15 | "items":{"$ref":"#"}, 16 | "required": true 17 | }, 18 | "returns":{"$ref":"#"} 19 | } 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /public/draft-03/hyper-schema: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-03/hyper-schema.json -------------------------------------------------------------------------------- /public/draft-03/json-ref: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-03/json-ref.json -------------------------------------------------------------------------------- /public/draft-03/links: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-03/links.json -------------------------------------------------------------------------------- /public/draft-03/schema: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-03/schema.json -------------------------------------------------------------------------------- /public/draft-04/hyper-schema: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-04/hyper-schema.json -------------------------------------------------------------------------------- /public/draft-04/json-schema-core.html: -------------------------------------------------------------------------------- 1 | draft-zyp-json-schema-04.html -------------------------------------------------------------------------------- /public/draft-04/json-schema-hyperschema.html: -------------------------------------------------------------------------------- 1 | draft-luff-json-hyper-schema-00.html -------------------------------------------------------------------------------- /public/draft-04/json-schema-validation.html: -------------------------------------------------------------------------------- 1 | draft-fge-json-schema-validation-00.html -------------------------------------------------------------------------------- /public/draft-04/links: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-04/links.json -------------------------------------------------------------------------------- /public/draft-04/schema: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-04/schema.json -------------------------------------------------------------------------------- /public/draft-05/draft-wright-json-schema-00.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/draft-05/draft-wright-json-schema-00.pdf -------------------------------------------------------------------------------- /public/draft-05/draft-wright-json-schema-hyperschema-00.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/draft-05/draft-wright-json-schema-hyperschema-00.pdf -------------------------------------------------------------------------------- /public/draft-05/draft-wright-json-schema-validation-00.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/draft-05/draft-wright-json-schema-validation-00.pdf -------------------------------------------------------------------------------- /public/draft-06/hyper-schema: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-06/hyper-schema.json -------------------------------------------------------------------------------- /public/draft-06/json-schema-core.html: -------------------------------------------------------------------------------- 1 | draft-wright-json-schema-01.html -------------------------------------------------------------------------------- /public/draft-06/json-schema-hypermedia.html: -------------------------------------------------------------------------------- 1 | draft-wright-json-schema-hyperschema-01.html -------------------------------------------------------------------------------- /public/draft-06/json-schema-validation.html: -------------------------------------------------------------------------------- 1 | draft-wright-json-schema-validation-01.html -------------------------------------------------------------------------------- /public/draft-06/links: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-06/links.json -------------------------------------------------------------------------------- /public/draft-06/schema: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-06/schema.json -------------------------------------------------------------------------------- /public/draft-07/draft-handrews-json-schema-00.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/draft-07/draft-handrews-json-schema-00.pdf -------------------------------------------------------------------------------- /public/draft-07/draft-handrews-json-schema-validation-00.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/draft-07/draft-handrews-json-schema-validation-00.pdf -------------------------------------------------------------------------------- /public/draft-07/hyper-schema: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-07/hyper-schema.json -------------------------------------------------------------------------------- /public/draft-07/hyper-schema-output: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-07/hyper-schema-output.json -------------------------------------------------------------------------------- /public/draft-07/json-schema-core.html: -------------------------------------------------------------------------------- 1 | draft-handrews-json-schema-01.html -------------------------------------------------------------------------------- /public/draft-07/json-schema-hypermedia.html: -------------------------------------------------------------------------------- 1 | draft-handrews-json-schema-hyperschema-01.html -------------------------------------------------------------------------------- /public/draft-07/json-schema-validation.html: -------------------------------------------------------------------------------- 1 | draft-handrews-json-schema-validation-01.html -------------------------------------------------------------------------------- /public/draft-07/links: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-07/links.json -------------------------------------------------------------------------------- /public/draft-07/relative-json-pointer.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/draft-07/schema: -------------------------------------------------------------------------------- 1 | ../../_includes/draft-07/schema.json -------------------------------------------------------------------------------- /public/draft/2019-09/hyper-schema: -------------------------------------------------------------------------------- 1 | ../../../_includes/draft/2019-09/hyper-schema.json -------------------------------------------------------------------------------- /public/draft/2019-09/json-schema-core.html: -------------------------------------------------------------------------------- 1 | draft-handrews-json-schema-02.html -------------------------------------------------------------------------------- /public/draft/2019-09/json-schema-hypermedia.html: -------------------------------------------------------------------------------- 1 | draft-handrews-json-schema-hyperschema-02.html -------------------------------------------------------------------------------- /public/draft/2019-09/json-schema-validation.html: -------------------------------------------------------------------------------- 1 | draft-handrews-json-schema-validation-02.html -------------------------------------------------------------------------------- /public/draft/2019-09/links: -------------------------------------------------------------------------------- 1 | ../../../_includes/draft/2019-09/links.json -------------------------------------------------------------------------------- /public/draft/2019-09/meta/applicator: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2019-09/meta/applicator.json -------------------------------------------------------------------------------- /public/draft/2019-09/meta/content: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2019-09/meta/content.json -------------------------------------------------------------------------------- /public/draft/2019-09/meta/core: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2019-09/meta/core.json -------------------------------------------------------------------------------- /public/draft/2019-09/meta/format: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2019-09/meta/format.json -------------------------------------------------------------------------------- /public/draft/2019-09/meta/hyper-schema: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2019-09/meta/hyper-schema.json -------------------------------------------------------------------------------- /public/draft/2019-09/meta/meta-data: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2019-09/meta/meta-data.json -------------------------------------------------------------------------------- /public/draft/2019-09/meta/validation: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2019-09/meta/validation.json -------------------------------------------------------------------------------- /public/draft/2019-09/output/hyper-schema: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2019-09/output/hyper-schema.json -------------------------------------------------------------------------------- /public/draft/2019-09/output/schema: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2019-09/output/schema.json -------------------------------------------------------------------------------- /public/draft/2019-09/output/verbose-example: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2019-09/output/verbose-example.json -------------------------------------------------------------------------------- /public/draft/2019-09/schema: -------------------------------------------------------------------------------- 1 | ../../../_includes/draft/2019-09/schema.json -------------------------------------------------------------------------------- /public/draft/2020-12/hyper-schema: -------------------------------------------------------------------------------- 1 | ../../../_includes/draft/2020-12/hyper-schema.json -------------------------------------------------------------------------------- /public/draft/2020-12/json-schema-core.html: -------------------------------------------------------------------------------- 1 | draft-bhutton-json-schema-01.html -------------------------------------------------------------------------------- /public/draft/2020-12/json-schema-validation.html: -------------------------------------------------------------------------------- 1 | draft-bhutton-json-schema-validation-01.html -------------------------------------------------------------------------------- /public/draft/2020-12/links: -------------------------------------------------------------------------------- 1 | ../../../_includes/draft/2020-12/links.json -------------------------------------------------------------------------------- /public/draft/2020-12/meta/applicator: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2020-12/meta/applicator.json -------------------------------------------------------------------------------- /public/draft/2020-12/meta/content: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2020-12/meta/content.json -------------------------------------------------------------------------------- /public/draft/2020-12/meta/core: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2020-12/meta/core.json -------------------------------------------------------------------------------- /public/draft/2020-12/meta/format-annotation: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2020-12/meta/format-annotation.json -------------------------------------------------------------------------------- /public/draft/2020-12/meta/format-assertion: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2020-12/meta/format-assertion.json -------------------------------------------------------------------------------- /public/draft/2020-12/meta/hyper-schema: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2020-12/meta/hyper-schema.json -------------------------------------------------------------------------------- /public/draft/2020-12/meta/meta-data: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2020-12/meta/meta-data.json -------------------------------------------------------------------------------- /public/draft/2020-12/meta/unevaluated: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2020-12/meta/unevaluated.json -------------------------------------------------------------------------------- /public/draft/2020-12/meta/validation: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2020-12/meta/validation.json -------------------------------------------------------------------------------- /public/draft/2020-12/output/schema: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2020-12/output/schema.json -------------------------------------------------------------------------------- /public/draft/2020-12/output/verbose-example: -------------------------------------------------------------------------------- 1 | ../../../../_includes/draft/2020-12/output/verbose-example.json -------------------------------------------------------------------------------- /public/draft/2020-12/relative-json-pointer.html: -------------------------------------------------------------------------------- 1 | draft-bhutton-relative-json-pointer-00.html -------------------------------------------------------------------------------- /public/draft/2020-12/schema: -------------------------------------------------------------------------------- 1 | ../../../_includes/draft/2020-12/schema.json -------------------------------------------------------------------------------- /public/favicon-lightblue.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/favicon-lightblue.ico -------------------------------------------------------------------------------- /public/favicon-white.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/favicon-white.ico -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/favicon.ico -------------------------------------------------------------------------------- /public/icons/arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/book-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /public/icons/book.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /public/icons/bulb.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/icons/bulb2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/cancel-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /public/icons/cancel.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /public/icons/checkmark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /public/icons/clipboard-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /public/icons/clipboard.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /public/icons/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /public/icons/compass-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /public/icons/compass.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /public/icons/copied.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /public/icons/copy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /public/icons/dialect.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/icons/environment.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/icons/external-link-black.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /public/icons/external-link.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /public/icons/eye-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /public/icons/eye.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /public/icons/filter.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/icons/green-tick.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/info-blue.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/icons/info-yellow.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/icons/language.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/icons/left-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /public/icons/menu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /public/icons/moon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/outlink.svg: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /public/icons/red-cross.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 10 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /public/icons/rss.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 12 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /public/icons/star.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/sun.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/theme-switch.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/warning.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | warning-filled 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /public/icons/x-mark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /public/img/ambassadors/Andreas Eberhart.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/ambassadors/Andreas Eberhart.jpg -------------------------------------------------------------------------------- /public/img/ambassadors/Ege Korkan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/ambassadors/Ege Korkan.jpg -------------------------------------------------------------------------------- /public/img/ambassadors/Esther Okafor.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/ambassadors/Esther Okafor.jpg -------------------------------------------------------------------------------- /public/img/ambassadors/illustrations/case-studies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/ambassadors/illustrations/case-studies.png -------------------------------------------------------------------------------- /public/img/ambassadors/illustrations/content.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/ambassadors/illustrations/content.png -------------------------------------------------------------------------------- /public/img/ambassadors/illustrations/contributing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/ambassadors/illustrations/contributing.png -------------------------------------------------------------------------------- /public/img/ambassadors/illustrations/ecosystem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/ambassadors/illustrations/ecosystem.png -------------------------------------------------------------------------------- /public/img/ambassadors/illustrations/speaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/ambassadors/illustrations/speaker.png -------------------------------------------------------------------------------- /public/img/ambassadors/illustrations/video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/ambassadors/illustrations/video.png -------------------------------------------------------------------------------- /public/img/avatars/benhutton.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/avatars/benhutton.webp -------------------------------------------------------------------------------- /public/img/avatars/benjagm.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/avatars/benjagm.webp -------------------------------------------------------------------------------- /public/img/avatars/blessing.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/avatars/blessing.webp -------------------------------------------------------------------------------- /public/img/avatars/daniel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/avatars/daniel.png -------------------------------------------------------------------------------- /public/img/avatars/dhairya.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/avatars/dhairya.webp -------------------------------------------------------------------------------- /public/img/avatars/gregsdennis.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/avatars/gregsdennis.webp -------------------------------------------------------------------------------- /public/img/avatars/jasondesrosiers.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/avatars/jasondesrosiers.jpeg -------------------------------------------------------------------------------- /public/img/avatars/julian.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/avatars/julian.webp -------------------------------------------------------------------------------- /public/img/avatars/jviotti.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/avatars/jviotti.webp -------------------------------------------------------------------------------- /public/img/avatars/loiclefevre.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/avatars/loiclefevre.webp -------------------------------------------------------------------------------- /public/img/avatars/melinda.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/avatars/melinda.webp -------------------------------------------------------------------------------- /public/img/avatars/mikeralphson.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/avatars/mikeralphson.webp -------------------------------------------------------------------------------- /public/img/avatars/onyedikachi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/avatars/onyedikachi.jpg -------------------------------------------------------------------------------- /public/img/avatars/simonplenderleith.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/avatars/simonplenderleith.webp -------------------------------------------------------------------------------- /public/img/avatars/valeria.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/avatars/valeria.webp -------------------------------------------------------------------------------- /public/img/avatars/yanick.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/avatars/yanick.jpg -------------------------------------------------------------------------------- /public/img/avatars/yeray.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/avatars/yeray.webp -------------------------------------------------------------------------------- /public/img/community/ambassadors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/community/ambassadors.png -------------------------------------------------------------------------------- /public/img/event/Json-Schema-Blog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/event/Json-Schema-Blog.png -------------------------------------------------------------------------------- /public/img/event/meet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/event/meet.png -------------------------------------------------------------------------------- /public/img/home-page/cover-1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/home-page/cover-1.jpeg -------------------------------------------------------------------------------- /public/img/home-page/cover-2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/home-page/cover-2.jpeg -------------------------------------------------------------------------------- /public/img/home-page/slack-json-schema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/home-page/slack-json-schema.png -------------------------------------------------------------------------------- /public/img/home-page/slack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/home-page/slack.png -------------------------------------------------------------------------------- /public/img/logos/algolia-logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/logos/algolia-logo-white.png -------------------------------------------------------------------------------- /public/img/logos/cookpad-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/logos/cookpad-logo.png -------------------------------------------------------------------------------- /public/img/logos/dark-mode/airbnb_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/logos/dark-mode/airbnb_white.png -------------------------------------------------------------------------------- /public/img/logos/github_logo-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/img/logos/globe-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /public/img/logos/icons8-linkedin-2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/img/logos/icons8-youtube.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/img/logos/netlify-white-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/logos/netlify-white-logo.png -------------------------------------------------------------------------------- /public/img/logos/orbit-logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/logos/orbit-logo-white.png -------------------------------------------------------------------------------- /public/img/logos/remote-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/logos/remote-logo.png -------------------------------------------------------------------------------- /public/img/logos/rss.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/img/logos/speaker-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /public/img/logos/sponsors/airbnb-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/logos/sponsors/airbnb-logo.png -------------------------------------------------------------------------------- /public/img/logos/sponsors/anon-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/logos/sponsors/anon-black.png -------------------------------------------------------------------------------- /public/img/logos/sponsors/anon-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/logos/sponsors/anon-white.png -------------------------------------------------------------------------------- /public/img/logos/sponsors/apideck-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/logos/sponsors/apideck-logo.png -------------------------------------------------------------------------------- /public/img/logos/sponsors/copycopter-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/logos/sponsors/copycopter-white.png -------------------------------------------------------------------------------- /public/img/logos/sponsors/copycopter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/logos/sponsors/copycopter.png -------------------------------------------------------------------------------- /public/img/logos/supported/netlify-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/logos/supported/netlify-logo.png -------------------------------------------------------------------------------- /public/img/logos/supported/orbit-logo-color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/logos/supported/orbit-logo-color.png -------------------------------------------------------------------------------- /public/img/logos/usedby/github-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/logos/usedby/github-white.png -------------------------------------------------------------------------------- /public/img/logos/usedby/microsoft-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/logos/usedby/microsoft-white.png -------------------------------------------------------------------------------- /public/img/logos/usedby/postman-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/logos/usedby/postman-white.png -------------------------------------------------------------------------------- /public/img/logos/usedby/zapier-logo_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/logos/usedby/zapier-logo_white.png -------------------------------------------------------------------------------- /public/img/logos/wot-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/logos/wot-logo.png -------------------------------------------------------------------------------- /public/img/logos/x-twitter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/img/media-keywords.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/media-keywords.png -------------------------------------------------------------------------------- /public/img/posts/2021/bundling-json-schema-compound-documents/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2021/bundling-json-schema-compound-documents/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2021/code-of-conduct-for-json-schema/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2021/code-of-conduct-for-json-schema/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2021/cookpad-case-study/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2021/cookpad-case-study/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2021/cookpad-case-study/fridge.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2021/cookpad-case-study/fridge.webp -------------------------------------------------------------------------------- /public/img/posts/2021/cookpad-case-study/office.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2021/cookpad-case-study/office.webp -------------------------------------------------------------------------------- /public/img/posts/2021/validating-openapi-and-json-schema/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2021/validating-openapi-and-json-schema/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2022/and-then-there-were-three/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/and-then-there-were-three/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2022/bowtie-intro/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/bowtie-intro/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2022/dynamicref-and-generics/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/dynamicref-and-generics/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2022/fixing-json-schema-output/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/fixing-json-schema-output/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2022/fundamentals-part-1/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/fundamentals-part-1/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2022/fundamentals-part-1/tt/XOR1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/fundamentals-part-1/tt/XOR1.webp -------------------------------------------------------------------------------- /public/img/posts/2022/fundamentals-part-1/tt/XOR2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/fundamentals-part-1/tt/XOR2.webp -------------------------------------------------------------------------------- /public/img/posts/2022/fundamentals-part-1/tt/allOf.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/fundamentals-part-1/tt/allOf.webp -------------------------------------------------------------------------------- /public/img/posts/2022/fundamentals-part-1/tt/anyOf.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/fundamentals-part-1/tt/anyOf.webp -------------------------------------------------------------------------------- /public/img/posts/2022/fundamentals-part-1/tt/oneOf.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/fundamentals-part-1/tt/oneOf.webp -------------------------------------------------------------------------------- /public/img/posts/2022/get-started-with-json-schema-in-node-js/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/get-started-with-json-schema-in-node-js/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2022/hello-world-hello-postman/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/hello-world-hello-postman/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2022/hyperborea/cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/hyperborea/cover.jpg -------------------------------------------------------------------------------- /public/img/posts/2022/joining-postman/baldy-hs-web.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/joining-postman/baldy-hs-web.webp -------------------------------------------------------------------------------- /public/img/posts/2022/json-schema-in-5-minutes/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/json-schema-in-5-minutes/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2022/json-schema-joins-the-openjsf/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/json-schema-joins-the-openjsf/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2022/stability/arches.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/stability/arches.webp -------------------------------------------------------------------------------- /public/img/posts/2022/the-architectural-scope-of-json-schema/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/the-architectural-scope-of-json-schema/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2022/the-last-breaking-change/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/the-last-breaking-change/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2022/tyler-technologies-case-study/2187563_0051.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/tyler-technologies-case-study/2187563_0051.webp -------------------------------------------------------------------------------- /public/img/posts/2022/tyler-technologies-case-study/2187563_0278.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/tyler-technologies-case-study/2187563_0278.webp -------------------------------------------------------------------------------- /public/img/posts/2022/tyler-technologies-case-study/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/tyler-technologies-case-study/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2022/w3c-wot-case-study/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/w3c-wot-case-study/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2022/w3c-wot-case-study/wot-examples.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2022/w3c-wot-case-study/wot-examples.webp -------------------------------------------------------------------------------- /public/img/posts/2023/6-river-systems-case-study/chuck.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/6-river-systems-case-study/chuck.webp -------------------------------------------------------------------------------- /public/img/posts/2023/6-river-systems-case-study/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/6-river-systems-case-study/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2023/6-river-systems-case-study/manage.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/6-river-systems-case-study/manage.webp -------------------------------------------------------------------------------- /public/img/posts/2023/apidays-paris-2023-recap/apidays-paris-2023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/apidays-paris-2023-recap/apidays-paris-2023.png -------------------------------------------------------------------------------- /public/img/posts/2023/apidays-paris-2023-recap/booth-apidays.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/apidays-paris-2023-recap/booth-apidays.jpeg -------------------------------------------------------------------------------- /public/img/posts/2023/custom-annotations-will-continue/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/custom-annotations-will-continue/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2023/github-case-study/building.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/github-case-study/building.webp -------------------------------------------------------------------------------- /public/img/posts/2023/github-case-study/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/github-case-study/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2023/github-case-study/working.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/github-case-study/working.webp -------------------------------------------------------------------------------- /public/img/posts/2023/hello-2023--hello-json-schema-community/jai.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/hello-2023--hello-json-schema-community/jai.webp -------------------------------------------------------------------------------- /public/img/posts/2023/interpreting-output/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/interpreting-output/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2023/json-schema-adopters/join-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/json-schema-adopters/join-button.png -------------------------------------------------------------------------------- /public/img/posts/2023/json-schema-adopters/patrick-tomasso.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/json-schema-adopters/patrick-tomasso.jpg -------------------------------------------------------------------------------- /public/img/posts/2023/modelling-inheritance/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/modelling-inheritance/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2023/new-website/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/new-website/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2023/new-website/site-2016.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/new-website/site-2016.webp -------------------------------------------------------------------------------- /public/img/posts/2023/postman-case-study/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/postman-case-study/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2023/remote-case-study/Remote-Contract details.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/remote-case-study/Remote-Contract details.webp -------------------------------------------------------------------------------- /public/img/posts/2023/remote-case-study/Remote-Form builder.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/remote-case-study/Remote-Form builder.webp -------------------------------------------------------------------------------- /public/img/posts/2023/remote-case-study/blog-image.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/remote-case-study/blog-image.webp -------------------------------------------------------------------------------- /public/img/posts/2023/remote-case-study/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/remote-case-study/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2023/schema-static-analysis/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/schema-static-analysis/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2023/website-analytics-snapshot-2023/Screenshot 2023-07-21 at 12.12.31.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/website-analytics-snapshot-2023/Screenshot 2023-07-21 at 12.12.31.webp -------------------------------------------------------------------------------- /public/img/posts/2023/website-analytics-snapshot-2023/Screenshot 2023-07-31 at 10.39.20.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/website-analytics-snapshot-2023/Screenshot 2023-07-31 at 10.39.20.webp -------------------------------------------------------------------------------- /public/img/posts/2023/website-analytics-snapshot-2023/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2023/website-analytics-snapshot-2023/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2024/GSOD-docs-project-2024/duy-pham.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/GSOD-docs-project-2024/duy-pham.webp -------------------------------------------------------------------------------- /public/img/posts/2024/apidays-paris-2024-recap/json-schema-conference.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/apidays-paris-2024-recap/json-schema-conference.png -------------------------------------------------------------------------------- /public/img/posts/2024/apidays-paris-2024-recap/json-schema-team.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/apidays-paris-2024-recap/json-schema-team.jpg -------------------------------------------------------------------------------- /public/img/posts/2024/apidays-paris-2024-recap/loic-lefevre-talk.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/apidays-paris-2024-recap/loic-lefevre-talk.jpg -------------------------------------------------------------------------------- /public/img/posts/2024/json-schema-ambassadors/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/json-schema-ambassadors/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2024/manfred-case-study/MAC_Export.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/manfred-case-study/MAC_Export.webp -------------------------------------------------------------------------------- /public/img/posts/2024/manfred-case-study/MAC_Structure.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/manfred-case-study/MAC_Structure.webp -------------------------------------------------------------------------------- /public/img/posts/2024/manfred-case-study/background.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/manfred-case-study/background.webp -------------------------------------------------------------------------------- /public/img/posts/2024/manfred-case-study/manfred_team.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/manfred-case-study/manfred_team.webp -------------------------------------------------------------------------------- /public/img/posts/2024/manfred-case-study/period.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/manfred-case-study/period.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/cover.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/directed-graph.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/directed-graph.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-1.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-2.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-internal-align.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-internal-align.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-pop-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-pop-1.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-pop-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-pop-2.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-pop-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-pop-3.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-pop-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-pop-4.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-pop-5.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-pop-5.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-ref-remote-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-ref-remote-1.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-ref-remote-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-ref-remote-2.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-ref-remote-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-ref-remote-3.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-ref-remote-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/dynamic-scope-ref-remote-4.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/lexical-scope-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/lexical-scope-1.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/lexical-scope-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/lexical-scope-2.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/lexical-scope-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/lexical-scope-3.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/lexical-scope-ref-local.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/lexical-scope-ref-local.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/lexical-scope-ref-remote-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/lexical-scope-ref-remote-1.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/lexical-scope-ref-remote-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/lexical-scope-ref-remote-2.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/lexical-scope-ref-remote-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/lexical-scope-ref-remote-3.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/scopes-multiple-ids.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/scopes-multiple-ids.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/scopes-schema-resources.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/scopes-schema-resources.webp -------------------------------------------------------------------------------- /public/img/posts/2024/understanding-lexical-dynamic-scopes/scopes-static-anchors.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2024/understanding-lexical-dynamic-scopes/scopes-static-anchors.webp -------------------------------------------------------------------------------- /public/img/posts/2025/gsoc24/gsoc24-banner-main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2025/gsoc24/gsoc24-banner-main.png -------------------------------------------------------------------------------- /public/img/posts/2025/oracle-case-study/banner.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2025/oracle-case-study/banner.webp -------------------------------------------------------------------------------- /public/img/posts/2025/oracle-case-study/blog_frontpage.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2025/oracle-case-study/blog_frontpage.webp -------------------------------------------------------------------------------- /public/img/posts/2025/oracle-case-study/converged_database.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2025/oracle-case-study/converged_database.webp -------------------------------------------------------------------------------- /public/img/posts/2025/oracle-case-study/form.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2025/oracle-case-study/form.webp -------------------------------------------------------------------------------- /public/img/posts/2025/oracle-case-study/json-schema-form.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2025/oracle-case-study/json-schema-form.webp -------------------------------------------------------------------------------- /public/img/posts/2025/rxdb-case-study/cover.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2025/rxdb-case-study/cover.jpeg -------------------------------------------------------------------------------- /public/img/posts/2025/stable-json-schema/mt-taranaki.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/posts/2025/stable-json-schema/mt-taranaki.webp -------------------------------------------------------------------------------- /public/img/scroll.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 10 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /public/img/tools/adding_your_tool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/tools/adding_your_tool.png -------------------------------------------------------------------------------- /public/img/tools/logos/justinrainbow-json-schema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/tools/logos/justinrainbow-json-schema.png -------------------------------------------------------------------------------- /public/img/tools/try_bowtie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/tools/try_bowtie.png -------------------------------------------------------------------------------- /public/img/what-is-json-schema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/img/what-is-json-schema.png -------------------------------------------------------------------------------- /public/understanding/fail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/understanding/fail.png -------------------------------------------------------------------------------- /public/understanding/fail.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /public/understanding/jsonschema.js: -------------------------------------------------------------------------------- 1 | function supports_html5_storage() { 2 | try { 3 | return 'localStorage' in window && window['localStorage'] !== null; 4 | } catch (e) { 5 | return false; 6 | } 7 | } 8 | 9 | 10 | if (supports_html5_storage()) { 11 | $(function(){ 12 | /* Upon loading, set all language-specific tabs to the 13 | preferred language. */ 14 | var language = localStorage.getItem("preferred-language"); 15 | if (language) { 16 | var tabs = $jqTheme('a[data-toggle="tab"]'); 17 | for (var i = 0; i < tabs.size(); ++i) { 18 | var href = tabs[i].href; 19 | if (href.split("_")[1] == language) { 20 | $jqTheme('a[href="#' + href.split('#')[1] + '"]').tab("show"); 21 | } 22 | } 23 | } 24 | 25 | $jqTheme('a[data-toggle="tab"]').on('shown', function (e) { 26 | var language = e.target.href.split("_")[1]; 27 | localStorage.setItem("preferred-language", language); 28 | }) 29 | }) 30 | } 31 | -------------------------------------------------------------------------------- /public/understanding/logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/understanding/logo.ico -------------------------------------------------------------------------------- /public/understanding/logo.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/understanding/logo.pdf -------------------------------------------------------------------------------- /public/understanding/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/understanding/logo.png -------------------------------------------------------------------------------- /public/understanding/octopus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/understanding/octopus.png -------------------------------------------------------------------------------- /public/understanding/pass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/understanding/pass.png -------------------------------------------------------------------------------- /public/understanding/pass.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /public/understanding/schema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/json-schema-org/website/169a5246941b9cb3e07b93dc82947c0459bf65a8/public/understanding/schema.png -------------------------------------------------------------------------------- /store.ts: -------------------------------------------------------------------------------- 1 | import { create } from 'zustand'; 2 | 3 | type Store = { 4 | overlayNavigation: null | 'docs'; 5 | }; 6 | 7 | const useStore = create(() => ({ 8 | overlayNavigation: null, 9 | })); 10 | 11 | export default useStore; 12 | -------------------------------------------------------------------------------- /svgr.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.svg' { 2 | import { FC, SVGProps } from 'react'; 3 | const content: FC>; 4 | export default content; 5 | } 6 | 7 | declare module '*.svg?url' { 8 | const content: any; 9 | export default content; 10 | } 11 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2018", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true, 17 | "baseUrl": ".", 18 | "paths": { 19 | "react": ["./node_modules/@types/react"], 20 | "~/*": ["./*"], 21 | "@public/*": ["./public/*"], 22 | "@/*": ["./*"] 23 | } 24 | }, 25 | "include": ["next-env.d.ts", "svgr.d.ts", "**/*.ts", "**/*.tsx"], 26 | "exclude": ["node_modules"] 27 | } 28 | --------------------------------------------------------------------------------