--- id: adrs-adr010 title: 'ADR010: Use the Luxon Date Library' # prettier-ignore description: Architecture Decision Record (ADR) for 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](https://momentjs.com/) 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](https://momentjs.com/docs/#/-project-status/) and the project recommends using one of the more modern alternative libraries. See [[RFC] Standardized Date & Time Library](https://github.com/backstage/backstage/issues/3401). ## Decision We will use [Luxon](https://moment.github.io/luxon/index.html) 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 JavaScript `Date` object. - Using a single date library avoids having to learn multiple library APIs - Having a single date library will reduce bundle sizes