Dynamic Note Content - banisterious/obsidian-charted-roots GitHub Wiki
Dynamic Note Content
Charted Roots can render live, computed content directly within notes using special code blocks. These blocks automatically display data from your vault and update when you view the note. Most blocks are designed for person notes, while some target other note types: Sources Block, Extractions Block, and Source Roles Block are intended for source notes, and the Members Block is intended for organization notes.
Table of Contents
Overview
Dynamic content blocks solve the problem of person notes containing only static frontmatter. With these blocks, you can see a person's complete timeline, family relationships, and more without leaving the note.
Key Features:
- Live rendering: Content computed from your vault data
- Freeze to markdown: Convert to static text for editing or export
- Configurable: Options for sorting, filtering, and display
- Multiple insertion methods: Command palette, context menu, import wizards
Block Types
Timeline Block
The canvas-roots-timeline block shows a chronological list of events for a person.
```canvas-roots-timeline
sort: chronological
```
What it displays:
- Birth and death dates from the person's frontmatter
- All event notes linked to this person
- Age annotations on each event (when birth date is known)
- Family member events β children's births, spouse deaths, parent deaths, sibling births (when enabled in Settings > Advanced > Family events on timelines)
- Historical context events from an overlay note (when configured)
- Year, event type, and place for each entry
- Clickable wikilinks to event and place notes
Configuration options:
| Option | Values | Description |
|---|---|---|
sort |
chronological, reverse |
Event order (default: chronological) |
include |
comma-separated types | Only show these event types |
exclude |
comma-separated types | Hide these event types |
limit |
number | Maximum events to display |
title |
string | Custom header text (default: "Timeline") |
context |
[Note](/banisterious/obsidian-charted-roots/wiki/Note), none |
Historical context note to overlay (see below) |
contextMargin |
number | Only show context events within N years of the person's lifespan (overrides global setting) |
familyEvents |
none |
Suppress family member events on this timeline (overrides global toggles) |
layout |
chronological, grouped, personal-first |
How events are arranged (see Layout modes) |
format |
format string | Custom display format with placeholders (see Format strings) |
template |
[Note](/banisterious/obsidian-charted-roots/wiki/Note) |
Reference a template note defining custom sections (see Template notes) |
Example with options:
```canvas-roots-timeline
sort: reverse
exclude: residence, occupation
limit: 10
title: Key Life Events
```
Historical context overlay
You can overlay historical events alongside a person's life events by referencing a context note. This helps understand what was happening in the world around them β wars, pandemics, economic events β and why ancestors may have made certain decisions.
Context note format: Create a markdown note with date-prefixed list items:
- 1861-1865: American Civil War
- 1914: World War I begins
- 1929-10-29: Black Tuesday
- 1941-1945: World War II
Dates can be a single year (1914), a year range (1861-1865), or a full date (1929-10-29).
Usage: Reference the note in your timeline block:
```charted-roots-timeline
context: [US History](/banisterious/obsidian-charted-roots/wiki/US-History)
```
To suppress the default context on a specific block, use context: none.
Filtering: By default, all context events are shown (contextLifespanMargin: 0). Set a margin in Settings > Advanced > Context lifespan margin to limit context events to within N years of the person's own lifespan. The margin uses only the person's own events (birth, death, etc.) β family events like sibling births do not expand the range.
Default setting: Rather than adding context: to every timeline block, you can set a default context note in Settings > Advanced > Default timeline context. All timelines will use this note unless overridden per block.
Age annotations
When a person's birth date is known, all timeline events (including context events) display an age annotation showing the person's age at the time of the event. For example, a marriage in 1875 for someone born in 1850 would show "age 25".
Timeline layout modes
The layout parameter (or the global setting in Settings > Advanced > Timeline layout) controls how events are arranged:
| Mode | Description |
|---|---|
chronological (default) |
All events interleaved by date |
grouped |
Separate sections with dividers: Life events, Family events, Historical context |
personal-first |
Personal events first (sorted), then family and context events chronologically |
Timeline format strings
The format parameter controls how each entry is rendered using placeholders:
```charted-roots-timeline
format: "{year} β {title} in {place}"
```
Available placeholders:
| Placeholder | Description | Example |
|---|---|---|
{year} |
Year or date range | 1850 |
{date} |
Full date | 1850-01-01 |
{type} |
Event type label | Birth |
{title} |
Event title/description | Born or Birth of John |
{place} |
Place name (omitted if empty) | Boston, MA |
{age} |
Age annotation (omitted if unknown) | age 23 |
When a placeholder's value is empty, it and surrounding literal text (like "in ") are automatically omitted.
Timeline template notes
For full control, reference a template note that defines custom sections with independent configuration:
```charted-roots-timeline
template: [My Timeline Template](/banisterious/obsidian-charted-roots/wiki/My-Timeline-Template)
```
Template note format:
A template note uses ## headings for sections, each with optional sort:, include:, and format: config lines:
---
cr_type: timeline_template
---
## Life events
sort: chronological
include: birth, death, marriage, occupation
format: "{year} β {title} in {place}"
## Family
sort: chronological
include: family
format: "{year} β {title}"
## Historical context
sort: chronological
include: context
Include filter values: Event types (birth, death, marriage, etc.) and categories (personal, family, context, children_births, spouse_deaths, parent_deaths, sibling_births).
Set a global default template in Settings > Advanced > Default timeline template to apply it to all timelines without editing individual notes.
Relationships Block
The canvas-roots-relationships block displays family members with clickable links.
```canvas-roots-relationships
type: immediate
```
What it displays:
- Parents (father, mother, adoptive father, adoptive mother, step-parents)
- Spouse(s)
- Children
- Siblings (when using
type: extendedortype: all) β biological siblings share a parent with the focal person; adoptive siblings (other children of the focal person's adoptive parents) appear under the same Siblings heading with anAdoptive sibling:label, matching the labeling convention used for adoptive parents
Each person is shown as a wikilink with their birth-death years.
Configuration options:
| Option | Values | Description |
|---|---|---|
type |
immediate, extended, all |
Relationship scope (default: immediate) |
include |
comma-separated types | Only show these relationship types |
exclude |
comma-separated types | Hide these relationship types |
title |
string | Custom header text (default: "Family") |
Relationship types:
immediate: Parents (biological, adoptive, step-), spouse(s), children. No siblings.extended: Everything inimmediate, plus siblings β biological (derived from shared parents) and adoptive (derived from shared adoptive parents, labeledAdoptive sibling:).all: Everything inextended, plus custom-typed relationships declared in the person'srelationshipsfrontmatter array (mentor, godparent, ally, etc.).
2nd-degree kinship β aunts, uncles, cousins, grandparents, grandchildren β is not currently derived in any mode; see #424 for the tracked enhancement.
Example with options:
```canvas-roots-relationships
type: extended
title: Family Tree
```
Media Block
The canvas-roots-media block displays a gallery of media files linked to the person.
```canvas-roots-media
columns: 3
size: medium
```
What it displays:
- All media files linked via the
mediafrontmatter property - Image thumbnails in a responsive grid
- PDF first-page thumbnail previews (generated via Obsidian's built-in PDF.js)
- Document placeholders for other non-image files
- First item highlighted as the "thumbnail" (used for Family Chart avatars)
Configuration options:
| Option | Values | Description |
|---|---|---|
columns |
2-6, auto |
Number of columns in grid (default: 3) |
size |
small, medium, large |
Thumbnail size (default: medium) |
editable |
true, false |
Enable drag-to-reorder (default: false) |
title |
string | Custom header text (default: "Media") |
Example with options:
```canvas-roots-media
columns: 4
size: large
editable: true
title: Photos & Documents
```
Editable Mode:
When editable: true is set:
- Items show a drag handle on hover
- Drag items to reorder their position
- First item becomes the thumbnail (shown on Family Chart nodes)
- Frontmatter is updated automatically when you drop
- Gallery has a dashed border to indicate edit mode
Source Roles Block
The charted-roots-source-roles block displays a table of people and their roles in a source document.
```charted-roots-source-roles
source: "[Estate Inventory of John Smith Sr.](/banisterious/obsidian-charted-roots/wiki/Estate-Inventory-of-John-Smith-Sr.)"
```
What it displays:
- All people listed in the source's role properties (
principals,witnesses,informants, etc.) - Role category and label for each person
- Role details (e.g., "Decedent", "Administrator") when present
- Clickable wikilinks to person notes
Configuration options:
| Option | Values | Description |
|---|---|---|
source |
wikilink | Source note to display roles from (default: current note) |
Rendered output:
| Role | Person | Details |
|---|---|---|
| Principal | John Smith Sr. | Decedent |
| Official | Thomas Brown | Administrator |
| Enslaved Individual | Mary | β |
Inserting the block:
- Context menu: Right-click on a source note and select Charted Roots > Add source roles block
- Manual: Add the code block to any note, specifying the source
When inserted via context menu, the source parameter is pre-filled with the current note's wikilink.
Note: This block is designed for source notes (cr_type: source) that have role properties defined. See Person Roles in Sources for details on setting up role properties.
Transfers Block
The charted-roots-transfers block displays a chronological list of transfer events for a person. This is useful for tracking ownership changes in genealogical research (e.g., enslaved ancestor tracking) or succession in worldbuilding.
```charted-roots-transfers
sort: chronological
```
What it displays:
- All transfer events linked to this person
- Transfer type (inheritance, purchase, gift, hire, seizure, birth, relocation)
- Date and event title with clickable wikilink
- Location (if recorded)
- Other participants in the transfer
Configuration options:
| Option | Values | Description |
|---|---|---|
sort |
chronological, reverse |
Event order (default: chronological) |
limit |
number | Maximum events to display |
title |
string | Custom header text (default: "Transfer history") |
Example with options:
```charted-roots-transfers
sort: reverse
limit: 10
title: Ownership history
```
Transfer types:
| Type | Label | Description |
|---|---|---|
inheritance |
Inherited | Transfer at death via will/probate |
purchase |
Purchased | Sale transaction |
gift |
Gift | Transfer without payment |
hire |
Hired out | Temporary transfer (hiring out) |
seizure |
Seized | Court-ordered transfer, debt collection |
birth |
Born into | Born into ownership |
relocation |
Relocated | Move to different location (same owner) |
Use cases:
- Genealogical research: Track enslaved ancestors through ownership chains, estate divisions, and probate records
- Worldbuilding: Track succession of titles, thrones, and positions
Related: Transfer events require creating event notes with event_type: transfer and transfer_type property. See Events & Timelines for details on creating transfer events.
Members Block
The charted-roots-members block displays the members of an organization, grouped by role. Place this block in an organization note to see all persons who are members.
```charted-roots-members
group-by: role
```
What it displays:
- All persons with a membership linking them to this organization
- Members grouped by role, with clickable wikilinks to person notes
- Date ranges for membership periods (e.g., "1850β1865" or "1920βpresent")
- Former members shown with a dimmed style
- Optional membership notes
Configuration options:
| Option | Values | Description |
|---|---|---|
group-by |
role, none |
Group members by role (default: role) |
sort |
name, date |
Sort order within groups (default: name) |
show-former |
true, false |
Include former members (default: true) |
show-dates |
true, false |
Show membership date ranges (default: true) |
show-notes |
true, false |
Show membership notes (default: false) |
role-order |
comma-separated roles | Pin specific roles to the top in order |
title |
string | Custom header text (default: "Members") |
Example with options:
```charted-roots-members
group-by: role
sort: date
show-notes: true
role-order: Pastor, Elder, Deacon
title: Congregation
```
Rendered output:
When grouped by role, each role gets its own heading:
Pastor
- John Smith (1850β1875)
Elder
- James Brown (1852βpresent)
- Thomas Davis (1860β1868)
Members
Role ordering fallback chain:
- Block-level
role-orderβ if specified, those roles appear first in that sequence - Organization's
rolesproperty β if the organization note defines aroleslist, that order is used - Alphabetical β remaining named roles follow alphabetically; members with no role appear last under "Members"
This means if your organization note already defines roles, the members block will use that order automatically without needing role-order config.
Note: This block is designed for organization notes (cr_type: organization). Membership data is stored on person notes via the organizations frontmatter property. See Organizations for details on setting up organizations and memberships.
Sources Block
The charted-roots-sources block displays a table of sources linked to a person note. It shows each source's type, title, date, and which facts the source supports.
```charted-roots-sources
sort: chronological
```
What it displays:
- All sources linked via the
sourcesfrontmatter array - Sources referenced by
sourced_*properties (fact-level citations) - Legacy
sourced_factsentries - Source type icon, title as a clickable wikilink, date, and fact labels
Configuration options:
| Option | Values | Description |
|---|---|---|
sort |
chronological, reverse, type |
Sort order (default: chronological) |
filter |
comma-separated types | Only show these source types |
exclude |
comma-separated types | Hide these source types |
title |
string | Custom header text (default: "Sources") |
Example with options:
```charted-roots-sources
sort: type
filter: census, vital_record
title: Census & Vital Records
```
Rendered output:
| Type | Title | Date | Facts |
|---|---|---|---|
| π | 1850 Census - Smith Family | 1850 | Name, Birth date, Residence |
| π | Birth Certificate - John Smith | 1845 | Name, Birth date, Birth place |
Fact-level citations:
When a source is linked via a sourced_* property (e.g., sourced_birth_date), the Facts column shows which specific facts cite that source. This gives a clear picture of what evidence each source provides for the person.
Note: This block is designed for person notes (cr_type: person). See Evidence & Sources for details on linking sources to persons.
Extractions Block
The charted-roots-extractions block is the inverse of the Sources block β it renders a reverse lookup from a source note to all entities that cite it. Place this block in a source note to answer the question "what have I extracted from this source?"
```charted-roots-extractions
title: Extractions
```
What it displays:
Three grouped sections, each with a count in its heading:
- Persons β All person notes that reference this source via
sources,sourced_*, or legacysourced_factsproperties. Shows which facts each person cites this source for. - Events β All event notes that include this source in their
sourcesarray, sorted chronologically. Shows event type, title, date, person(s), and place. - Places β Unique places derived from the citing events, with a count of how many events reference each place.
Configuration options:
| Option | Values | Description |
|---|---|---|
title |
string | Custom header text (default: "Extractions") |
Rendered output:
Persons (3)
| Name | Facts cited |
|---|---|
| John Smith | Name, Birth date |
| Jane Smith | Name, Marriage date |
| Mary Smith | Name |
Events (2)
| Type | Title | Date | Person(s) | Place |
|---|---|---|---|---|
| π | [Birth of John Smith]] ](/banisterious/obsidian-charted-roots/wiki/1845-03-15- | -[[John-Smith) | Dublin, Ireland | |
| π | [Marriage of John and Jane]] ](/banisterious/obsidian-charted-roots/wiki/1867-06-20- | -[John-Smith), [Jane Smith]] |
Places (2)
| Place | Events |
|---|---|
| Boston, MA | 1 |
| Dublin, Ireland | 1 |
Sections with no data are omitted. If no entities reference the source at all, an empty state message is shown.
Note: This block is designed for source notes (cr_type: source). It complements the Sources block on person notes by providing the reverse perspective. See Evidence & Sources for details on the source citation model.
Negative Findings Block
The charted-roots-negative-findings block displays a log of negative research findings β sources searched that did not yield results for a person.
```charted-roots-negative-findings
sort: chronological
```
What it displays:
- All negative findings logged for the person from research journal entries
- Date searched, source name, what was searched for, and notes
- Helps identify which sources have already been exhausted
See Research Workflow for details on logging negative findings.
Research Timeline Block
The charted-roots-research-timeline block visualizes research activity across your vault with three view modes.
```charted-roots-research-timeline
view: table
person: "[John Smith](/banisterious/obsidian-charted-roots/wiki/John-Smith)"
```
View modes:
Table view (default)
A chronological activity log showing all research sessions:
| Column | Description |
|---|---|
| Date | When the research was conducted |
| Source | Source searched |
| Searched for | What was being looked for |
| Result | Positive, negative, or inconclusive (with icon) |
| Project | Associated research project |
| Person | Person the research relates to |
| Gap | Days since last research activity (flagged if exceeding threshold) |
Rows exceeding the gap threshold are highlighted in orange to draw attention to periods of inactivity.
Heatmap view
A GitHub-style contribution grid showing 52 weeks of research activity density. Color intensity indicates the number of research sessions per day. Includes a summary showing the longest gap period.
```charted-roots-research-timeline
view: heatmap
```
Timeline view
Horizontal bars per person or project with color-coded markers:
- Green: Positive result
- Red: Negative result
- Yellow: Inconclusive result
Gap regions between markers are highlighted to show periods of inactivity.
```charted-roots-research-timeline
view: timeline
```
Configuration options:
| Option | Values | Description |
|---|---|---|
view |
table, heatmap, timeline |
Visualization mode (default: table) |
person |
wikilink | Filter to a specific person |
project |
string | Filter to a specific research project |
gap |
number | Minimum days to flag as a gap (default: 30) |
sort |
chronological, reverse |
Sort order (default: chronological) |
group |
person, project, source |
Group rows by field (table view only) |
title |
string | Custom header text |
Data sources: Gathers entries from both research_log_entry frontmatter and research_journal markdown entries. Re-renders live when vault metadata changes. The table view supports freeze-to-markdown.
Universe Entity Blocks
Four blocks for universe notes that automatically list all entities belonging to that universe. Place these in a universe note.
charted-roots-universe-people β Table of people with name, born, died, occupation:
```charted-roots-universe-people
sort: name
limit: 50
```
charted-roots-universe-places β Table of places with name and place type.
charted-roots-universe-events β Table of events with name, date, type badge, and place.
charted-roots-universe-organizations β Table of organizations with name and type.
charted-roots-universe-maps β Clickable map image thumbnails for custom maps. Shows place count badge. Supports size parameter (small/medium/large).
All entries are clickable wikilinks. Supports sort (name/date/type) and limit parameters. Auto-refreshes when vault data changes.
Rendered Output
In reading view, code blocks render as styled containers:
βββββββββββββββββββββββββββββββββββββββββββββββ
β Timeline [βοΈ] β
βββββββββββββββββββββββββββββββββββββββββββββββ€
β β’ 1845 β Born in [Dublin, Ireland](/banisterious/obsidian-charted-roots/wiki/Dublin,-Ireland) β
β β’ 1867 β Married [Jane Smith](/banisterious/obsidian-charted-roots/wiki/Jane-Smith) β
β β’ 1890 β Resided in [Boston, MA](/banisterious/obsidian-charted-roots/wiki/Boston,-MA) β
β β’ 1912 β Died in [Boston, MA](/banisterious/obsidian-charted-roots/wiki/Boston,-MA) β
βββββββββββββββββββββββββββββββββββββββββββββββ
Toolbar buttons:
- βοΈ Freeze: Convert to static markdown
- π Copy: Copy timeline text to clipboard (timeline only)
Empty states:
- If no data is found, blocks show a helpful message
- Example: "No events found for this person"
Freeze to Markdown
Click the βοΈ freeze button to convert a live block to static markdown. This is useful for:
- Manual editing: Add notes, reorder items, customize formatting
- Export compatibility: Static markdown works everywhere
- Performance: Reduce computation in large vaults
Before freezing:
```canvas-roots-timeline
sort: chronological
```
After freezing:
## Timeline
- **1845** β Born in [Dublin, Ireland](/banisterious/obsidian-charted-roots/wiki/Dublin,-Ireland)
- **1867** β [Marriage of John and Jane](/banisterious/obsidian-charted-roots/wiki/Married) in [Boston, MA](/banisterious/obsidian-charted-roots/wiki/Boston,-MA)
- **1912** β Died in [Boston, MA](/banisterious/obsidian-charted-roots/wiki/Boston,-MA)
The frozen content preserves wikilinks and can be edited like any markdown.
Media gallery freeze:
Media galleries freeze to a styled callout that displays images in a responsive grid:
> [!info|cr-frozen-gallery]
> 
> 
> 
The frozen gallery:
- Uses Obsidian's native callout syntax with a special
cr-frozen-gallerymetadata tag - Renders images in a flex layout with configurable styling
- Click-and-hold on an image to zoom to full screen
- Styling can be customized via the Style Settings plugin
Inserting Blocks
Create Person Modal
When creating a new person note via the Create Person modal, enable the "Include dynamic blocks" toggle to automatically add timeline, relationships, and media blocks to the note body.
Import Wizards
All import wizards (GEDCOM, Gramps, CSV) include an "Include dynamic blocks" toggle. When enabled, imported person notes will include all three block types. Media blocks are included with editable: true by default.
Context Menu
Right-click on a person note in the file explorer:
- Select Insert dynamic blocks
- Timeline, relationships, and media blocks are added to the note body
Bulk Insert (Folders)
Right-click on a folder containing person notes:
- Select Insert dynamic blocks in folder
- A progress modal shows the operation
- Blocks are added to all person notes in the folder that don't already have them
Command Palette
Use the command palette (Ctrl/Cmd + P):
- Charted Roots: Insert dynamic blocks - Adds blocks to the current note
Manual Entry
Type the code block syntax directly in any person note:
```canvas-roots-timeline
```
```canvas-roots-relationships
```
Tips
- Placement: Add blocks after your frontmatter and any static content you want to keep at the top
- Multiple blocks: You can have both timeline and relationships blocks in the same note
- Re-ordering: Frozen content can be moved anywhere in the note
- Performance: For large vaults (1000+ people), consider using frozen blocks to avoid computation on every note open
- cr_id required: Blocks only work in notes with a valid
cr_idproperty
Related Features
- Events & Timelines - Creating and managing event notes
- Context Menus - All available right-click actions
- Import & Export - Import wizards with dynamic block toggle
- Data Entry - Creating person notes