Recurrence
The recurrence editor is the "repeat" of a calendar: daily, weekly on the days ticked, monthly or yearly on a date or on "the second Tuesday", ending never, after so many times or on a date. What it writes is the iCalendar rule (RFC 5545) that every calendar reads — or cron, for a job scheduler, in the Unix or the Quartz dialect.
Beside the choices: the rule in words, and the next dates in the series' own time zone, at the same wall-clock time across a change of the clocks, each of which can be skipped. It goes into a form like any other field.
A fortnightly project review
Every other Tuesday and Thursday at half past nine, London time. Change the days or the interval and
the summary and the dates follow; skip a date from the list and it becomes an EXDATE.
The iCalendar lines on the right are what a calendar file or an invitation would carry.
Get the code
<script src="/assets/bmx-components.min.js"></script> <bmx-recurrence-editor id="re-review" label="Project review repeats" value="FREQ=WEEKLY;INTERVAL=2;BYDAY=TU,TH" start="2026-11-03T09:30" time-zone="Europe/London" preview="5" allow-skip show-rule></bmx-recurrence-editor>
Invoices on the last working day
Monthly rules the way people say them: "the last weekday of the month", "the first Monday", "the 15th". Here invoices go out on the last weekday, twelve times, then stop.
Get the code
<script src="/assets/bmx-components.min.js"></script> <bmx-recurrence-editor id="re-invoice" label="Send invoices" value="FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1;COUNT=12" start="2026-10-30T17:00" time-zone="Europe/London" preview="6" frequencies="monthly,yearly"></bmx-recurrence-editor>
Cron for a job scheduler
The same choices, written as cron. Unix cron has five fields; Quartz, which job schedulers on the Java platform use, has seven and can say "last day" and "second Friday". A cron expression the choices cannot show is kept as it was written and flagged, never quietly changed.
Get the code
<script src="/assets/bmx-components.min.js"></script> <bmx-recurrence-editor id="re-unix" label="Nightly export (Unix cron)" value-format="cron" value="30 2 * * 1-5" time-zone="UTC" preview="3" show-rule></bmx-recurrence-editor> <bmx-recurrence-editor id="re-quartz" label="Month-end close (Quartz cron)" value-format="cron" cron-dialect="quartz" value="0 0 18 L * ? *" time-zone="UTC" preview="3" show-rule></bmx-recurrence-editor>
In a form
A maintenance window, booked through an ordinary form. The field is required — "does not repeat" is not an answer here — and the form receives the whole series as iCalendar lines.
Get the code
<script src="/assets/bmx-components.min.js"></script> <bmx-recurrence-editor name="window" label="Maintenance window" required form-value="icalendar" start="2026-11-01T02:00" time-zone="Europe/London" value="" preview="3" description="Choose how often the window repeats."></bmx-recurrence-editor>