# Support

# JSON Schema

The UIDL format is enforced by JSON Schema (opens new window), 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

TIP

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 (opens new window).