gs is a grammar of recurring calendar events, implemented as an R package. It enables users to easily create and work with schedules, even in cases when the pattern of events is irregular. gs does this by providing a set of simple to understand functions for making schedules along with functions for combining them to form more complex ones.

The gs grammar is both flexible and declarative. The flexibility allows users to compose arbitrarily complex schedules from simple and intuitive buildings blocks. Because the grammar is declarative, the user need not concern themselves with the details of how a particular schedule works, rather they can specify what they want from a schedule and let gs implement it for them.


The package is currently experimental. Users are cautioned against relying on it for anything of importance. It can be downloaded from Github:


Feedback, contributions, bug report and suggestions are welcome and can be made in the issues tab of the Github repo.

Getting started

If you have not used gs before, the best place to get started is the introductory vignette.


I would like to extend an enormous thank you to the authors of and contributors to the lubridate package. gs relies on lubridate for much of its functionality and builds explicitly on its syntax.

I would also like to thank Martin Fowler, whose writing1 on this topic helped guide my thinking in a number of important ways.

Finally I’d also like to thank Garrett Grolemund and Hadley Wickham who in their paper2 on lubridate inspired me to create gs and pointed me in Fowler’s direction:

In particular, we hope to create methods for R that work with reoccurring temporal date patterns, which were introduced by Fowler (1997).

  1. Fowler, M. (1997). “Recurring events for calendars.” <URL:>.

  2. Grolemund G, Wickham H (2011). “Dates and Times Made Easy with lubridate.” Journal of Statistical Software, 40(3), 1-25. <URL:>.