4 October 2026 dependency check: the benchmark package lock reports no known npm advisories. The dashboard lock reports 6 high-severity affected development/build package entries from one distinct braces advisory through Tailwind and the Next lint plugin, and zero in its production-only audit. These are dependency checks, not a security certification.
Raw results, dated verification notes and preserved earlier runs. Development-tool advisory.
| @forcecalendar/core | 2.5.7 |
| @forcecalendar/interface | 1.9.1 |
| @fullcalendar/core | 6.1.21 |
| @fullcalendar/daygrid | 6.1.21 |
| @fullcalendar/timegrid | 6.1.21 |
| @fullcalendar/list | 6.1.21 |
| @fullcalendar/rrule | 6.1.21 |
| rrule | 2.8.1 |
| Package | Size |
|---|---|
| @forcecalendar/core | 690.5 KiB |
| @forcecalendar/interface | 1.13 MiB |
| Total | 1.81 MiB |
| Package | Size |
|---|---|
| @fullcalendar/core | 1.79 MiB |
| @fullcalendar/daygrid | 197.5 KiB |
| @fullcalendar/timegrid | 231.6 KiB |
| @fullcalendar/list | 66.7 KiB |
| @fullcalendar/rrule | 26.2 KiB |
| rrule | 671.1 KiB |
| Total | 2.96 MiB |
Installed size measured via du -sb node_modules/package. All packages installed from npm, not local builds. The selected package stacks include source, declarations and maps; this is not browser transfer size or a claim of feature parity.
ForceCalendar's built-in RecurrenceEngineV2 vs the standalone rrule library (v2.8.1). Both process the same UTC recurrence rules; every occurrence timestamp is checked before timing. Cold means new engine instances, warm means repeated cached queries. ForceCalendar returns event objects; rrule returns Dates, so allocation costs differ. Higher ops/sec is better. Overlapping reported sample uncertainty is labelled inconclusive. These measurements cover the listed UTC rules. Passing these cases does not establish full timezone or RFC correctness. Core 2.5.7 fixes the reproduced cross-host recurrence drift; legacy timezone-conversion metadata and instance-override limitations remain in the timezone contract.
| Pattern | Occurrences | ForceCalendar ops/s | rrule ops/s | Winner |
|---|---|---|---|---|
| Daily for 1 year (cold) | 365 | 1,833 | 677 | FC (2.7x) |
| Daily for 1 year (warm) | 365 | 12,417 | 55,882 | rrule (4.5x) |
| Weekly (MWF) for 1 year (cold) | 156 | 3,734 | 3,383 | FC (1.1x) |
| Weekly (MWF) for 1 year (warm) | 156 | 30,894 | 134,646 | rrule (4.4x) |
| Monthly (15th) for 5 years (cold) | 60 | 7,260 | 3,461 | FC (2.1x) |
| Monthly (15th) for 5 years (warm) | 60 | 77,763 | 373,391 | rrule (4.8x) |
| Yearly for 10 years (cold) | 10 | 17,849 | 10,547 | FC (1.7x) |
| Yearly for 10 years (warm) | 10 | 334,481 | 1,864,108 | rrule (5.6x) |
| Daily for 5 years (1825 occurrences) (cold) | 1,825 | 419 | 136 | FC (3.1x) |
| Daily for 5 years (1825 occurrences) (warm) | 1,825 | 2,808 | 11,779 | rrule (4.2x) |
What we compare
- +Bundle size -- installed node_modules footprint for the selected package stacks
- +Recurrence expansion -- pure JS performance generating occurrences from RRULE patterns
- +Reproducibility -- all benchmarks use tinybench with warmup, run on the same machine, same Node version
What we do not compare
- --DOM rendering -- ForceCalendar core is DOM-free; FullCalendar renders directly. Apples to oranges.
- --Memory usage -- different architectures make heap comparisons misleading
- --Feature parity -- both libraries have capabilities the other does not; this is not a feature comparison
How we measure
- 1.Bundle size is measured with
du -sbon each package'snode_modules/directory. This is the installed size on disk, not minified or gzipped transfer size. All packages are installed fresh from npm. - 2.Recurrence is benchmarked with tinybench, which runs each function through a warmup phase then measures operations per second over multiple iterations. Tests assert complete UTC timestamp parity before timing. Cold runs create new instances for both libraries, but shared process/timezone caches remain warm; warm runs reuse cached results. ForceCalendar V2 returns event objects while rrule returns Dates. Patterns: daily (365 and 1825), weekly MWF (156), monthly on the 15th (60), and yearly (10).
- 3.Published evidence — this release comparison is manually verified with exact package pins. A separate existing workflow schedules runs and listens for release events; check the package versions and run date above rather than assuming every new release is represented.
Results may vary across environments. The source code and runner are open source — verify the methodology and reproduce the results yourself.