This feature also requires Advanced mode to be enabled (toggle at the bottom right of Settings).
When to Use Many-to-Many
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 |
How It Works
Twenty uses a junction object pattern for many-to-many relations. A junction object sits between two objects and holds the connections:- A relation to People (many-to-one)
- A relation to Projects (many-to-one)
Prerequisites
- Enable Junction Relations in Lab: Go to Settings → Updates → Lab and enable Junction Relations
- Enable Advanced mode: Toggle on Advanced mode at the bottom right of the Settings sidebar
- Plan your data model:
- Which two objects are you connecting?
- What should the junction object be called?
Step 1: Create the Junction Object
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”)
- Click Save
Step 2: Create Relations from the Junction Object
Add relation fields from the junction object to both objects you want to connect.First Relation (Junction → Object A)
- Select your junction object in Settings → Data Model
- Click + Add Field
- Choose Relation as the field type
- Select the first object (e.g., “People”)
- Set the relation type to Many-to-One (many assignments can link to one person)
- Name the fields:
- Field on junction: e.g., “Person”
- Field on People: e.g., “Project Assignments”
- Click Save
Second Relation (Junction → Object B)
- Still on the junction object, click + Add Field
- Choose Relation as the field type
- Select the second object (e.g., “Projects”)
- Set the relation type to Many-to-One
- Name the fields:
- Field on junction: e.g., “Project”
- Field on Projects: e.g., “Team Members”
- Click Save
Step 3: Configure the Junction Relation Display
Now configure the source objects to display linked records directly, skipping the intermediate junction object.- Go to Settings → Data Model
- Select the first object (e.g., “People”)
- Find the relation field pointing to the junction object (e.g., “Project Assignments”)
- Click to edit the field
- Enable “This is a relation to a Junction Object”
- Select the Target relation (e.g., “Project” — the field on the junction that points to the other side)
- Click Save
- Select “Projects” in Data Model
- Edit the “Team Members” relation field
- Enable the junction toggle
- Select “Person” as the target relation
- Save
Result
After configuration:- On a Person record, the “Project Assignments” field displays Projects directly (not assignment records)
- On a Project record, the “Team Members” field displays People directly
Example: People ↔ Projects
Here’s a complete walkthrough:Create the Junction Object
- Name: Project Assignment
- Description: “Links people to projects they work on”
Add Relations
-
Project Assignment → People
- Type: Many-to-One
- Field on Assignment: “Person”
- Field on People: “Project Assignments”
-
Project Assignment → Projects
- Type: Many-to-One
- Field on Assignment: “Project”
- Field on Projects: “Team Members”
Configure Junction Display
-
On People object:
- Edit “Project Assignments” field
- Enable junction toggle
- Target: “Project”
-
On Projects object:
- Edit “Team Members” field
- Enable junction toggle
- Target: “Person”
Use It
- Open a Person record → See their Projects directly
- Open a Project record → See team members directly
- Create new connections from either side
Adding Extra Data to Connections
Since the junction object is a real object, you can add custom fields to store information about the relationship:- Role: “Developer”, “Designer”, “Manager”
- Start Date: When they joined the project
- Hours Allocated: Weekly hours on this project
Limitations
- CSV Import/Export: Importing many-to-many relations directly is not supported. Import records to the junction object instead.
- Filters: Filtering by many-to-many relations may have limited options.
Related
- Relation Fields — relation types explained
- Create Custom Objects — how to create objects
- Create Relation Fields — basic relation setup