Creating Calendars
MythTapestry’s calendar system uses a unified temporal scale architecture that supports everything from simple Earth-like calendars to entirely original time-keeping systems.
Core concepts
Section titled “Core concepts”Temporal scales
Section titled “Temporal scales”A temporal scale is a named level in your calendar. Each scale has a type that determines how it behaves:
| Scale type | Purpose | Example |
|---|---|---|
| Hierarchical | Nested parent-child time units | Year → Month → Day |
| Overlay | Independent repeating cycle across a base unit | Week (7-day cycle over days), Moon phases |
| Subdivision | Fractional parts below a day | Hour (24 per day), Minute (60 per hour) |
Hierarchical scales form the backbone of your calendar. A Year contains Months, which contain Days. Each level references its parent and defines how many units it contains via units_per_parent.
Overlay scales repeat independently of the hierarchy. A week is 7 days long regardless of month boundaries. Overlays need a cycle base unit (typically days) and a cycle length (e.g. 7). They also need an anchor point — a reference date that tells the system which overlay unit a given day falls on (e.g. “Day 1 of Year 1 is a Monday”).
Subdivision scales break a day into fractional parts. Hours, minutes, and seconds are subdivisions. They use is_fractional = true and store time as a decimal fraction of a day (0.0 to < 1.0).
Temporal units
Section titled “Temporal units”Each scale contains units — the named or numbered entries within it. For example, the Month scale might have 12 units: January through December. Each unit has:
- Name (optional — unnamed units are just numbered)
- Ordinal (0-indexed position within the scale)
- Unit length (in days for day-level units, fractional for subdivisions)
- Is variable (true if affected by intercalation rules, like February)
Intercalation rules
Section titled “Intercalation rules”Intercalation handles irregular patterns like leap years. Rules are defined with:
- Every N cycles — how often the rule applies (e.g. every 4 years)
- Except every M cycles — exception to the rule (e.g. except every 100 years)
- Targets — what changes when the rule fires
Each rule has one or more targets that can either:
| Target type | What it does | Example |
|---|---|---|
| Extend unit | Add days to an existing unit | Add 1 day to February |
| Insert period | Insert a standalone period | Insert “Epagomenal Days” after day 360 |
Format tokens
Section titled “Format tokens”Format strings control how dates are displayed. They use dynamic tokens with the syntax:
{ScaleName:formatter:options}Formatters:
| Formatter | Output | Example |
|---|---|---|
value | Numeric (0-indexed) | {Year:value} → “2024” |
num | Numeric (1-indexed) | {Month:num} → “1” for January |
unit | Unit name | {Month:unit} → “January” |
day | Day within unit (1-indexed) | {Day:day} → “15” |
day_ord | Day as ordinal | {Day:day_ord} → “15th” |
abbr | Abbreviated name | {Month:abbr} → “Jan” |
Options (after second colon):
:02,:04— zero-pad to width
Examples:
{Month:unit} {Day:day_ord}, {Year:value}→ “January 15th, 2024”{Year:value:04}-{Month:num:02}-{Day:day:02}→ “2024-01-15”{Week:unit}, {Month:abbr} {Day:day}→ “Monday, Jan 15”{Season:unit} {Day:day_ord}, Year {Year:value}→ “Spring 23rd, Year 1542”
Creating a calendar
Section titled “Creating a calendar”- Go to Management > Calendars in the world sidebar.
- Click Create Calendar.
- Choose a preset (Gregorian, Lunar, or Custom) as your starting point.
- Enter a name and optional description.
- Optionally toggle Global if this calendar applies world-wide (vs. regionally).
- Review the structure preview showing your temporal scales.
- Click Customize Structure if you need to modify scales, units, or intercalation rules.
- Review format strings for how dates will display.
- Save the calendar.
Calendar fields
Section titled “Calendar fields”| Field | Required | Description |
|---|---|---|
| Name | Yes | Unique name within the world |
| Description | No | Rich text description |
| Days per year | Yes | Total days in a standard year (e.g. 365, 354, 360) |
| Global | No | Whether this is the world-wide calendar or regional |
| Epoch description | No | Text describing the calendar’s epoch (e.g. “Years since the Founding”) |
Calendar inheritance
Section titled “Calendar inheritance”Calendars don’t just store dates — they provide context across the system. MythTapestry uses an inheritance chain so you can set defaults at the world level and override them where needed:
World default calendar └── Content unit override (narrative time context) └── Inline date mark override (per-mark calendar + precision)- World level: Your world’s primary (global) calendar is used everywhere by default — events, entity fields, content units, and inline date marks all inherit it.
- Content unit level: Each content unit can override the calendar, time range, and precision in its narrative time context. For example, a chapter set in a different culture might use that culture’s regional calendar.
- Inline mark level: Individual date mentions and date links within prose text can specify their own calendar and precision, overriding both the world and content unit defaults.
What the Gregorian preset includes
Section titled “What the Gregorian preset includes”- Hierarchical scales: Year → Month (12 units, Jan–Dec, variable days) → Day
- Overlay scale: Week (7-day cycle: Monday–Sunday)
- Subdivision scales: Hour (24 per day) → Minute (60 per hour) → Second (60 per minute)
- Intercalation: Two rules for standard leap year logic
- Format strings: ISO 8601, Long Date, Date & Time, Weekday Date, Short Numeric