Built-in content types

Contents

Enonic XP ships with a set of concrete content types that are ready to use as-is. Unlike custom content types, they are not declared in your app — they are always available and cannot be redefined.

This page covers the generic types under the base namespace. Types in the portal namespace (portal:site, portal:page-template, portal:fragment, portal:template-folder) are specific to the pages and sites concept and documented there.

Folder (base:folder)

Folders are containers for organizing child content. They have no data properties beyond their name and display name.

super-type

base:structured

is-abstract

false

is-final

false

allow-child-content

true

Output

{
  "_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "_name": "articles",
  "_path": "/site/articles",
  "type": "base:folder",
  "displayName": "Articles",
  "data": {}
}

GraphQL

Most queries treat folders as regular Content — the Content interface covers what folders expose. Use the typed fragment only when you need to make the query type-explicit:

{
  guillotine {
    getChildren(key: "/site") {
      displayName
      _path
      type
      ... on base_Folder {
        _id
      }
    }
  }
}

Shortcut (base:shortcut)

Shortcuts reference or redirect to another content item. Optional key-value parameters are appended to the redirect URL.

super-type

base:structured

is-abstract

false

is-final

true

allow-child-content

true

Output

{
  "_id": "b2c3d4e5-...",
  "_name": "latest",
  "_path": "/site/latest",
  "type": "base:shortcut",
  "displayName": "Latest post",
  "data": {
    "target": "f3076b5c-ea45-4c8b-8c06-1f87b8d8cdd9",
    "parameters": [
      { "name": "utm_source", "value": "internal" }
    ]
  }
}

GraphQL

{
  guillotine {
    get(key: "/site/latest") {
      displayName
      ... on base_Shortcut {
        data {
          target {
            _id
            _path
            displayName
          }
          parameters {
            name
            value
          }
        }
      }
    }
  }
}

The target field is a content reference and resolves to the full target content when queried.

Unstructured (base:unstructured)

Unstructured content permits storing any properties without a declared form. Because it has no schema, Content Studio has no default editor for it — unstructured items are typically created and updated via API.

super-type

base:structured

is-abstract

false

is-final

true

allow-child-content

true

Use cases are narrow: items whose properties vary per instance but still need editorial management, publishing, permissions, or versioning.

For data that does not need editorial workflows, consider using XP’s NoSQL storage instead.

Output

{
  "_id": "c3d4e5f6-...",
  "_name": "telemetry-2026-04-19",
  "_path": "/site/telemetry/telemetry-2026-04-19",
  "type": "base:unstructured",
  "displayName": "Telemetry snapshot",
  "data": {
    "collectedAt": "2026-04-19T12:00:00Z",
    "metrics": {
      "requests": 42301,
      "errors": 12
    },
    "tags": ["nightly", "prod"]
  }
}

GraphQL

Because the schema is not known at build time, Guillotine cannot generate typed fields for unstructured content. Use dataAsJson to retrieve the entire data payload:

{
  guillotine {
    get(key: "/site/telemetry/telemetry-2026-04-19") {
      displayName
      type
      dataAsJson
    }
  }
}

Contents

Contents