Benchmark

forceCalendar Benchmark

An honest, reproducible comparison between ForceCalendar and FullCalendar. We measure what can be fairly compared and clearly note what cannot.

FullCalendar is an excellent calendar library that powers thousands of applications. This benchmark is not a critique of FullCalendar — it exists to help developers in strict enterprise environments (Salesforce Locker Service, strict CSP) understand the trade-offs. forceCalendar was built for environments where most calendar libraries cannot run due to security restrictions, not to replace FullCalendar in general use.

Last run 2026-03-20 12:49:30 UTC
Node v24.13.0
Platform linux/x64
ForceCalendar
@forcecalendar/core2.1.53
@forcecalendar/interface1.0.57
FullCalendar
@fullcalendar/core6.1.20
@fullcalendar/daygrid6.1.20
@fullcalendar/timegrid6.1.20
@fullcalendar/list6.1.20
@fullcalendar/rrule6.1.20
rrule2.8.1
1.06 MB
ForceCalendar
3.01 MB
FullCalendar
2.9x
Size Ratio
ForceCalendar Stack
PackageSize
@forcecalendar/core365.5 KB
@forcecalendar/interface715.7 KB
Total1.06 MB
FullCalendar Stack
PackageSize
@fullcalendar/core1.81 MB
@fullcalendar/daygrid201.5 KB
@fullcalendar/timegrid235.6 KB
@fullcalendar/list70.7 KB
@fullcalendar/rrule30.2 KB
rrule699.1 KB
Total3.01 MB

Installed size measured via du -sb node_modules/package. All packages installed from npm, not local builds. ForceCalendar ships core + interface for equivalent functionality to FullCalendar's multi-package stack.

ForceCalendar's built-in RecurrenceEngine vs the standalone rrule library (v2.8.1). Both are pure JavaScript implementations processing RFC 5545 recurrence rules. Higher ops/sec is better.

Note: rrule wins 5 of 5 test cases. It is a mature, dedicated library and is faster for recurrence expansion. ForceCalendar's engine trades raw speed for tighter integration with its event model.

PatternOccurrencesForceCalendar ops/srrule ops/sWinner
Daily for 1 year3651,70128,948rrule (17.0x)
Weekly (MWF) for 1 year1562,13664,763rrule (30.3x)
Monthly (15th) for 5 years607,303160,378rrule (22.0x)
Yearly for 10 years1054,260629,105rrule (11.6x)
Daily for 5 years (1825 occurrences)1,82533,859rrule (1286.3x)

What we compare

  • +Bundle size -- installed node_modules footprint for equivalent calendar functionality
  • +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 -sb on each package's node_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. Test patterns: daily (365 and 1825 occurrences), weekly MWF (156), monthly on the 15th (60), and yearly (10).
  • 3.Automation — benchmarks re-run automatically via GitHub Actions on every release and weekly on Sundays. Results are committed to the repository and this dashboard updates on each push.

Results may vary across environments. The source code and runner are open source — verify the methodology and reproduce the results yourself.