
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
json-schema-forms
Advanced tools
A JavaScript tool that generates HTML forms from JSON Schemas.
This implementation accepts schemas following the JSON Schema Draft 2019-09 specification, and provides Bootstrap (4.5+) and Font Awesome (5.13+) to organize and decorate the layout. While these libraries are not required, they are highly recommended to get the form properly rendered by the browser.
JsonSchemaForms makes use of the JSON Schema $Ref Parser in order to resolve and dereference the schemas to be processed.
The JsonSchemaForms module provides a build() function that performs the whole process of analyzing a JSON Schema and generating the DOM and internal representation of the form. Have a look at the JsonSchemaForms.build() API for usage details.
The quickly and easy way to make JsonSchemaForms available to your scripts, by adding a few CDN links to your HTML code.
JsonSchemaForms provides a script and style sheet that can be linked adding the following tags:
<link
rel="stylesheet"
type="text/css"
href="https://cdn.jsdelivr.net/npm/json-schema-forms@latest/css/json-schema-forms.min.css"
/>
<script src="https://cdn.jsdelivr.net/npm/json-schema-forms@latest/dist/json-schema-forms.min.js"></script>
On top of that, as mentioned before, Bootstrap and Font Awesome allow for a nice-looking result, so their CDN links are recommended to be included, too.
Hence, the full picture of a barebone example.html using JsonSchemaForms CDN ends up looking like this:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<!-- Bootstrap-related style -->
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
<link
rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"
integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk"
crossorigin="anonymous"
/>
<!-- JsonSchemaForms style sheet -->
<link
rel="stylesheet"
type="text/css"
href="https://cdn.jsdelivr.net/npm/json-schema-forms@latest/css/json-schema-forms.min.css"
/>
</head>
<body>
<!-- Bootstrap and Font Awesome scripts -->
<script
src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
crossorigin="anonymous"
></script>
<script
src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
crossorigin="anonymous"
></script>
<script
src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"
integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI"
crossorigin="anonymous"
></script>
<script
src="https://kit.fontawesome.com/64968f57be.js"
crossorigin="anonymous"
></script>
<!-- JsonSchemaForms script -->
<script src="https://cdn.jsdelivr.net/npm/json-schema-forms@latest/dist/json-schema-forms.min.js"></script>
<!-- Your script -->
<script src="./example.js"></script>
<!-- Some containers to use by your script -->
<div id="form-container"></div>
<pre id="json-result"></pre>
</body>
</html>
Now, let us define our basic example.js script.
// You've got two options in order to plug your JSON Schema:
// 1. Provide a URL to a JSON Schema.
// 2. Directly assign an object following the JSON Schema format.
// const schema = 'http://landarltracker.com/schemas/test.json';
const schema = {
title: 'The Root Form Element',
description: 'Easy, right?',
type: 'string',
};
// Also, you can define the form behavior on submission, e.g.:
const submitCallback = (rootFormElement) => {
// Show the resulting JSON instance in your page.
document.getElementById('json-result').innerText = JSON.stringify(
rootFormElement.getInstance(),
null,
2
);
// (For testing purposes, return false to prevent automatic redirect.)
return false;
};
// Finally, get your form...
const jsonSchemaForm = JsonSchemaForms.build(schema, submitCallback);
// ... and attach it somewhere to your page.
window.addEventListener('load', () => {
document.getElementById('form-container').appendChild(jsonSchemaForm);
});
This example works directly out of the box. Feel free to copy, paste, and play around with it!
If you prefer to import it into your own project, use your favorite package manager to install it:
yarn add json-schema-forms
or
npm i json-schema-forms
And just make it available by including at the top of your script:
import JsonSchemaForms from 'json-schema-forms';
Then, you can use it as shown in example.js through the build() function
(check the API docs for detailed information).
Base code is still under work, being several features not yet covered (but expected to be):
patternProperties) and validation keywords.JsonSchemaForms was initially conceived as a basis for a specialized version to be used in the framework of the Cookbase Project.
FAQs
A pure JavaScript tool that generates HTML forms from JSON Schemas.
We found that json-schema-forms demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.