Jical – Java iCal - Group Scheduler SourceForge Logo

JiCal is one answer to that perennial question:

How does Linux replace MS Exchange's calendaring and scheduling features?“

The JiCal answer is:


NEW in Version 1.1: XML Output – Render your evolution calendar as HTML/PDF/TXT, Shell Scripting – Run JiCal from a script or via CRON (See Below). Download here.

How it Works:

Group Scheduling: How does it do that?

JiCal can rip through your users home directories, find iCalendars that have been stored from evolution (ie Ximian.org) and convert them to free busy files for serving from your webserver.

Why does it do this?

Your users can book appointments with each other in Evolution based upon available time recorded in their respective evolution diaries using good ol' http.

What about MS Outlook(tm) users?

A spin off of this (as yet untested), is that Outlook users should be able to book meetings with your Evolution users based on the FBURL. It's in Outlook but I don't have the MS products so I can't test it yet.

Update: Thank you to the many helpers who have forwarded their Outlook views. I can now comprehensively confirm that JiCal works with pretty much any version of Outlook. Here are some examples:

Paul Buhler - Thank you for this Outlook view of the Free/Busy time with sfg.ifb.

Oliver Bouriez – thank you for this Outlook View of the Free/Busy time with sfg.ifb

Everybody else: Eric Sheffer, Stuart Ellis, Richard Neal, Jeff Waugh, Gary Frederick, Kyle Davenport, James McKean, Jack Britton, Simon Tardell, thank you too.

NEW in Version 1.1:

XML – Render your evolution calendar as HTML/PDF/TXT

JiCal has been extended to enable generation of an XML calendar format which expands the repeating events and which you can render as HTML, CSV, PDF, TXT via stylesheets you write. This means that you can expose your Evolution Calendar on a website. The natural extensions here are to create sub-calendars for your weblog for your special project timetables/deadlines, even for your holiday planning with friends. This is a primary release and there may be future changes to the XML as it's a first cut. Note: This release does not use XCAL as it does not provide a method for expanding repeating events, something JiCal does well and something everybody needs to display a calendar.

Shell Scripting – Run JiCal from a script or via CRON

JiCal has the ability to be called via a shell script. This enables sites where they do not have the time to download and install JBOSS to write their own jical render routines for inclusion in CRON or as event wrappers around evolution (eg. Evolution.sh which renders the FBURL after evo exits).

Where to from here? Calendar Access Protocol – a true Calendar Server for Linux.

We are looking at extending JiCal to become a true CAP (Calendar Access Protocol) server under the Jboss framework. This will provide the ability to serve up Calendar data remotely to client Calendaring applications. One problem is that the current CAP standard is still at draft stage and may change. Another is that this is a large project and since JiCal is funded by Eureka IT at present, it will take a long time to complete due to lack of capital. Help on the project would be most appreciated.

Where to from here? Portals/Cocoon

There is a lot of synergy between what we are doing here and the Cocoon/Jetspeed projects. If anyone would like to write JiCal as a portlet or as a Cocoon engine rendered thingumejig, I'm all ears. Mail me.

How you can Help – XSLT expertise required..

If you know XSLT XML Style sheet translations, JiCal could use your help. We are looking at building a set of example XML translations from JiCal XML to provide YAG/QAG/MAG/WWAG/WAG/DAG views (ie Year-At-a-Glance = YAG) as well as an excellent WebLog HTML version and if you're really keen and know FO's (Format objects), a PDF example to top it off.

What's that about RFC2445?

A sub-plot to this server is the partial implementation of RFC2445. I searched the net for a java definition that was open source and could not find one. So this is the start of one and by the end, it will have the same/similar capabilities as the C version (libical I think). Please take it, use it, improve it and give back the changes...

Stuart Guthrie

Team Leader /Developer


JiCal uses the LGPL license. This means you can commercially extend it but please contribute any code changes back to the org.jical package.

Download here

Group Scheduling: How it works (gutsy bit)

JiCal runs as a Mbean in the jboss 2.4.* architecture. Based on your parameters, JiCal wakes up periodically, scans the home directories for your evolution iCalendar.ics files and converts them to a FBURL based upon:


This means that your users can find out each others free/busy information and schedule

with each other simply by accessing the website that the .ifb was posted to.

For example: mine:


If you go there with a web browser now, you should see my current calendar availability as a little text file. The kool thing about this is that it's a standard (RFC2445) implemented in evolution so that if you get my vCard from


You can then import the vcard into evolution or outlook and schedule meetings with me. iCal RFC2445 specs that time is all in UTC (almost UK time) so that if you book me for 4pm your time, that might well be 3am my time...beware..


  1. JAVA 1.4. You will need java running on the server. I've tested it with SUN 1.4. We use the one at http://sun.java.com.

  2. 2. JBOSS is now not a dependency. You can call JiCal as a shell script.... However, due to its excellent server architecture, jboss is the platform of choice for jical. jboss is a pure java server that implements the J2EE spec amongst other things. Get jboss from http://www.jboss.org. Currently you will need the 2.4.x architecture as I'm not uptodate with the 3. architecture of jboss. watch this space ---><---

Configuring Jboss – should you choose to use it..

There are lots of excellent guides to getting jboss running so I won't elaborate there except to say, buy their doco if you're interested - it's excellent.

Once jboss runs OK, you need to copy the jical.jar into your {jboss.home}/lib/ext directory, then add the below text (after editing it to your site's parameters) to your jboss.jcml (I use $JBOSS_HOME/jboss/conf/ jetty/jboss.jcml but then I think jetty rocks, you may not...), restart jboss and you should be converting iCals to FBURLs. I've inserted a message or to into the jboss server.log file to show you how long it's taking etc. You can now 'group schedule' by adding the FBURL on the 'collaboration' tab of each evolution contact record, then inviting them to a meeting and looking at the 'scheduling tab in Evolution.


<!-- ==================================================================== -->

<!-- Add your custom MBeans here -->

<!-- ==================================================================== -->

<mbean code = "org.jical.calServer" name=":service=calServer,name=CalServer">

<attribute name="EmailDomain">eurekait.com</attribute>

<attribute name="FbURLDirectory">http://www.eurekait.com/</attribute>

<attribute name="FbPublishDirectory">/www/website.live/</attribute>

<attribute name="DaysForward">365</attribute>

<attribute name="WatchFiles">/evolution/local/Calendar/calendar.ics</attribute>

<attribute name="Timeout">15000</attribute>



Now to explain those attributes:

<attribute name="EmailDomain">eurekait.com</attribute>

>>>This is the end part of the email address written out for each user found.

eg USER1@eurekait.com, USER2@eurekait.com etc

<attribute name="FbURLDirectory">http://www.eurekait.com/</attribute>

>>>>This is the eventual FBURL for the outside world. When this FB file is created,

it is placed on a servers web server directory. The world outside this server

can then call in to the users FBURL like this

eg http://www.eurekait.com/sfg.ifb (sfg being the user name).

<attribute name="FbPublishDirectory">/www/website.live/</attribute>

>>>> This is the directory to which the calServer creates newly formed free/busy file.

eg /www/website.live/sfg.ifb is created when

calServer parses /home/sfg/evolution/local/Calendar/calendar.ics

<attribute name="DaysForward">365</attribute>

>>>> This is the number of days forward of NOW to create the free/busy file for.

This is particularly relevant as your availability is more vague the further out

you look. It also will slow parsing as regular meeting events will need to be created

out to that date. For example a weekly meeting with 365 days specified would create

52 BUSY events in the free/busy file.

eg 365 means extend the free/busy information a year into the future.

<attribute name="WatchFiles">/evolution/local/Calendar/calendar.ics</attribute>

>>>> This is the file path under the hole directory that we search for the calendar

in. This is the area I am currently improving.

eg Parsing /home/sfg would find file:


<attribute name="Timeout">15000</attribute>

>>>> This parameter is the sleep time between parsing all of the users files. This means

that if it takes 60 seconds to parse the files and create the free busy files, there is

then a rest time before going again. You will need to adjust this to your users expectations.

eg 15000 indicates 15000 milliseconds ie 15 seconds.