Every document is defined by it’s contentType and every contentType has to define it’s metadata. The metadata object (storage) consists of key-value pairs where the key is unique per document.

Example of a metadata object as it could be returned by the Public API:

  "title": "Doctor Who 2",
  "url": "/test/doctor-who",
  "seoTitle": "BBC TV Show - Doctor Who",
  "seoDescription": "Best TV show of all times",
  "seoNewsKeywords": "tv bbc",
  "seoExcludeFromSpiders": false


A metadata configuration describes the metadata properties each contentType (or mediaType or include) can have.

// Metadata configuration example in a contentType
metadata: [
    handle: 'title',
    type: 'li-text',
    config: {
      // general configs available for all plugins
      required: true,
      requiredErrorMessage: 'please provide a title',
      hideFromForm: false

      // li-text specific configs
      maxLength: 200,
      index: true
  {handle: 'description', type: 'li-text'},
    handle: 'reference',
    type: 'li-document-reference',
    config: {
      contentType: 'gallery'
    ui: {
      label: 'Gallery',

Livingdocs Metadata Plugins

Livingdocs offers metadata plugins for a wide array of data types like strings, dates or references to other documents. These plugins should fulfill the most common use cases and have a strict schema.

ℹ️ A combination of metadata type (plugin) and configuration defines how the UI in the editor looks and in what format data are stored.

Create your own Plugins

If the provided plugins do not fulfill your needs, you can create your own metadata plugin. Check this guide for an example.