Skip to content

Fields

Lucent supports various field types for defining your collection schemas.

Field Types

String

typescript
name: { type: 'string', required: true, maxLength: 100 }

Text (Long String)

typescript
bio: { type: 'text', maxLength: 5000 }

Number

typescript
age: { type: 'number', min: 0, max: 150 }
price: { type: 'number', decimal: true }

Boolean

typescript
published: { type: 'boolean', default: false }

DateTime

typescript
createdAt: { type: 'datetime', default: 'now' }
publishedAt: { type: 'datetime' }

Relation

typescript
author: {
  type: 'relation',
  collection: 'users',
  required: true
}

tags: {
  type: 'relation',
  collection: 'tags',
  multiple: true
}

Select

typescript
status: {
  type: 'select',
  options: ['draft', 'published', 'archived'],
  default: 'draft'
}

JSON

typescript
metadata: {
  type: "json";
}

Email

typescript
email: { type: 'email', required: true, unique: true }

URL

typescript
website: {
  type: "url";
}

File/Image

typescript
avatar: { type: 'file', multiple: false }
attachments: { type: 'file', multiple: true }

Field Options

OptionTypeDescription
typestringField type
requiredbooleanMake field mandatory
defaultanyDefault value
uniquebooleanEnforce uniqueness
hiddenbooleanHide from API responses
readonlybooleanMake field read-only
minnumberMinimum value (number)
maxnumberMaximum value (number)
minLengthnumberMinimum string length
maxLengthnumberMaximum string length
patternstringRegex validation pattern

Virtual Fields

Virtual fields are computed values not stored in the database:

typescript
fields: {
  // ... regular fields
  fullName: {
    type: 'virtual',
    compute: (record) => `${record.firstName} ${record.lastName}`
  }
}

Released under the MIT License.