# Support

# JSON Schema

The UIDL format is enforced by JSON Schema, an open format that adds constraints, rules and types on top of a JSON structure. Each UIDL has a $schema reference at the root level, based on which we perform the structural and type validation.

You can find the corresponding JSON Schema objects for the component and for the project UIDLs here:

# TypeScript Interfaces


We encourage everyone who wishes to create new plugins and/or generators based on the proposed architecture and on the UIDL format, to work with TypeScript to take full advantage of the format and data structures.

Here are the interfaces for components and projects:

interface ComponentUIDL {
  $schema?: string
  name: string
  node: UIDLNode
  meta?: Record<string, any>
  propDefinitions?: Record<string, UIDLPropDefinition>
  stateDefinitions?: Record<string, UIDLStateDefinition>
interface ProjectUIDL {
  $schema?: string
  name: string
  globals: {
    settings: {
      title: string
      language: string
    meta: Array<Record<string, string>>
    assets: GlobalAsset[]
    manifest?: WebManifest
    variables?: Record<string, string>
  root: ComponentUIDL
  components?: Record<string, ComponentUIDL>

The other interfaces that make up the UIDL typing system can be found on the git repository.