joetjen.net
EN DE
← All libraries
Elixir

ephemeris

Recurrence rules that read and write both RFC 5545 RRULE and plain English, with an occurrence engine to compute when they fire.

Intention

RRULE is the standard — portable, precise, what a calendar speaks — and unreadable in a config file; plain English is the opposite on every count. One structure behind both means a rule can be written the readable way, stored the portable way, and shown back either way, without two implementations that disagree. A rule says when, nothing else: no process, no timer, no implicit current time.

Example
{:ok, rule} = Ephemeris.parse("every last sunday of the month")

Ephemeris.to_rrule(rule)     #=> "FREQ=MONTHLY;BYDAY=-1SU"
Ephemeris.to_sentence(rule)  #=> "every last Sunday of the month"

Ephemeris.next(rule, ~U[2026-01-01 09:00:00Z])
#=> {:ok, ~U[2026-01-25 09:00:00Z]}
Install
{:ephemeris, "~> 0.1"}
ElixirRecurrenceRFC 5545