DSL syntax
Schema Forge schemas are written in .sf files. By default the main file is schemaforge/schema.sf.
Comments
Use # for line comments.
# SchemaForge schema definition
# table users { ... }Tables
Declare a table with table <name>{ ... }. Column definitions go inside the braces, one per line.
table users {
id uuid
email varchar
name text
}Columns
Each column is name type [modifiers]. Common types include:
uuid,varchar,textboolean,integer,biginttimestamptz
Modifiers
pk— primary keyunique— unique constraintnot null/nullable— nullabilitydefault <expr>— default value (e.g.now())fk <table>.<column>— foreign key
Indexes
Use index declarations to define standard, unique, partial, or expression indexes.
index users_email_idx on users columns(email)
index users_email_unique_idx on users columns(email) unique
index users_active_email_idx on users columns(email) where deleted_at IS NULL
index users_lower_email_idx on users expression(lower(email))Views
Use view <name> as <sql> to define query-backed views in your schema.
view active_users as
select id, email
from users
where deleted_at IS NULLExample
# SchemaForge schema definition
table users {
id uuid pk
email varchar unique not null
name text not null
created_at timestamptz default now()
}
table posts {
id uuid pk
user_id uuid fk users.id not null
title varchar not null
content text
published boolean default false
created_at timestamptz default now()
}Invalid syntax
The parser will report errors for invalid DSL: unclosed braces, unknown column types, or malformed foreign keys (e.g. fk table without .column). Run schema-forge generate or schema-forge diff to validate; see the CLI commands doc.