On WordPress? WebCalendar is also available as a WordPress plugin — a scalable, RFC 5545-compliant calendar you can drop into any WordPress site.
Table of Contents
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
- Github page for WebCalendar:
- Issues
- Pull requests
- Wiki
- Download the development code as a zip file
License
WebCalendar is available under the GNU General Public License, version 2.
For more information on this license:
Documentation
- System Administrator’s Guide
Introduction, installation instructions and FAQ - UPGRADING (WebCalendar 1.3.0)
Provides instruction on upgrading to version 1.3.7 from an older version - Database Design (WebCalendar 1.3.0)
Version 1.2.7 database schema
Most Recent Changes
Below are the most recent source code commits to github on the master branch.
- 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
- fix(mcp): exclude deleted/rejected events from read tools (#671)by craigk5n on July 15, 2026 at 6:59 pm
fix(mcp): exclude deleted/rejected events from read tools (#671) list_events, search_events, get_availability, and check_conflicts joined webcal_entry_user but never filtered cal_status, so events soft-deleted through the web UI (cal_status=’D’, rows left in place) still appeared in MCP results. Add ‘AND eu.cal_status IN (”A”,”W”)’ to all four read queries, matching the core UI’s event queries (includes/functions.php). Add an integration test that soft-deletes an event the way the UI does and asserts every read tool then excludes it.
- feat(mcp): add optional time to add_event (#670)by craigk5n on July 15, 2026 at 4:32 pm
feat(mcp): add optional time to add_event (#670) add_event stored cal_time=-1 (untimed) unconditionally, so one-off timed events created via MCP lost their time. Add an optional `time` parameter (HHMMSS in the GMT frame, or -1 for untimed), mirroring add_recurring_event; renamed the local mod-time variable to avoid the clash. Schema + dispatch updated. – test_add_event_schema_has_optional_time – integration: add_event with a time stores cal_time; without it stays -1 Backward compatible (time defaults to -1).
- fix(mcp): make CLI/STDIO transport work via shared dispatcher (#669)by craigk5n on July 15, 2026 at 3:27 pm
fix(mcp): make CLI/STDIO transport work via shared dispatcher (#669) The CLI STDIO path called Server::builder()->addToolInstance(), a method that exists in no version of mcp/sdk (0.3.0-0.6.0), so `php mcp.php` fataled with “Call to undefined method” on every invocation — the documented STDIO entrypoint (Claude Desktop) never worked. It was also divergent: it tried to build tool metadata from #[McpTool] attributes, which would not match the curated definitions in mcp_list_tools(). Replace the broken SDK Builder block with a small newline-delimited JSON-RPC loop (mcp_run_stdio_loop) that dispatches through the same mcp_dispatch_request()/mcp_list_tools() path the HTTP transport uses, so STDIO and HTTP advertise and route tools identically from a single source of truth. Notifications (no id) receive no response; malformed input yields a JSON-RPC parse error. Remove the now-unused Server and StdioTransport imports. Also remove a trailing tool-call artifact (“</content>…”) accidentally committed after the closing ?> in mcp.php (introduced in d0abe343). It was latent because both transport branches exit() before EOF. Add McpStdioLoopTest: covers framing, notification suppression, parse errors, blank-line skipping, and tools/call routing via in-memory streams.
- chore(deps): bump mcp/sdk from 0.3.0 to 0.6.0 (#659)by dependabot on July 15, 2026 at 2:53 pm
chore(deps): bump mcp/sdk from 0.3.0 to 0.6.0 (#659) * chore(deps): bump mcp/sdk from 0.3.0 to 0.6.0 Bumps [mcp/sdk](https://github.com/modelcontextprotocol/php-sdk) from 0.3.0 to 0.6.0. – [Release notes](https://github.com/modelcontextprotocol/php-sdk/releases) – [Changelog](https://github.com/modelcontextprotocol/php-sdk/blob/main/CHANGELOG.md) – [Commits](https://github.com/modelcontextprotocol/php-sdk/compare/v0.3.0…v0.6.0) — updated-dependencies: – dependency-name: mcp/sdk dependency-version: 0.6.0 dependency-type: direct:production update-type: version-update:semver-minor … Signed-off-by: dependabot[bot] <support@github.com> * fix(deps): pin composer platform to PHP 8.2 so mcp/sdk 0.6.0 lock installs Dependabot resolved symfony/uid to v8.1.0 (requires PHP >=8.4.1), so the lock could not be installed on the PHP 8.2/8.3 CI matrix. Add config.platform.php=8.2.0 and require php ^8.2 (matching the floor the lock already required via symfony/uid v7.4.4 and symfony/console v7.4.6), then regenerate the lock. Only symfony/uid changes: v8.1.0 -> v7.4.9. mcp/sdk stays at 0.6.0. ——— Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Craig Knudsen <craig@k5n.us>
Download Metrics
- Downloads via Github: 20478
- Downloads via SourceForge: 1417198
Related Links
- Standards
- 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.
- iCalShare
- Apple iCal Library
- DateDex
- Project24: holiday and weather calendars