Big news!Introducing Socket AI - ChatGPT-Powered Threat Analysis. Learn more
Log inDemoInstall


Package Overview
File Explorer

Advanced tools


Vue 2 Vanilla renderers for JSON Forms


Version published
Weekly downloads
decreased by-17.87%

Weekly downloads




Sponsored Development

  • i18n Internationalization feature
  • ongoing maintenance of the Vuetify renderer set

Funded by the Gordon and Betty Moore Foundation. (Grant Agreement #10485). Sponsored by Crossref, as part of our commitment to open scholarly infrastructure.

Detailed changes

[all packages] i18n Internationalizaton support (#2023, #1974, #1944, #1879, #1848, #1825, #1966, #1954, #1939) [all packages] readOnly support (#2019, #1860, #1763) [all packages] Provide additional tester context (#1975) [all packages] Readme and documentation (#1875, #1793, #1764) [all packages] Integrate external errors in form (#1937) [all packages] Encode '/' in prop name (#1834) [all packages] Improve reference resolving (#1829, #2001) [all packages] Update ajv to version 8 (#1739, #1827) [all packages] Deleting values instead of storing empty string (#1961, #1984) [all packages] Properly determine UI Schemas (#1940)

[core] Add additional interfaces for Scoped, Labelable and Labeled ui elements. (#1935) [core] allow other additional types besides 'string' when testing for format (#1925) [core] Add support for 'then/else' paths (#1909) [core] Recognize arrays with union type items as nested object arrays again (#2000) [core] Move logic out of index files (#1766) [core] Add support for const constraint in combinator mappings (#1788)

[angular, core, material, vanilla] Improve Time Pickers (#1792) [core, react, vue] Various minor adjustments (#1932)

[react] Debounce emitted events in React (#1864) [react] Add uischemas to dependency array (#1836)

[core, material, react, vanilla] Improve React.memo performance (#1814)

[material] Update MUI to version 5 (#1812, #1911) [material] Add debounce for input material controls (#1813) [material] Differentiate between sort buttons (#1955) [material] Fix control mode of React Material radio group (#2009) [material] Migrate material date- and time pickers from mui/lab to mui/x-date-pickers (#2002) [material] Refactor MuiAutocomplete (#1950, #1982) [material] Add default views for material date/time controls (#1960) [material] Pass all props in the MaterialArrayLayoutRenderer (#1951) [material] Pass through original values for invalid dates (#1949) [material] Preserve enum labels in React Material enum array (#1904) [material] Don't modify user-schemas in Material Object Renderer (#1871) [material] Rename ExpansionPanel to Accordion as suggested by Material UI (#1776) [material] reset state on prop change for detailList (#2006) [material] Fix type-imports according to the release notes of TypeScript 3.8 (#1845) [material] Use filtered categories in childProps (#1789) [material] Add required prop to Inputs (#1798) [material] Explicitly check for undefined and null (#1796)

[vanilla] Rework Vanilla Layout Arrray Control (#1957, #1990, #2011) [vanilla] Fix React Vanilla time renderer format (#1962) [vanilla] Fix Vanilla IntegerCell not rendering zero (#1916) [vanilla] Add special className to style boolean cells (checkbox) in Vanilla package (#1865) [vanilla] Use validationError classes defined in styles. This way this can be ovewriten by users (#1866) [vanilla] Add customizable CSS classes to vanilla radio group (#1843) [vanilla] Allow to pass as UISchema options placeholder attribute for TextCell and TextAreaCell cells (#1844) [vanilla] Register RadioGroupControl in React Vanilla (#1791) [vanilla] Remove redux vanilla (#1802)

[material, vanilla] Disable group elements on group disable rule (#1794)

[angular-material, angular] Update Angular packages (#1869) [angular, angular-material] Compatibility with Angular 14 (#1979) [angular-material] Update RXJS peer dependency version to include ^7.4.0 (#2015) [angular-material, angular, core] Build ESM and CommonJS modules (#1858) [angular, angular-material] Add JsonFormsAbstractControl to exported classes (#1785) [angular-material] Improve label handling in MasterListComponent (#1786)

[vue] add binding for one enum cell elements (#1919) [vue2] Remove composition-api plugin & upgrade to vue 2.7 (#1981)

[examples] Improve Vue Vanilla demo app (#1968) [examples] Enhance example app (#1877) [examples] Remove redux from example package (#1828) [development] Remote container setup for VS-Code (#1809, #1941, #1945)

Many thanks to @rsoika, @marcianos, @kchobantonov, @sunnysingh, @wienczny, @jdwit, @nmaier95, @JoshuaFortriede, @nmay231, @rokiyama, @andresgutgon, @mirismaili, @awolokita, @larsw, @richturner, @onerzafer for their great contributions!

Special thanks to @kchobantonov for his amazing Vuetify renderer set contribution!

Very special thanks to CrossRef for the ongoing sponsoring!



JSON Forms - More Forms. Less Code

Complex Forms in the blink of an eye

JSON Forms eliminates the tedious task of writing fully-featured forms by hand by leveraging the capabilities of JSON, JSON Schema and Javascript.

Vue 2 Vanilla Renderers

This is the JSON Forms Vue 2 Vanilla renderers package which provides a HTML5-based renderer set for JSON Forms Vue 2.

JSON Forms Vue 2 seed app

See our JSON Forms Vue seed repository to get started as quickly as possible. Make sure to switch to branch vue2.

Quick start

Install JSON Forms Core, Vue 2 and Vue 2 Vanilla Renderers.

npm i --save @jsonforms/core @jsonforms/vue2 @jsonforms/vue2-vanilla

Also add the packages to the transpile dependencies in the vue.config.js file:

module.exports = { transpileDependencies: ['@jsonforms/core', '@jsonforms/vue2', '@jsonforms/vue2-vanilla'] }

Use the json-forms component for each form you want to render and hand over the renderer set.

<script> import { JsonForms } from '@jsonforms/vue2'; import { vanillaRenderers } from '@jsonforms/vue2-vanilla' import { defineComponent } from "vue"; const renderers = [ ...vanillaRenderers, // here you can add custom renderers ] const schema = { type: 'object', properties: { name: { type: 'string', minLength: 1 }, done: { type: 'boolean' }, due_date: { type: 'string', format: 'date' }, recurrence: { type: 'string', enum: ['Never', 'Daily', 'Weekly', 'Monthly'] } }, required: ['name', 'due_date'] }; const uischema = { type: 'VerticalLayout', elements: [ { type: 'Control', label: false, scope: '#/properties/done' }, { type: 'Control', scope: '#/properties/name' }, { type: 'HorizontalLayout', elements: [ { type: 'Control', scope: '#/properties/due_date' }, { type: 'Control', scope: '#/properties/recurrence' } ] } ] }; const data = {}; export default defineComponent({ name: 'app', components: { JsonForms }, data() { return { renderers: Object.freeze(renderers), data, schema, uischema, }; }, methods: { onChange(event) { =; }, } }); </script> <template> <json-forms :data="data" :schema="schema" :uischema="uischema" :renderers="renderers" @change="onChange" /> </template>

By default the Vanilla Renderers don't apply any CSS at all. For a quick start you can use @jsonforms/vue-vanilla/vanilla.css.

For more information on how JSON Forms can be configured, please see the README of @jsonforms/vue2.


Each rendered HTML element specifies a CSS class which can be used to style it. This process can also be customized so that each element declares user-specified CSS classes. Therefore JSON Forms Vue Vanilla can be integrated with any CSS-only UI framework quite easily.

You can find the default CSS classes in `defaultStyles.ts.

To render your own classes simply provide them as styles. These styles replace the defaultStyles. If you want to fall back to defaultStyles or combine them with your own classes you'll need to do so programmatically, e.g.:

<script> import { JsonForms } from '@jsonforms/vue2'; import { defaultStyles, mergeStyles, vanillaRenderers } from '@jsonforms/vue2-vanilla' import { defineComponent } from "vue"; const renderers = [ ...vanillaRenderers, // here you can add custom renderers ] // mergeStyles combines all classes from both styles definitions const myStyles = mergeStyles(defaultStyles, { control: { root: 'my-control' } }); export default defineComponent({ name: 'app', components: { JsonForms }, data() { return { renderers: Object.freeze(renderers), data, schema, uischema, }; }, methods: { onChange(event) { =; }, }, provide() { return { styles: myStyles } } }); </script> <template> <json-forms :data="data" :schema="schema" :uischema="uischema" :renderers="renderers" @change="onChange" /> </template>

You can also use specify styles in the ui schema via the options.styles property. Attributes specified here override the respective defaultStyles or provided styles. Attributes not specified here fall back to either the defaultStyles or provided styles.

{ "type": "Control", "scope": "#/properties/name", "options": { "styles": { "control": { "root": "my-control-root" } } } }


The JSONForms project is licensed under the MIT License. See the LICENSE file for more information.


Our current roadmap is available here.


See our migration guide when updating JSON Forms.



Last updated on 22 Sep 2022

Did you know?

Socket installs a Github app to automatically flag issues on every pull request and report the health of your dependencies. Find out what is inside your node modules and prevent malicious activity before you update the dependencies.

Install Socket
support@socket.devSocket SOC 2 Logo


  • Package Issues
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc