@sint-willibrordkerk/liturgical-calendar
v3.0.0
Published
Generate a (local) Catholic liturgical calendar following the 1960 Code of Rubrics (1962 Missal). Each language of the propers is published separately.
Readme
Liturgical Calendar
Generate a Catholic liturgical calendar in accordance with the 1960 Code of
Rubrics, as promulgated in the 1962 Missal (Traditional Latin Mass /
Extraordinary Form). The rubrics are of 1960 and the books of 1962, which is
why the calendar data is calendar1962.yml and the propers are published
under the 1962 rubric.
Overview
This library generates a complete liturgical calendar for any given year. It supports:
- Base calendar: The universal calendar
- Local propers: Add the local propers of your diocese or congregation to this repository; see Ultrajectum as an example.
- Mass propers: The Introit, readings, chants and prayers of each day, generated from Divinum Officium
- Translations: Multi-language support; see nl as an example.
Installation
The calendar and the propers are published separately: this package holds the calendar, and each language holds its own Mass propers and translations. Install the calendar and the languages you read.
pnpm add @sint-willibrordkerk/liturgical-calendar @sint-willibrordkerk/liturgical-calendar-la
# or Dutch, or both
pnpm add @sint-willibrordkerk/liturgical-calendar @sint-willibrordkerk/liturgical-calendar-nlThe propers run to well over a megabyte per language, so a caller carries only the languages they ask for.
Usage
Basic Example
import generateCalendar from '@sint-willibrordkerk/liturgical-calendar';
import la from '@sint-willibrordkerk/liturgical-calendar-la';
// Generate calendar for 2026
const calendar = generateCalendar(2026, [], la);
// Access a specific day
const january1 = calendar[1][1]; // January 1st
console.log(january1.title); // "in-circumcisione-domini"
console.log(january1.mass.introitus); // the Introit, in LatinCalled without a language the calendar is still generated — the days fall where they fall — but no day carries a Mass and nothing is translated.
Parameters
year(number): The year for which to generate the calendarpropers(string[]): Array of proper names to include (e.g.,['ultrajectum', 'fsspx'])language(Language): A language package —@sint-willibrordkerk/liturgical-calendar-la,…-nl— imported and passed in. It supplies both the Mass propers and the translations. Optional; omit it for the bare calendar.
With Local Propers
import nl from '@sint-willibrordkerk/liturgical-calendar-nl';
// Generate calendar with local propers (e.g., Utrecht diocese)
const calendar = generateCalendar(2026, ['ultrajectum'], nl);
// November 7th will show local feast
const november7 = calendar[11][7];
console.log(november7.title); // "H. Willibrordus" (in Dutch)Calendar Structure
The returned calendar is a nested object:
type Calendar = Record<
number, // month (1-12)
Record<
number, // day (1-31)
LiturgicalDay | undefined
>
>;
type LiturgicalDay = {
title?: string;
type?: string;
liturgicalClass: number;
commemorations: Commemoration[];
};Development
Building
pnpm install
pnpm build # the calendar
pnpm build:languages # the language packagesThe Mass propers are generated from Divinum
Officium rather than kept
in this repository. To rebuild them, point DIVINUM_OFFICIUM_BASE at a checkout
and run:
pnpm pipeline --from 0 --to 11
pnpm copy-mass-propersRunning
pnpm start # uses scripts/main.js to generate test_output.ymlProject Structure
├── assets/ # What every language shares
│ ├── calendar1962.yml # Base calendar
│ └── propers/ # Local proper calendars
├── languages/ # One package per language
│ ├── la/assets/ # mass-propers/la/ (generated)
│ └── nl/assets/ # mass-propers/nl/ (generated), translations/nl/
├── convert-do/ # The pipeline that generates the Mass propers
├── src/ # TypeScript source
├── dist/ # Compiled output
└── scripts/ # Utility scriptsLicense
MIT
Author
Sint Willibrordus Stichting
