TTRPG Tools - Time
approvedby Johannes Schwartz
Fantasy calendar with timeline view. - This plugin has not been manually reviewed by Obsidian staff.
TTRPG Tools - Time
TTRPG Tools - Time is an Obsidian plugin for fantasy calendars, campaign events, timelines, moons, seasons, weather generation, Frontmatter-based event imports, and lightweight in-world time tracking.
All calendar, event, weather, tag-pack, and reference data is stored as readable JSON files inside your vault.
Features
Calendar system
- Week, month, and year calendar views
- Fully custom weekdays and months
- Configurable fixed weekday-label length in Calendar View:
- full weekday names
- 1, 2, 3, or 4 characters
- Custom weekday flow:
- continuous across months
- reset at the beginning of every month
- Custom eras with:
- start dates
- optional end dates
- short labels
- descriptions
- Named years
- Named calendar weeks
- Per-month accent colors
- Configurable start weekday
- Leap months
- Leap day blocks appended to months
- Named and intercalary days outside regular months
- Standalone named-day cards
- Inline named days rendered directly at the start or end of a month grid
- Optional weekday-free intercalary days
- Conditional intercalary leap days
- Year display options:
- signed or absolute negative years
- abbreviated large years
- era-relative year numbers
- Year
0and negative years are supported throughout calendar dates, events, Frontmatter imports, weather, moons, and recurrence calculations. - Optional exact fantasy-time system
- Per-calendar banner / rail images
- Bidirectional linked calendars
- light-theme brightness adjustment for custom Timeline Style box backgrounds
Linked calendars
Calendars can be linked to one another. Links are automatically saved in both directions.
Linked calendars can be used to:
- switch to the next linked calendar from the calendar rail/banner
- switch calendars from the Controls pane
- switch calendars through the public TTRPG Tools - Controls API
- include selected linked calendars in the standalone Timeline View
The Timeline Filter pane provides calendar chips for linked calendars. Click a chip to add or remove that calendar from the standalone timeline.
Views
The plugin provides the following views:
- Calendar side pane
- Day view side pane
- Event editor tab
- Event explorer modal
- Timeline view
- Timeline filter side pane
- Controls side pane
Calendar View
The Calendar View supports week, month, and year modes.
Calendar features
- Event dots for all events on a day
- Marker dots
- Season-color top borders
- Weather information in day-cell tooltips
- Today and selected-date highlighting
- Context actions for calendar days:
- set as today
- create event
- open day view
- Scroll-to-selected-day behavior in year view
- Optional calendar week-number column
- Inline intercalary holidays with:
- vault image
- Obsidian icon
- event dots
- custom color
Calendar rail / banner
The left calendar rail displays:
- selected day
- era label
- month name
- year
- optional banner image
Clicking the rail switches to the next linked calendar when linked calendars are configured.
Day View
The Day View displays information for the selected calendar date.
Day View features
- Configurable fantasy-date formatting
- Previous / next day navigation
- Weather summary with hover details
- Events for the selected day
- Event start and end times
- Manual markers
- Moon phases
- Day-specific weather editing
- Weather-pack application actions
- Event context menu:
- open details
- edit event
- delete event
Events
Events are stored as individual source JSON files and are indexed automatically for calendar and timeline rendering.
Event features
- Single-day events
- Multi-day events
- Optional start and end time
- Description
- Event color
- Linked Markdown note
- Image attachment
- Tags from linked tag packs
- Weather-pack assignment
- Event presets
- Event explorer
- Frontmatter import and export
- Recurrence support
Recurrence modes
Interval recurrence
- Daily
- Weekly
- Monthly
- Yearly
- Custom interval
- Never-ending recurrence
- End after occurrence count
- End at a specific date
- Excluded occurrences
Calendarium pattern recurrence
Pattern recurrence supports calendar-native rules such as:
- every month on a specific day
- every year on a specific day in a selected month
- every month in one selected year
- one exact calendar pattern date
- optional end date
This is useful for holidays, anniversaries, festivals, or calendar-specific repeating events.
Event Explorer
The Event Explorer lets you browse and manage events.
Features:
- Browse events by year
- Filter the current result set by title or description
- Search event titles across all indexed years
- Edit events
- Delete events
- Delete one recurrence occurrence, following occurrences, or the full series
Timeline system
The plugin provides standalone timelines and Markdown-embedded timelines.
Standalone Timeline View
Features:
- Vertical cross timeline
- Horizontal mixed timeline
- Horizontal stacked timeline
- Horizontal Grid mode
- Vertical Grid mode
- Tag include / exclude filters
- Year, month, and era filters
- Linked-calendar inclusion
- Today jump button
- Event cards with:
- title
- date range
- image
- summary
- linked-note hover preview
- context actions
- Per-calendar timeline styling
Per-calendar Timeline Styles
Each calendar can define its own timeline style.
Available settings include:
- timeline title
- image alignment
- moon display
- optional hover previews only when hovering event images
- moon size
- summary line count
- card width
- card height
- text-box height
- Grid row count:
- 2 rows
- 3 rows
- 4 rows
- Grid column count:
- 2 columns
- 3 columns
- 4 columns
- Grid tile height
- inner left and right spacing
- card background color
- border/accent color
- hover color
- title color
- date color
- optional custom month names
When multiple linked calendars are shown in the standalone timeline, each event keeps the Timeline Style configured for its originating calendar.
Timeline Grid mode
Horizontal Grid mode renders:
- one-day events as portrait tiles
- event images as tile backgrounds where available
- a compact date overlay for one-day events
- multi-day events as range cards spanning multiple grid columns
- configurable Grid row counts
- configurable tile size through Timeline Style settings
- additional layout width only where overlapping ranges require it
Vertical Grid mode renders:
- events from left to right, then continues on the next row
- one-day events as compact portrait tiles
- multi-day events as cards expanding downward
- additional card height only where overlapping events in other columns need a shared visible time span
- configurable Grid column counts
- configurable tile dimensions through Timeline Style settings
Multi-day cards use the same portrait media proportions as one-day tiles while keeping the text content visually attached below the image.
Timeline Filter Pane
The Timeline Filter pane supports linked-calendar selection, tag filtering, and optional date/era filtering.
Tag filtering
- Click a tag to include it
- Double-click a tag to exclude it
- Excluded tags always take priority over included tags
- Use Clear filters to reset all tag filters
Linked calendar filtering
When the active calendar has linked calendars, the pane also displays calendar chips.
- Click a linked calendar to add it to the standalone timeline
- Click it again to remove it
- The active calendar always remains included
Year and month filtering
- Available years and months are derived from the events currently available in the timeline.
- A year filter can be shown as buttons or as a dropdown.
- If exactly one event year exists, its month filter is shown directly.
- Month filters support multiple selections.
- Click a month to add or remove it.
- Right-click a month to show only that month.
- Month filters require the year filter to be enabled in the calendar-specific Filter Pane settings.
Era filtering
- Era chips are shown only for eras containing currently available timeline events.
- Era selections filter event start dates.
- When linked calendars are included, eras remain calendar-specific even if multiple calendars use identical era names.
Calendar-specific Filter Pane settings
Each calendar can configure the standalone Timeline Filter pane:
- show or hide year filters
- show or hide month filters
- show or hide era filters
- choose buttons or a dropdown for year filters
- choose buttons or a collapsible multi-select dropdown for month filters
- choose whether date/era controls or tag controls appear first
Clear filters resets active tag, era, year, and month filters.
Embedded Timelines
Timelines can be rendered directly in Markdown notes through code blocks.
Vertical timeline
```time-timeline-cal
title: Campaign Timeline
calendars:
- my-calendar
includeTags:
- history
- travel
excludeTags:
- spoiler
jumpTo: today
```
Horizontal timeline
```time-timeline-h
title: Travel Log
calendar: my-calendar
includeTags:
- travel
excludeTags:
- downtime
jumpTo: today
mode: mixed
align: left
maxSummaryLines: 7
cardWidth: 200
cardHeight: 315
boxHeight: 289
sideGapLeft: 40
sideGapRight: 40
```
Horizontal Grid timeline
```time-timeline-h
title: Campaign Overview
calendar: my-calendar
jumpTo: today
mode: grid
cardWidth: 200
cardHeight: 315
boxHeight: 289
```
Supported YAML options
-
title
Optional heading displayed above the embedded timeline. -
calendar/calendars
One or more calendar ids. -
includeTags
Tags to include. -
excludeTags
Tags to exclude. -
jumpTo: today
Adds a Today button and automatically jumps to the configured current day. -
mode
Horizontal timelines only:mixedstackedgrid
-
alignleftright
-
maxSummaryLines -
cardWidth -
cardHeight -
boxHeight -
sideGapLeft -
sideGapRight
Tag filter syntax
Tag filters accept either a full tag reference:
locations:city
or a short tag id:
city
Use full references when multiple tag packs contain the same tag id.
Frontmatter import and export
The plugin can import event data from Markdown note Frontmatter and export event data back to linked Markdown notes.
Import is manual. Use the Controls pane or plugin commands to scan either:
- the active note
- the complete vault
Frontmatter import features
- Configurable property mappings
- Optional title fallback to the note file name
- Dates, date ranges, times, tags, colors, images, weather packs, and recurrence data
- Configurable stable synchronization id
- Color mapping rules
- Calendar-aware month parsing
- Fantasy-calendar and intercalary-day support
- YAML list support for multiple independent event dates in one note
fc-date as a YAML list
The configured start-date property can be a YAML list of concrete dates.
Each entry creates an independent event. All generated events retain the same linked Markdown note.
fc-date:
- 1456-Eleint-30
- 1456-Hammer-12
- 1457-HIG-01
A date list cannot be combined with:
- one shared end date
- interval recurrence fields
Use separate notes if each imported date needs its own date range or recurrence rule.
Supported date formats
Numeric dates:
fc-date: 1456-02-14
Regular month names:
fc-date: 1456-Eleint-30
Month ids:
fc-date: 1456-eleint-30
Unambiguous month-name or month-id prefixes with at least three characters:
fc-date: 1456-HIG-01
Standalone intercalary-day ordinal:
fc-date: 1456-SD-04
SD means: the fourth active standalone day in the specified year.
Standalone leap-day ordinal:
fc-date: 1456-SL-01
SL means: the first active standalone day in the specified year which is not an annually recurring standalone named day.
This is intended for calendars with conditional leap days or special intercalary days.
Pattern recurrence from Frontmatter
The importer also supports Calendarium-style wildcard patterns through YAML objects.
fc-date:
month: Eleint
day: 30
This creates a yearly pattern recurrence.
fc-date:
year: 1456
day: 12
This creates a monthly recurrence restricted to year 1456.
fc-date:
day: 1
This creates a monthly pattern recurrence for day 1.
Calendar-specific Frontmatter imports
Frontmatter imports can optionally be filtered per calendar.
Configure a Calendar filter property in Manage Frontmatter, for example:
fc-calendar
Then assign one or more accepted values to every calendar in the Calendar filter assignments section.
Example assignment:
Faerûn calendar: 1, faerun
Eberron calendar: 2, eberron
Notes without the configured property are imported into every calendar that is scanned. Notes with the property are only imported into calendars with at least one matching assigned value.
Single values, comma-separated values, and YAML lists are supported:
# Imported only into calendars assigned to "1"
fc-calendar: 1
# Imported into both matching calendars
fc-calendar:
- 1
- 2
The property name is configurable, so existing vault conventions such as
fc-calender can also be used.
Weather system
Weather is generated from reusable weather packs.
Weather features
- Weather packs
- Per-month climate profiles
- Generated weather reference years
- Generated day-view weather years
- Manual weather editing per day
- Weather-day locking
- Apply a weather pack:
- to one day
- to a custom date range
- from the selected date to year end
- through a multi-range batch modal
- Import and export weather packs
- Regenerate one reference year
- Regenerate all known reference years for a weather pack
- Linked weather packs per calendar
- Default weather pack per calendar
- Optional automatic reference-year generation
Weather pack configuration
Weather packs support:
- annual temperature range
- humidity
- precipitation
- storminess
- cloudiness
- fogginess
- windiness
- seasonality
- front frequency
- front strength
- volatility
- stable-weather duration
- front duration
- snow threshold
- per-month climate baselines
Generated conditions
The weather generator can produce:
- clear
- mostly clear
- partly cloudy
- scattered clouds
- broken clouds
- overcast
- mist
- fog
- drizzle
- rain
- heavy rain
- thunderstorm
- sleet
- flurries
- snow
- blizzard
Weather generation is designed for useful campaign-facing weather rather than real-world meteorological simulation.
Moons
Calendars can define multiple moons.
Each moon supports:
- custom name
- custom cycle length
- custom offset
- continuous absolute-day cycle
- month-reset cycle
- custom phase count
- custom phase labels
- optional phase images
- custom display size
- custom color
Moon phases are displayed in the Day View and can optionally be shown in the standalone Timeline header.
When exact time is enabled, event details can also show moon phase transitions occurring on that day.
Named and intercalary days
Named days are calendar entries outside normal months.
They can be used for:
- feast days
- epagomenal days
- year-end holidays
- special leap days
- Shire-style Lithe days
- custom setting-specific holidays
Each named day supports:
- insertion before the first month or after a regular month
- display order
- standalone-card display
- rendering at the end of the previous month
- rendering at the start of the next month
- participation in weekday progression
- optional custom color
- Obsidian icon
- vault image
- cycle years
- active cycle positions
- skip rules for years divisible by configured values
Example:
{
"intercalaryDays": [
{
"id": "second-yule",
"name": "2 Yule",
"insertAfterMonthIndex": -1,
"displayPosition": "standalone",
"order": 10,
"weekdayMode": "none",
"cycleYears": 1,
"activeYearPositions": [1],
"skipYearsDivisibleBy": []
},
{
"id": "first-lithe",
"name": "1 Lithe",
"insertAfterMonthIndex": 5,
"displayPosition": "after-previous-month",
"order": 10,
"weekdayMode": "normal",
"cycleYears": 1,
"activeYearPositions": [1],
"skipYearsDivisibleBy": []
},
{
"id": "overlithe",
"name": "Overlithe",
"insertAfterMonthIndex": 5,
"displayPosition": "standalone",
"order": 30,
"weekdayMode": "none",
"cycleYears": 4,
"activeYearPositions": [4],
"skipYearsDivisibleBy": [100]
}
]
}
Fantasy time controls
The plugin stores a lightweight internal fantasy clock per calendar.
Features
- Time stored per calendar
- Configurable hours per day
- Configurable minutes per hour
- Custom time-advance buttons
- Automatic day rollover
- Automatic update of calendar today date after day rollover
- Left-click a configured button to advance time
- Right-click a configured button to subtract time
Example buttons:
+30m+8hLong RestTravel WatchNight Watch
This system is intentionally lightweight and is not intended as a full simulation engine.
Controls pane
The Controls pane provides compact quick actions.
Available actions include:
- Open calendar
- Switch to next linked calendar
- Open day view
- Jump to today
- Open timeline
- Open timeline filters
- Insert timeline block
- Create event
- Open event explorer
- Apply weather packs to date ranges
- Manage weather packs
- Manage Frontmatter mappings
- Scan active-note Frontmatter
- Scan whole-vault Frontmatter
- Manage tag packs
- Edit calendar
- Toggle era description
- Open plugin settings
- Advance fantasy time
Public Controls API
For integration with TTRPG Tools - Controls, the plugin exposes:
plugin.controlsApi
The API is versioned and currently uses version 1.
Available methods:
plugin.controlsApi.getActions();
plugin.controlsApi.executeAction(actionId);
The API provides actions for:
- calendar navigation
- linked-calendar switching
- day view
- event creation and exploration
- timeline views and insertion
- weather tools
- Frontmatter tools
- tag-pack and calendar management
- era descriptions
- plugin settings
- configured fantasy-time buttons
External plugins should use this public API instead of accessing internal views or modal classes.
Style Settings
The plugin includes Style Settings metadata in styles.css.
Available styling options include:
- calendar accent color
- panel radius
- calendar grid gap
- day-cell radius
- calendar title color and size
- year-title color and size
- calendar rail colors
- banner image opacity and fit
- month-label color source
- holiday gradient colors
- holiday icon size
- event-marker size and spacing
- Day View date color and size
- Day View section-title color
- weather badge background
- status-bar visibility
Community downloads
The plugin can optionally load a public community-library index containing downloadable calendars and weather packs.
The Download modal provides:
- separate Calendar and Weather Pack tabs
- search by name, author, description, license, or tag
- month-count filters
- one-click installation
- automatic collision-safe ids for locally existing calendar or weather-pack ids
For submitting your fantasy calendars or weather packs visit here: https://github.com/Jareika/ttrpg-tools-time-library
Installation
Requirements
- Obsidian 1.13.0 or newer
Manual installation
-
Build or download the plugin files.
-
Create this folder inside your vault:
.obsidian/plugins/ttrpg-tools-time -
Copy these files into the folder:
main.js manifest.json styles.css -
Open Obsidian.
-
Open Settings → Community plugins.
-
Disable Restricted mode if necessary.
-
Enable TTRPG Tools - Time.
Basic usage
Create a calendar
- Open the Command Palette.
- Run TTRPG Tools - Time: Create calendar JSON.
- Configure:
- weekdays
- months
- eras
- seasons
- named years and weeks
- progressive season-color transitions between adjacent seasons
- leap rules
- named / intercalary days
- moons
- weather mapping
- optional exact time
- Save the calendar.
Link calendars
- Open the Calendar Editor.
- Choose Linked calendars.
- Select one or more calendars.
- Save the calendar.
The links are synchronized in both directions.
Create an event
- Open the Event Editor.
- Enter a title.
- Select start and end dates.
- Optionally configure:
- exact time
- description
- image
- linked note
- color
- tags
- weather pack
- recurrence
- Save the event.
Import events from Frontmatter
- Open Manage Frontmatter.
- Enable Frontmatter import.
- Configure at least the start-date property.
- Optionally configure title, tags, times, color, image, weather, and recurrence properties.
- Use:
- Scan active note frontmatter
- Scan whole vault frontmatter
Use the Controls pane
- Open a Markdown note.
- Place the editor cursor where a timeline should be inserted.
- Open the Controls pane.
- Select Insert timeline.
- Configure the timeline.
- Insert the generated YAML code block.
Commands
The plugin currently registers commands for:
- Open side pane
- Open day pane
- Open event editor
- Open event explorer
- Open control pane
- Open timeline view
- Open timeline filter pane
- Jump to today
- Create calendar JSON
- Edit active calendar JSON
- Create tag pack JSON
- Create weather pack JSON
- Manage calendars
- Manage tag packs
- Manage weather packs
- Reload JSON data
Data storage
By default, plugin data is stored in:
TTRPG/Time
The data folder can be changed in plugin settings.
Typical folders include:
TTRPG/Time/calendars
TTRPG/Time/tag-packs
TTRPG/Time/weather-packs
TTRPG/Time/weather-reference
TTRPG/Time/weather-dayview
TTRPG/Time/event-source
TTRPG/Time/event-index
TTRPG/Time/event-presets
Legacy yearly event files may be migrated automatically into source-event storage and archived in:
TTRPG/Time/event-details-legacy-backup
Plugin-level settings and fantasy-clock state are stored through Obsidian plugin storage.
Current limitations
- The plugin is still under active development.
- UI labels and workflows may change between releases.
- The fantasy-time system stores only the current clock value per calendar.
- Timeline insertion requires an active Markdown editor.
- Frontmatter import is manual and does not continuously synchronize notes.
- A Frontmatter date list creates independent events only; it cannot define a shared range or shared interval recurrence.
- Weather generation is designed for configurable worldbuilding utility, not scientific meteorological accuracy.
License
MIT
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.