# Fields and their settings

A field's settings, such as `generated:`, `unique:` and `on_delete:`, go
in a block after its type, one per line:

```jadpo
entity Todo {
    id: Uuid
    due_at: Instant?
    created_at: Instant {
        generated: Generated.on_create  // set once, when the record is created
    }
    updated_at: Instant {
        generated: Generated.on_change  // set on create and on every change
    }
}
```

`generated:` makes a field that Jadpo sets from the operation's clock:
`Generated.on_create` sets it once, when the record is created, and
`Generated.on_change` sets it on create and on every change. A generated
field is a required `Instant`. Code never assigns it, and it is never in
an `Input`.

A field that may be empty is written `T?`, like `due_at` above. Only an
`Input` has `optional:` and `default:`. A starting value that Jadpo sets,
rather than the caller, is the lifecycle's `initial:`
([Lifecycle](lifecycle.md)).
