Aggregate iCal, Google Calendar, and events. Pluggable or standalone app.
Ruby HTML CSS JavaScript
Latest commit 69beca5 Sep 21, 2015 @Aupajo Merge pull request #16 from Aupajo/encoding
Force text fields to be UTF-8
Failed to load latest commit information.
bin Add CLI Jul 3, 2014
lib 1.1.0.beta4 Sep 21, 2015
spec Simple caching support Nov 14, 2014
.gitignore Gem scaffold Apr 2, 2014
LICENSE.txt Remove references to Sinatra-Gcal Oct 25, 2014
Rakefile Extract example rackup Jun 21, 2014
almanack.gemspec Simple caching support Nov 14, 2014 Fix constant reference in Nov 8, 2014


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