Field types
Blobify supports 13 field types. Every type can be marked translatable: true, including blocks. A translatable value is stored as a locale map such as { "en": value, "is": value }.
required is valid on every type except boolean. A boolean already has a true or false value, so a required flag has no useful meaning.
Type reference
| Type | Stored value | Important configuration |
|---|---|---|
text | String | appearance: "color" is an optional editor hint |
slug | String | sourceField, unique |
richtext | Root AST | allowedNodes, allowedMarks, headingLevels, allowedModels, allowedBlocks, allowAssets |
number | Number | No type-specific option |
boolean | Boolean | Cannot be required |
datetime | ISO datetime or YYYY-MM-DD | dateOnly: true stores a date only |
select | String or string array | options, plus multiple: true for several values |
asset | Asset reference | accept, spaceScope, spaces |
array | Primitive array | Strings and numbers only |
reference | Content reference or reference array | model or models, multiple, spaceScope, spaces |
link | Internal, asset, or external link object | model or models, allowExternal, allowAssets |
blocks | Block object or block array | allowedBlocks, multiple, optional translatable block trees |
json | Any JSON value | Escape hatch for data without an editor schema |
All fields can also use the common properties label, description, defaultValue, and groupId. groupId applies to fields in a model schema, not fields in a block schema.
Text and slug
Use text for names, titles, short descriptions, and labels. The appearance option changes only the editor control. It does not change the stored string.
{
"title": {
"type": "text",
"required": true,
"translatable": true
},
"brandColor": {
"type": "text",
"appearance": "color",
"defaultValue": "#2563eb"
},
"slug": {
"type": "slug",
"sourceField": "title",
"unique": true,
"required": true
}
}unique is supported on text and slug. A translatable unique field is unique per locale. A non-translatable unique field is unique globally. Saving the model derives a required field index for the unique field.
Numbers, booleans, dates, and selects
{
"price": { "type": "number", "required": true },
"featured": { "type": "boolean", "defaultValue": false },
"publishedAt": { "type": "datetime" },
"eventDate": { "type": "datetime", "dateOnly": true },
"categories": {
"type": "select",
"options": ["news", "guide", "release"],
"multiple": true
}
}A regular datetime is stored as an ISO 8601 string. A date-only field is stored as a string such as 2026-07-13. A single select stores one option string. A multiple select stores an array of option strings.
Assets
An asset field stores a semantic reference, not a final media URL:
{
"coverImage": {
"type": "asset",
"accept": "image"
}
}The accepted filters are image, video, media, pdf, document, and file. Omitting accept allows every file type.
Asset values use this shape:
{
"type": "asset",
"assetId": "img_456",
"focalPoint": { "x": 0.28, "y": 0.52 }
}spaceId is optional for cross-space references. Per-use focalPoint and crop data can frame an image without modifying the original. Localized alternative text belongs to the shared asset metadata document, not the content-field reference. See Content JSON.
References and links
A reference points to content by model and ID. Set either model for one target model or models for a polymorphic field. Do not set both.
{
"author": { "type": "reference", "model": "author" },
"related": {
"type": "reference",
"models": ["article", "page"],
"multiple": true
}
}Stored references are semantic:
{
"model": "author",
"id": "author_1"
}A link field can store one of three tagged shapes:
{
"internal": { "type": "internal", "model": "page", "id": "page_1" },
"asset": { "type": "asset", "assetId": "file_1" },
"external": { "type": "external", "url": "https://example.com" }
}Use spaceScope: "current" for the current space, spaceScope: "all" for any space in the organization, or spaceScope: "selected" with a spaces array.
Arrays, blocks, and JSON
An array contains only strings or numbers. Use a multiple reference for repeatable content entities and blocks for repeatable embedded structures.
{
"keywords": { "type": "array" },
"sections": {
"type": "blocks",
"multiple": true,
"allowedBlocks": ["hero-block", "quote-block"]
},
"integrationConfig": { "type": "json" }
}Blocks default to multiple: true. With multiple: false, the field stores one block object. A non-translatable blocks field shares its structure across locales and can contain translatable inner fields. A translatable blocks field stores a separate block value for each locale.
Use json sparingly. It accepts arbitrary JSON, but the dashboard cannot provide the same structured editing and schema validation as normal fields.
Rich text
Rich text stores a root AST. It supports paragraphs, headings, lists, blockquotes, code, horizontal rules, asset nodes, embedded blocks, and internal content references. Schema options can restrict the allowed surface.
{
"body": {
"type": "richtext",
"translatable": true,
"allowAssets": true,
"allowedBlocks": ["callout-block"],
"allowedModels": ["article", "page"],
"allowedMarks": ["bold", "italic", "code"]
}
}For the stored AST and block-node examples, see Content JSON.