VibORM
Fields

String Field

String field type for text data

String Field

The string field type represents text data.

Basic Usage

import { s } from "viborm";

s.string(); // Required string
s.string().nullable(); // String | null
s.string().array(); // String[] (native on PG, JSON on MySQL/SQLite)

Chainable Methods

Common Modifiers

s.string()
  .nullable() // Allow NULL
  .array() // Array type (native on PG, JSON on MySQL/SQLite)
  .id() // Primary key
  .unique() // Unique constraint
  .default("value") // Static default
  .default(() => "x") // Runtime default
  .map("column_name"); // Custom column name

Auto-Generation

String fields support automatic ID generation:

s.string().id().uuid(); // UUIDv4: "550e8400-e29b-41d4-a716-446655440000"
s.string().id().ulid(); // ULID: "01ARZ3NDEKTSV4RRFFQ69G5FAV" (sortable)
s.string().id().nanoid(); // NanoID: "V1StGXR8_Z5jdHi6B-myT"
s.string().id().cuid(); // CUID: "cjld2cjxh0000qzrmn831i7rn"

Custom Validation

import { z } from "zod";

s.string().validator(z.string().email());
s.string().validator(z.string().min(3).max(100));
s.string().validator(z.string().regex(/^[a-z]+$/));

Native Database Types

Override the default database type:

import { TYPES } from "viborm";

s.string(TYPES.PG.STRING.TEXT) // TEXT (default)
s.string(TYPES.PG.STRING.VARCHAR(255)) // VARCHAR(255)
s.string(TYPES.PG.STRING.CHAR(10)) // CHAR(10)
s.string(TYPES.PG.STRING.CITEXT) // Case-insensitive text
s.string(TYPES.PG.STRING.UUID) // UUID native type
s.string(TYPES.PG.STRING.XML) // XML
s.string(TYPES.PG.STRING.INET) // IP address
s.string(TYPES.PG.STRING.CIDR) // IP network
s.string(TYPES.PG.STRING.MACADDR) // MAC address
s.string(TYPES.PG.STRING.TSVECTOR) // Full-text search
import { TYPES } from "viborm";

s.string(TYPES.MYSQL.STRING.VARCHAR(255))  // VARCHAR(255)
s.string(TYPES.MYSQL.STRING.CHAR(10))      // CHAR(10)
s.string(TYPES.MYSQL.STRING.TEXT)          // TEXT
s.string(TYPES.MYSQL.STRING.TINYTEXT)      // TINYTEXT
s.string(TYPES.MYSQL.STRING.MEDIUMTEXT)    // MEDIUMTEXT
s.string(TYPES.MYSQL.STRING.LONGTEXT)      // LONGTEXT
import { TYPES } from "viborm";

s.string(TYPES.SQLITE.STRING.TEXT) // TEXT (only option)

Type Mapping

ModifierTypeScriptPostgreSQLMySQLSQLite
s.string()stringTEXTVARCHAR(191)TEXT
.nullable()string | nullTEXT NULLVARCHAR(191) NULLTEXT NULL
.array()string[]TEXT[]JSONJSON

Examples

// Email with validation
const email = s.string()
  .unique()
  .validator(z.string().email());

// Username with constraints
const username = s.string()
  .unique()
  .validator(z.string().min(3).max(30).regex(/^[a-z0-9_]+$/));

// Primary key with ULID
const id = s.string().id().ulid();

// Optional bio
const bio = s.string().nullable().default(null);

// Tags array (PostgreSQL)
const tags = s.string().array().default([]);

On this page