npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@mubelotix/calendrier

v0.1.0

Published

Most precise and correct implementation of the French Republican calendar in the world

Readme

calendrier

Crate for handling dates in the french Revolutionary calendar.

This package is a wrapper over the Rust calendrier implementation that can run using WASM in the browser or Node.js. It will be shown on npmjs.com for the @mubelotix/calendrier package.

Note: This package has apparent solar time disabled and uses mean time by default to provide stable second durations. If you value strict historical accuracy, please use the solar version (@mubelotix/calendrier-solar).

This is the most precise and correct implementation of the Republican calendar in the world. While most libraries approximate dates using the never-adopted Romme reform or fixed leap-year rules, this crate uses high-precision astronomical calculations to adhere strictly to the original law of the Convention.

Reliable Mean Time Precision

While the underlying Rust library can compute precise astronomical times using the NOVAS (Naval Observatory Vector Astrometry Software) library to support Paris Apparent Solar Time, this particular package relies on Mean Time.

Because apparent solar time length variations can complicate digital systems, Mean Time ensures consistent, stable second durations for applications that prioritize steady time intervals over strict astronomical adherence.

Due to the complexity of non-linear time, the strict solar time implementation is provided in a separate package (@mubelotix/calendrier-solar).

Our base equinox calculations are still rigorously validated to ensure correct date rollovers:

  • Accuracy: Our calendar dates are highly accurate, avoiding the one-day off errors found in many alternatives that rely on fixed leap-year rules.
  • Range: It provides correct dates from 1583 to 2999 (years whose equinoxes are astronomically verified). Outside of this range, years will begin to shift by one day every few years.

The equinox dates were collected and computed by the Observatoire de Paris.

See this package in action

Usage

import { DateTime } from '@mubelotix/calendrier';

let date = DateTime.from_ymd(1, 1, 1); // Calendar starts on september 22nd, 1792
let date_fmt = date.to_string();
console.assert(date_fmt === "1 Vendémiaire 1");

let ts = date.timestamp(); // Convert to timestamp, number of seconds since republican epoch
console.assert(ts.seconds === 0);

let ts_unix = ts.to_unix(); // Convert to unix timestamp
console.assert(ts_unix === -5594228280n);

Calendar specification

Article premier. L’ère des Français compte de la fondation de la république, qui a eu lieu le 22 septembre 1792 de l’ère vulgaire, jour où le soleil est arrivé à l’équinoxe vrai d’automne, en entrant dans le signe de la Balance, à 9 heures 18 minutes 30 secondes du matin pour l’observatoire de Paris.

II. L’ère vulgaire est abolie pour les usages civils.

III. Chaque année commence à minuit, avec le jour où tombe l’équinoxe vrai d’automne pour l’observatoire de Paris.

IV. La première année de la République française a commencé à minuit le 22 septembre 1792, et a fini à minuit, séparant le 21 du 22 septembre 1793.

V. La seconde année a commencé le 22 septembre 1793 à minuit, l’équinoxe vrai d’automne étant arrivé ce jour là, pour l’observatoire de Paris, à 3 heures 11 minutes et 38 secondes du soir.

VI. Le décret qui fixait le commencement de la seconde année au Ier janvier 1793, est rapporté ; tous les actes datés l’an second de la République, passés dans le courant du Ier janvier au 21 septembre inclusivement, sont regardés comme appartenant à la première année de la République.

VII. L’année est divisée en douze mois égaux, de trente jours chacun : après les douze mois suivent cinq jours pour compléter l’année ordinaire ; ces 5 jours n’appartiennent à aucun mois.

VIII. Chaque mois est divisé en trois parties égales, de dix jours chacune, qui sont appelées décades.

IX. Les noms des jours de la décade sont :

Primedi, Duodi, Tridi, Quartidi, Quintidi, Sextidi, Septidi, Octidi, Nonidi, Décadi.

Les noms des mois sont :

Pour l’Automne : Vendémiaire, Brumaire, Frimaire ;

Pour l’Hiver : Nivôse, Pluviôse, Ventôse ;

Pour le Printemps : Germinal, Floréal, Prairial ;

Pour l’Été : Messidor, Thermidor, Fructidor.

Les cinq derniers jours s’appellent les Sansculotides.

X. L’année ordinaire reçoit un jour de plus, selon que la position de l’équinoxe le comporte, afin de maintenir la coïncidence de l’année civile avec les mouvements célestes. Ce jour, appelé jour de la Révolution, est placé à la fin de l’année et forme le sixième des Sansculotides. La période de quatre ans, au bout de laquelle cette addition d’un jour est ordinairement nécessaire, est appelée la Franciade, en mémoire de la révolution qui, après quatre ans d’efforts, a conduit la France au gouvernement républicain. La quatrième année de la Franciade est appelée Sextile.

XI. Le jour, de minuit à minuit, est divisé en 10 parties ou heures, chaque partie en dix autres ; ainsi de suite jusqu’à la plus petite portion commensurable de la durée. La 100e partie de l’heure est appelée minute décimale ; la 100e partie de la minute est appelée seconde décimale. Cet article ne sera de rigueur pour les actes publics, qu’à compter du Ier Vendémiaire, l’an trois de la République.

XII. Le comité d’instruction publique est chargé de faire imprimer en différens formats le nouveau calendrier, avec une instruction simple pour en expliquer les principes et l’usage.

XIII. Le calendrier, ainsi que l’instruction, seront envoyés aux corps administratifs, aux municipalités, aux tribunaux, aux juges-de-paix et à tous les officiers publics, aux armées, aux sociétés populaires et à tous les colléges et écoles. Le conseil exécutif provisoire le fera passer aux ministres, consuls et autres agens de France dans les pays étrangers.

XIV. Tous les actes publics seront datés suivant la nouvelle organisation de l’année.

XV. Les professeurs, les instituteurs et institutrices, les pères et mères de famille, et tous ceux qui dirigent l’éducation des enfans, s’empresseront à leur expliquer le nouveau calendrier, conformément à l’instruction qui y est annexée.

XVI. Tous les quatre ans, ou toutes les franciades, au jour de la révolution, il sera célébré des jeux républicains, en mémoire de la révolution française.

The contradiction between article III and IX is resolved by prioritizing article III, as decided in year 79 by the Commune de Paris. Indeed, a year isn't exactly 365.25 days long, so Franciades will not always be 365*4+1 days long.

Also as a reminder: Romme's WIP reform was never adopted. It wasn't a good idea anyway. This crate will never implement the reform.