Aggregate iCal, Google Calendar, and events. Pluggable or standalone app.
Ruby HTML CSS JavaScript
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Build Status Code Climate Gem Version

A calendar that combines events from different sources (such as Google Calendar,, and iCal feeds), and can be hosted for free on Heroku.

Sinatra GCal example

See a demo running at


  • Aggregate multiple calendars together into one stream
  • Supports iCal feeds (incuding Google Calendars)
  • Supports groups
  • Just supply a hash to create any arbitrary event
  • Supports being freely hosted on Heroku
  • 100% customisable themes with Sass and CoffeeScript support
  • Server optional (you can use the underlying calendar library by itself)
  • Rack-compatible (can be mounted inside a Rails app if needed)
  • Produces iCal feed for smartphone and desktop calendar apps to subscribe to

Video tutorial

View on YouTube


Run the following command:

gem install almanack

Creating a calendar

Generate a new calendar with:

almanack new my-calendar

This will create a directory called my-calendar and set up your new project.

Once set up, run:

cd my-calendar
almanack start

By default, your calendar will run on http://localhost:9292.


See examples inside for iCal feeds,, or static events.

Almanack.config do |c|
  c.title = 'My Calendar'
  c.theme = 'my-custom-theme'
  c.days_lookahead = 30
  c.add_ical_feed ''
  c.add_ical_feed ''
  c.add_meetup_group group_urlname: 'Christchurch-Ruby-Group', key: 'mysecretkey'

Note: You'll need your API key to use Meetup.

Custom themes

Inside your project, you can generate a new theme with:

almanack theme my-theme-name

Remember to update your to switch themes:

Almanack.config do |c|
  c.theme = 'my-theme-name'

Deploying to Heroku

Deployment works with Git and Heroku. First, add your work to git (an repository is already initialized for you when you run almanack new):

git add .
git commit -m "My awesome calendar"

With the Heroku Toolbelt installed:

almanack deploy my-awesome-calendar

Will create and deploy

Subsequent commits can be deployed with just:

almanack deploy


  1. Fork it ( )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request