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

gravitationism-calendar

v1.0.1

Published

A bit of JavaScript to create the [Gravitationism](https://blog.izs.me/2025/10/church-of-gravitationism/) [Solar](https://izs.me/solar-events.ics) and [Lunar](https://izs.me/months.ics) calendars.

Readme

A bit of JavaScript to create the Gravitationism Solar and Lunar calendars.

How The Calendar Works

The year is broken up into 8 seasons, based on the position of the earth around the sun:

  • Winter (the start of the year)
  • Imbolc
  • Spring
  • Beltane
  • Summer
  • Lughnasadh
  • Autumn
  • Samhain

These range from 44-48 days, because the earth moves in an elliptical orbit, so the seasons closer to the aphelion (which occurs about 2 weeks into summer) are a bit longer.

The lunar months go from new moon to new moon. The month that includes the winter solstice is "January", named for the two faced backward/forward looking god of doorways and passages. (When January starts on the winter solstice, this is very auspicious.)

From there, they are named from 1 to 11:

  • Primember
  • Duember
  • Triember
  • Fourember
  • Pentember
  • Sexember
  • September
  • October
  • November
  • December
  • Elfember
  • Lastly, when another month is needed in order for January to contain the winter solstice, the month of Fayember is added. This "leap month" occurs about every 2-3 years.

Because the lunar months don't line up with the year and seasons, they are sort of "extra". Normal time keeping is done with the number of the Gravitationism year (with G0 corresponding roughly to CE 2024), running from one winter solstice to the next. For example, the conventional ISO date 2026-03-13 would be written in its short form as G2-2-38, or long form Friday, G2 Imbolc 38, Day 24 of Duember.

Note that season dates are zero-indexed, and the first day of the season is not given a number, so 2026-06-21 would be G2-5-0 or Sunday, G2 Summer, Day 7 of Sexember.

The included GravitationismDate class is included that will do all the relevant calculations:

import { GravitationismDate } from 'gravitationism-calendar'

// pass in a Date object, or any valid ISO date
console.log(new g.GravitationismDate('2024-06-27T12:00-0700'))
/*
GravitationismDate {
  season: {
    name: 'summer',
    date: 2024-06-20T20:52:00.000Z,
    days: 47,
    gyear: 0
  },
  seasonDate: 7,
  year: 0,
  lunarMonth: {
    name: 'Sexember',
    start: 2024-06-06T12:38:00.000Z,
    end: 2024-07-05T22:57:00.000Z
  },
  lunarDate: 21,
  isoDate: 2024-06-27T19:00:00.000Z,
  fullString: 'Thursday, G0 Summer 7, Day 21 of Sexember',
  shortString: 'G0-5-7'
}
*/

ICS feeds

The ICS feeds are generated for use in the US/Pacific time zone. For convenience, it makes the most sense to align with the solar day, but technically the season doesn't actually start until the moment of orbital alignment, so this can occur on different solar days in different time zones.

If you're in the US/Pacific time zone, and want this data in your calendar app, you can subscribe to these two calendar feeds:

  • https://izs.me/solar-events.ics
  • https://izs.me/months.ics

To generate the ICS feeds for your time zone if you're not in US/Pacific, run:

npm install
make clean all

and then pull them out of the ./ics folder.