Back to Twenty

Overview

packages/twenty-docs/developers/extend/apps/data/overview.mdx

2.4.12.9 KB
Original Source

A Twenty app's data layer is the data your app adds to a workspace — the new record types it declares, the columns it adds to existing objects, and how those records connect to each other.

text
┌──────────────────────────────────────────────────┐
│ Object — a record type, e.g. PostCard            │
│    ├─ Field     (name, type, label)              │
│    ├─ Field                                      │
│    └─ Relation  (link to another object)         │
└──────────────────────────────────────────────────┘
            │
            ├── lives in your app, OR
            │
            ▼
┌──────────────────────────────────────────────────┐
│ Standard / other apps' objects                   │
│    └─ Field added by your app via defineField    │
└──────────────────────────────────────────────────┘

In this section

<CardGroup cols={2}> <Card title="Objects" icon="table" href="/developers/extend/apps/data/objects"> `defineObject` — declare new record types with their own fields. </Card> <Card title="Extending Objects" icon="wand-magic-sparkles" href="/developers/extend/apps/data/extending-objects"> `defineField` — add fields to standard or other apps' objects. </Card> <Card title="Relations" icon="diagram-project" href="/developers/extend/apps/data/relations"> Bidirectional `MANY_TO_ONE` / `ONE_TO_MANY` connections between objects. </Card> </CardGroup>

Entities at a glance

EntityPurposeDefined with
ObjectA new custom record type (e.g. PostCard, Invoice) with its own fieldsdefineObject()
FieldA column on an object. Standalone fields can extend objects you didn't create (e.g. add loyaltyTier to Company)defineField()
RelationA bidirectional link between two objects — both sides declared as fieldsdefineField() with FieldType.RELATION

The SDK detects these via AST analysis at build time, so file organization is up to you — the convention is src/objects/ and src/fields/. Stable universalIdentifier UUIDs tie everything together across deploys.

<Note> Looking for **Application Config** or **Roles & Permissions**? Those describe the app itself rather than the data it adds — they live under [Config](/developers/extend/apps/config/overview). Looking for **Connections** (Linear, GitHub, Slack OAuth)? Those exist to be called *from* logic functions and live under [Logic](/developers/extend/apps/logic/connections). </Note>