Can properties support lists of name-value pairs?

I know properties are basically name-value pairs already, but what I’m trying to do would end up with an endless list of properties.

I have notes which represent Life Timeline Events, such as “Started at school X”, “Y and Z wedding”, “Some Theatre Production” etc. They have properties for location, event type (education, work, family etc), and they link to a periodic note representing when they started and ended.

(Side note: I have periodic notes for day (Daily Notes), month, and year, and they have the property “up” which links them in a hierarchy. Linking to a note instead of recording a specific date allows me to link to the month or year if I don’t know the exact date, and I can include a Base in the periodic notes showing what happened on that date, in that month etc.)

What I want to include is a way to show who was involved and what their role was. Let’s take the example of a event that was a Theatre Production.

I can add a property called “People”, with a list of links to People notes. But that doesn’t tell me what their role was in this context.

I could add a property for each role, e.g.

---
Hamlet: [[John Doe]]
Stage Manager: [[Jane Doe]]
---

But that would end up with loads of properties that are only used once.

Is there a way to have a property that was a list of name-value pairs? For example:

---
Roles:
   - "Hamlet": [[John Doe]]
   - "Stage Manager": [[Jane Doe]]
---

I could just have a list like this, and map over it, relying on the value always being in the odd indexes, but it would be tricky and awkward:

---
Roles:
    - "Hamlet"
    - [[John Doe]]
    - "Stage Manager"
    - [[Jane Doe]]
---

Anyone have any better ideas?

Even though Live Preview and Reading don’t support nested YAML in the Properties widget, you can still use it to good effect. It just looks awkward outside of Source mode:

If you’re interested in trying it, here’s a pretty typical method:

Roles:
  - role: Hamlet
    person: "[[Jane Doe]]"
  - role: Stage Manager
    person: "[[John Doe]]"

Nesting and labeling like that allows you to call them by name in querying tools (such as Bases and Dataview). And it opens the ability to add arbitrary data as you please:

Roles:
  - role: Hamlet
    type: Performer
    person: "[[Jane Doe]]"
    debut: 2025-11-14
    reception: Standing ovation
  - role: Stage Manager
    type: Crew
    person: "[[John Doe]]"
    office: second door behind stage left
    favoriteRabbits:
      - Angora
      - Holland Lop
    stillOwesMeFiveBucks: true

It also gives you grace when you forget the order, as it’s fine to list, for example, role then person in one note even though you may have listed person then role in another note.

1 Like