ADR010: Use the Luxon Date Library
Context
Date formatting (e.g. a day ago
) and calculations are common within Backstage.
Some of these useful features are not supported by the standard JavaScript
Date
object. The popular Moment.js library has been
commonly used to fill this gap but is affected by large bundle sizes and mutable
state issues. On top of this, momentjs
is
being sunset and the project
recommends using one of the more modern alternative libraries.
See [RFC] Standardized Date & Time Library.
Decision
We will use Luxon as the standard date library within Backstage.
Luxon
provides a similar feature set and API to Moment.js
, but improves on
its design through immutability and the usage of modern JavaScript APIs (e.g.
Intl
). This results in smaller bundle sizes while providing a full feature set
and avoids the need for using additional libraries for common date & time tasks.
Consequences
- All core packages and plugins within Backstage should use
Luxon
for any date manipulation or formatting that cannot be easily accomplished with the native JavaScriptDate
object. - Using a single date library avoids having to learn multiple library APIs
- Having a single date library will reduce bundle sizes