WebCalendar

Running WordPress? There’s now a WordPress-native version — WebCalendar for WordPress — that installs as a plugin instead of a separate PHP application, with full recurring-event support, iCal import/export, and a built-in holiday library. It’s free on WordPress.org, and there’s an overview here on k5n.us. The standalone PHP application on this page is still maintained and is not going away.

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.

  • chore(release): v1.9.23
    by craigk5n on August 12, 2026 at 3:17 pm

    chore(release): v1.9.23

  • docs(changelog): record changes since v1.9.22
    by craigk5n on August 12, 2026 at 3:11 pm

    docs(changelog): record changes since v1.9.22 Populates the empty [Unreleased] section ahead of the next release. Covers the Export for WordPress menu entry (#681), the bottom date selectors and revived MENU_DATE_TOP setting (#695), the obsolete install/default_config.php load (#693), 100% English-US translation coverage (#701), the php_codesniffer CVE bump (#697), and the CI test and PHPStan cleanups (#696, #698).

  • Merge pull request #701 from craigk5n/chore/translations-english-us-c…
    by craigk5n on August 12, 2026 at 3:05 pm

    Merge pull request #701 from craigk5n/chore/translations-english-us-complete i18n: bring English-US translations to 100% coverage

  • i18n: bring English-US translations to 100% coverage
    by craigk5n on August 12, 2026 at 2:52 pm

    i18n: bring English-US translations to 100% coverage Ran tools/update_translation.pl, then filled in every phrase it flagged. tools/check_translation.pl now reports “All text was found” (was 24 of 1536 missing, 98.4%). What update_translation.pl did on its own: – Reorganized phrases by the page where they first appear. – Inserted commented << MISSING >> stubs for the 24 untranslated phrases. – Dropped 59 entries it could not find in any translate()/tooltip() call. All 59 verified dead before accepting the removal: 33 are unreferenced anywhere (leftovers from the deleted install/ directory), ~22 appear only under wizard/, and 4 were substring orphans — “by day”, “by date” and “by position” survive only inside translate(‘Monthly (by day)’) and friends, and “Copy” only inside translate(‘Copy entry’). The 24 stubs are replaced with real entries. Note that the base English file maps each phrase to itself, so these are identity entries; the value is that translators now see the phrases at all. Three phrases could not be expressed in this file format. Both check_translation.pl and read_trans_file() in includes/translate.php split each line on the FIRST colon, so a phrase containing a colon can never be keyed correctly — it silently fell back to raw English in every language. Reworded at the source to drop the colon: Options: restrict permissions -> Options – restrict permissions Manifest signature FAILED: XXX -> Manifest signature FAILED – XXX The MCP SDK PHP package must be installed. Run: composer install -> The MCP SDK PHP package must be installed. Run composer install The XXX placeholder in the second is still substituted by str_replace(), so that message is unaffected beyond the separator character. Not addressed here: wizard/ contains zero translate() calls, so the installer is hardcoded English and untranslatable. That regression dates from the v1.9.13 wizard rewrite and is why so many of the dropped entries existed.

  • Merge pull request #681 from craigk5n/feat/wordpress-export-menu
    by craigk5n on August 12, 2026 at 2:05 pm

    Merge pull request #681 from craigk5n/feat/wordpress-export-menu feat: add Export for WordPress to Admin Settings menu

Download Metrics

  • Downloads via Github: 20808
  • Downloads via SourceForge: 1417373

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.