Objects
Typed business data owned by your operating system.
An object is a business type with typed fields. Customer, Order, and Incident are objects; one stored instance is a record.
Define an object
123456789101112131415161718192021222324252627export const Incident = defineObject({ id: "incident", name: "Incident", fields: { reference: text({ required: true, unique: true }), severity: select({ required: true, options: [ { value: "low" }, { value: "medium" }, { value: "high" }, { value: "critical" }, ], }), state: status({ required: true, default: "open", options: [ { value: "open" }, { value: "investigating" }, { value: "resolved" }, ], }), resolvedAt: datetime(), }, display: { title: "reference", status: "state" },})Use object rather than entity in the SDK and product. It names the concrete business concept a person works with rather than an abstract database category.
Records and storage
Object definitions compile to real schema and migrations in the project database. The database remains the system of record; Continual does not introduce a second generic key-value object store to keep in sync.
Objects can explicitly implement shared interfaces when several concrete types need one polymorphic contract.
Generated tools
An object provides standard tools for reading and changing its records. Backend code imports the definition directly and passes the current invocation context first:
1234567const incidents = await Incident.list(ctx, { filters: { state: "open" },})
await Incident.update(ctx, incidents.data[0].id, { state: "investigating",})Use a customer-defined tool when a capability has business meaning, spans objects, coordinates an external effect, or needs stronger controls than standard record access.
Presentation
Display metadata gives Continual enough information to produce useful generic lists, detail views, references, and search results. Purpose-built apps remain ordinary application code. There is no defineView in the initial contract.