├── .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 |
18 | {ambassadorList.contents.map((link) => (
19 | -
24 |
29 |
30 | {link.title}
31 |
32 |
33 | {link.details}
34 |
35 |
36 | ))}
37 |
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 |
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 |
--------------------------------------------------------------------------------
/public/icons/book-dark.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/icons/book.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/icons/bulb.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/public/icons/bulb2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/icons/cancel-dark.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/icons/cancel.svg:
--------------------------------------------------------------------------------
1 |
2 |
16 |
--------------------------------------------------------------------------------
/public/icons/checkmark.svg:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/public/icons/clipboard-dark.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/icons/clipboard.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/icons/close.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/icons/compass-dark.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/icons/compass.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/icons/copied.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/icons/copy.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/icons/dialect.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/public/icons/environment.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/public/icons/external-link-black.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/icons/external-link.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/icons/eye-dark.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/public/icons/eye.svg:
--------------------------------------------------------------------------------
1 |
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 |
9 |
--------------------------------------------------------------------------------
/public/icons/menu.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/icons/moon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/icons/outlink.svg:
--------------------------------------------------------------------------------
1 |
9 |
10 |
--------------------------------------------------------------------------------
/public/icons/red-cross.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
18 |
--------------------------------------------------------------------------------
/public/icons/rss.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
18 |
--------------------------------------------------------------------------------
/public/icons/star.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/icons/sun.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/icons/theme-switch.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/icons/warning.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/public/icons/x-mark.svg:
--------------------------------------------------------------------------------
1 |
2 |
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 |
4 |
--------------------------------------------------------------------------------
/public/img/logos/globe-white.svg:
--------------------------------------------------------------------------------
1 |
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 |
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 |
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 |
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 |
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 |
--------------------------------------------------------------------------------