WebCalendar

On WordPress? WebCalendar is also available as a WordPress plugin — a scalable, RFC 5545-compliant calendar you can drop into any WordPress site.

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.

  • Merge pull request #678 from craigk5n/fix/676-cal-passwd-width
    by craigk5n on July 23, 2026 at 4:01 pm

    Merge pull request #678 from craigk5n/fix/676-cal-passwd-width fix: prevent “Error executing query” on first login after upgrade (#676)

  • Merge pull request #677 from craigk5n/fix/mcp-exclude-deleted-events
    by craigk5n on July 23, 2026 at 3:59 pm

    Merge pull request #677 from craigk5n/fix/mcp-exclude-deleted-events fix(mcp): exclude deleted/rejected events from read tools; correct SDK install hint

  • fix: prevent “Error executing query” on first login after upgrade (#676)
    by craigk5n on July 23, 2026 at 3:47 pm

    fix: prevent “Error executing query” on first login after upgrade (#676) Upgrading from v1.9.12 (or any DB already past v1.9.0) could fail with a bare “Error executing query.” page on the first login after the wizard finished. Root cause: webcal_user.cal_passwd was left at a narrow width (e.g. VARCHAR(32), sized for MD5) because the widening to VARCHAR(255) was gated only in the v1.9.0 upgrade block, so databases already past v1.9.0 skipped it. On first login, user_valid_login() rehashes the old MD5 password to a 60-char bcrypt hash; writing that into the narrow column is rejected by strict-mode MySQL/MariaDB, and dbi_execute()’s default fatal-on-error aborted the request. The underlying driver exception is swallowed, so nothing appeared in the PHP/DB logs. Fix A (wizard/shared/upgrade-sql.php): widen cal_passwd to VARCHAR(255) in the latest upgrade block so every upgrade path is covered (MySQL and PostgreSQL; SQLite is length-agnostic and gets an explicit empty entry to avoid the MySQL MODIFY fallback). Re-running MODIFY on an already VARCHAR(255) column is a harmless no-op. Fix B (includes/user.php): make the rehash UPDATE (and its revert) non-fatal so a strict-mode narrow-column rejection falls through to the existing verify/revert recovery instead of killing the login. The user logs in normally; the password simply stays in the old format until the column is widened. Add regression tests asserting the widening is emitted for a post-v1.9.0 upgrade on MySQL/PostgreSQL and is not sent to SQLite.

  • fix(mcp): recommend ‘composer install’ instead of ‘composer require m…
    by craigk5n on July 20, 2026 at 6:37 pm

    fix(mcp): recommend ‘composer install’ instead of ‘composer require mcp/sdk’ The mcp/sdk package is already a locked dependency in composer.json, so ‘composer install’ is sufficient. ‘composer require’ would rewrite composer.json/composer.lock, which are tracked by the signed security audit manifest and would then be flagged as MODIFIED.

  • updated Dutch.txt (#674)
    by wurtel2 on July 17, 2026 at 6:43 pm

    updated Dutch.txt (#674) Ran update_translation.pl and added missing translations

Download Metrics

  • Downloads via Github: 20566
  • Downloads via SourceForge: 1417215

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.