packages/twenty-docs/user-guide/data-model/how-tos/create-many-to-many-relations.mdx
Many-to-many relations let you connect multiple records on both sides. For example: many People can work on many Projects, and each Project can have many People.
<Warning> **Lab Feature**: Junction relations are currently in the Lab. Enable them at **Settings → Updates → Lab** before following this guide. </Warning> <Note> This feature also requires **Advanced mode** to be enabled (toggle at the bottom right of Settings). </Note>Use many-to-many when both sides of a relationship can have multiple connections:
| Relationship | Example |
|---|---|
| People ↔ Projects | A person works on multiple projects; a project has multiple team members |
| Companies ↔ Tags | A company can have multiple tags; a tag can apply to multiple companies |
| Products ↔ Orders | A product can be in multiple orders; an order contains multiple products |
Twenty uses a junction object pattern for many-to-many relations. A junction object sits between two objects and holds the connections:
People ←→ Project Assignments ←→ Projects
The Project Assignments object (junction) has:
When you enable the junction relation toggle, Twenty displays linked records directly instead of showing the intermediate junction records.
First, create the intermediate object that will hold the connections.
Go to Settings → Data Model
Click + New object
Name it descriptively (e.g., "Project Assignment", "Team Member", "Product Order")
Toggle "Skip creating a Name field" on
Click Save
Add relation fields from each of your two objects to the junction object.
Select your second object in Settings → Data Model
Click + Add Relation
Select the junction object (e.g., "Project Assignments")
Set the relation type to One-To-Many (one project can link to many assignments)
Enable "This is a relation to a Junction Object"
Name the fields:
Click Save
Now configure the source objects to display linked records directly, skipping the intermediate junction object.
After configuration:
The junction object still exists and stores the connections, but the UI presents a cleaner many-to-many view.
Here's a complete walkthrough:
People → Project Assignment
Projects → Project Assignment
On People object:
On Projects object:
Since the junction object is a real object, you can add custom fields to store information about the relationship:
To access this data, navigate to the junction object directly or query it via the API.