WebCalendar

About WebCalendar

WebCalendar is a PHP-based calendar application that can be configured as a single-user calendar, a multi-user calendar for groups of users, or as an event calendar viewable by visitors. MySQL/MariaDB, SQLite3, PostgreSQL, Oracle, DB2, Interbase, MS SQL Server, or ODBC is required. The version 1.9.X releases are still a little rough around the edges since these include an overhaul of the UI to use Bootstrap and jQuery and a complete rewrite of the web-based installer.

WebCalendar can be setup in a variety of ways, such as…

  • A schedule management system for a single person
  • A schedule management system for a group of people, allowing one or more assistants to manage the calendar of another user
  • An events schedule that anyone can view, allowing visitors to submit new events
  • A calendar server that can be viewed with iCalendar-compliant calendar applications like Mozilla Sunbird, Apple iCal or GNOME Evolution or RSS-enabled applications like Firefox, Thunderbird, RSSOwl, FeedDemon, or BlogExpress.

Overview of Features

  • Multi-user support
  • 30 supported languages: Basque, Bulgarian, Chinese-Big5, Chinese-GB2312, Czech, Danish, Dutch, English-US, Estonian, Finnish, French, Galician, German, Greek, Holo-Big5, Hungarian, Icelandic, Italian, Japanese, Korean, Norwegian, Polish, Portuguese_BR, Portuguese, Romanian, Russian, Spanish, Swedish, Turkish, Welsh (see current list of translations here)
  • Web-based installer
  • Auto-detect user’s language preference from browser settings
  • View calendars by day, week, month or year
  • View another user’s calendar
  • View one or more users’ calendar via layers on top of your own calendar
  • Add/Edit/Delete users
  • Add/Edit/Delete events
  • Repeating events including support for overriding or deleting (exceptions)
  • Configurable custom event fields
  • User-configurable preferences for colors, 12/24 time format, Sun/Mon week start
  • Checks for scheduling conflicts
  • Email reminders for upcoming events
  • Email notifications for new/updated/deleted events
  • Export events to iCalendar
  • Import from iCalendar/ics format
  • Optional general access (no login required) to allow calendar to be viewed by people without a login (useful for event calendars)
  • Users can make their calendar available publicly to anyone with an iCalendar-compliant calendar program (such as Apple’s iCal, Mozilla Calendar or Sunbird)
  • Publishing of free/busy schedules (part of the iCalendar standard)
  • RSS support that puts a user’s calendar into RSS
  • Subscribe to “remote” calendars (hosted elsewhere on the net) in either iCalendar or hCalendar formats (WebCalendar 1.1+)
  • User authentication: Web-based, HTTP, LDAP or NIS

System Requirements

  • PHP 8 or later
  • PHP support and access to one of the following databases:
    • SQLite
    • MySQL/MariaDB
    • Oracle
    • Postgres
    • IBM DB2
  • Access to cron for Linux/Unix systems (to send out reminders)

Development Cost

The following metrics from Ohloh show how much it would have cost to commercially develop WebCalendar.

  • Codebase Size: 138,588 lines
  • Estimated Effort: 34 person-years
  • Estimated Cost: $1,884,469
  • (As of 11 August 2024)

Donations

If you’d like to help support the costs of developing, maintaining and supporting WebCalendar, please consider donating.

Developer Resources

License

WebCalendar is available under the GNU General Public License, version 2.

For more information on this license:

Documentation

Most Recent Changes

Below are the most recent source code commits to github on the master branch.

  • Updated
    by craigk5n on April 14, 2026 at 8:02 pm

    Updated

  • Merge pull request #634 from craigk5n/docs/modernize-for-v2
    by craigk5n on April 14, 2026 at 7:56 pm

    Merge pull request #634 from craigk5n/docs/modernize-for-v2 Modernize documentation for v2.0.0 preparation

  • fix: correct ICS export timezone for Apple Calendar and CalDAV clients
    by craigk5n on April 14, 2026 at 7:43 pm

    fix: correct ICS export timezone for Apple Calendar and CalDAV clients Three related defects caused timed events to display at wrong times when subscribed via Apple Calendar (publish.php / icalclient.php): 1. export_time() in the non-VTIMEZONE branch passed $gmt=false to date_to_epoch(), so mktime() re-applied the server TZ offset to values already stored as UTC by edit_entry_handler.php. This was the April-1 #74 change, based on an incorrect premise about storage. Restored the pre-#74 behaviour ($gmt = $time > 0) so gmmktime round-trips the stored UTC value. #74’s original symptom originated in event creation, not export. 2. The VTIMEZONE DTSTART emission used the UTC value (with trailing ‘Z’) under a TZID= label. Per RFC 5545, a TZID-tagged value must be LOCAL wall time and MUST NOT carry ‘Z’. Apple read the UTC time as NY-local, producing a constant offset equal to the TZ. Emit local wall time via date(‘Ymd\THis’, …) instead. 3. The VTIMEZONE DTEND emission hard-coded T000000 regardless of the event’s actual end time, truncating every timed event to midnight on the TZID path. Emit the real local end time. The TZID path fires for non-recurring events too, because $use_vtimezone persists across the foreach loop in export_ical() and stays true for all events after the first recurring one. Rewrote tests/ExportTimeTest.php around the real storage contract (stored cal_time is UTC; export round-trips it) and added a VTIMEZONE branch test with dbi_* stubs that guards against both RFC violations. Verified end-to-end against the live DB for event 846133: DTSTART;TZID=America/New_York:20260428T080000 DTEND;TZID=America/New_York:20260428T083000

  • fix: support emoji and full Unicode in iCal imports and display
    by craigk5n on April 3, 2026 at 2:32 pm

    fix: support emoji and full Unicode in iCal imports and display Remove deprecated utf8_decode() calls that converted UTF-8 to ISO-8859-1 on iCal import, destroying emoji and non-Latin-1 characters. The database (utf8mb4), HTML output, and internal encoding are all already UTF-8, so the conversion was both harmful and unnecessary. Also switch substr()/strlen() to mb_substr()/mb_strlen() in build_entry_label() and build_entry_popup() to prevent multi-byte characters from being split mid-byte during name truncation.

  • docs: add v2.0.x development guide and define release model
    by craigk5n on April 2, 2026 at 1:38 pm

    docs: add v2.0.x development guide and define release model 1.9.x = development series, 2.0.x = stable/production (fixes and code quality only), 2.1.x = next development series. – Add docs/v2-development.md with scope, priorities, and workflow – Update migration-v2.md: fix PHP version, replace TODO with stability note – Remove ROADMAP.md from .gitattributes (file already untracked) – Update docs/index.md with v2 dev guide link and Reference section – Add Windows Task Scheduler instructions to admin-guide.md – Add manual database setup section to installation.md

Download Metrics

  • Downloads via Github: 20132
  • Downloads via SourceForge:

Related Links

  • Standards
    • RFC 2445: Internet Calendaring and Scheduling Core Object Specification (iCalendar)
    • CalDAV: Calendaring and Scheduling Extensions to WebDAV (DRAFT) 
      [Note: WebCalendar does not yet support CalDAV.)
  • Calendar client applications – You can use the applications to view events stored in WebCalendar if you enable its publishing settings.
  • iCalendar/ics download sites – These sites contain calendars for holidays, sports teams schedules, music converts, etc. You can import these files into WebCalendar.