{"id":270248,"date":"2026-01-05T02:50:59","date_gmt":"2026-01-05T02:50:59","guid":{"rendered":"https:\/\/en-au.wordpress.org\/plugins\/vieww-events-calendar\/"},"modified":"2026-07-21T00:06:30","modified_gmt":"2026-07-21T00:06:30","slug":"vieww-events-calendar","status":"publish","type":"plugin","link":"https:\/\/mg.wordpress.org\/plugins\/vieww-events-calendar\/","author":23428051,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.5.0","stable_tag":"2.5.0","tested":"7.0.2","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"Vieww Events Calendar \u2013 Recurring Events, Event Map & Calendar Plugin","header_author":"Jarrad Nicoll","header_description":"A professional, self-contained events calendar plugin with recurring events, design customization, and mobile-optimized views. Features grid, list, and interactive month calendar displays.","assets_banners_color":"f8f9fa","last_updated":"2026-07-21 00:06:30","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/nextpointdigital.com.au","rating":5,"author_block_rating":0,"active_installs":10,"downloads":773,"num_ratings":1,"support_threads":1,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.1.1":{"tag":"2.1.1","author":"jarradnpd","date":"2026-01-05 03:34:53"},"2.2.0":{"tag":"2.2.0","author":"jarradnpd","date":"2026-03-05 02:11:07"},"2.4.0":{"tag":"2.4.0","author":"jarradnpd","date":"2026-04-28 22:24:16"},"2.4.1":{"tag":"2.4.1","author":"jarradnpd","date":"2026-04-28 22:41:10"},"2.4.2":{"tag":"2.4.2","author":"jarradnpd","date":"2026-04-29 00:50:48"},"2.4.3":{"tag":"2.4.3","author":"jarradnpd","date":"2026-05-25 18:31:15"},"2.4.4":{"tag":"2.4.4","author":"jarradnpd","date":"2026-05-28 01:33:09"},"2.5.0":{"tag":"2.5.0","author":"jarradnpd","date":"2026-07-21 00:06:30"}},"upgrade_notice":{"2.2.0":"<p>Major feature update: dark mode, Google Fonts, frontend search, Gutenberg blocks, REST API, iCal export, swipe gestures, and performance improvements with HTML caching.<\/p>","2.1.1":"<p>Initial WordPress.org release - Full-featured events calendar with recurring events, design customization, mobile optimization, and three beautiful display views. All features included free!<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3546910,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3546910,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3546910,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3546910,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"vieww\/events-grid":{"name":"vieww\/events-grid","title":"Vieww Events Grid"},"vieww\/events-list":{"name":"vieww\/events-list","title":"Vieww Events List"},"vieww\/events-calendar":{"name":"vieww\/events-calendar","title":"Vieww Events Calendar"}},"tagged_versions":["2.1.1","2.2.0","2.4.0","2.4.1","2.4.2","2.4.3","2.4.4","2.5.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3548105,"resolution":"1","location":"assets","locale":"","width":1440,"height":1013},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3548105,"resolution":"2","location":"assets","locale":"","width":1440,"height":1013},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3551999,"resolution":"3","location":"assets","locale":"","width":1440,"height":1013},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3551999,"resolution":"4","location":"assets","locale":"","width":1440,"height":1013},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3551999,"resolution":"5","location":"assets","locale":"","width":1440,"height":1013},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3551999,"resolution":"6","location":"assets","locale":"","width":1440,"height":1013}},"screenshots":{"1":"The interactive month calendar \u2014 upcoming events show their start time and a thumbnail on the day they occur, with prev\/next month navigation.","2":"A single event page \u2014 full description, date, venue and contact details.","3":"The filterable list view \u2014 search box, date-range From\/To filters, and each upcoming event with venue, time, description and add-to-calendar links (Google Calendar \/ iCal).","4":"Event Cache Settings \u2014 cache status, one-click refresh button, debug tools and a built-in troubleshooting guide.","5":"Design Settings \u2014 live colour pickers, typography and layout controls with a real-time preview of how event cards will render.","6":"Getting Started screen \u2014 quick-start guide, available shortcodes reference and a key-feature overview."}},"plugin_section":[],"plugin_tags":[13618,4745,264706,4754,5881],"plugin_category":[40],"plugin_contributors":[253294],"plugin_business_model":[],"class_list":["post-270248","plugin","type-plugin","status-publish","hentry","plugin_tags-calendar-plugin","plugin_tags-event-calendar","plugin_tags-event-map","plugin_tags-events-calendar","plugin_tags-recurring-events","plugin_category-calendar-and-events","plugin_contributors-jarradnpd","plugin_committers-jarradnpd"],"banners":{"banner":"https:\/\/ps.w.org\/vieww-events-calendar\/assets\/banner-772x250.png?rev=3546910","banner_2x":"https:\/\/ps.w.org\/vieww-events-calendar\/assets\/banner-1544x500.png?rev=3546910","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/vieww-events-calendar\/assets\/icon-128x128.png?rev=3546910","icon_2x":"https:\/\/ps.w.org\/vieww-events-calendar\/assets\/icon-256x256.png?rev=3546910","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/vieww-events-calendar\/assets\/screenshot-1.png?rev=3548105","caption":"The interactive month calendar \u2014 upcoming events show their start time and a thumbnail on the day they occur, with prev\/next month navigation."},{"src":"https:\/\/ps.w.org\/vieww-events-calendar\/assets\/screenshot-2.png?rev=3548105","caption":"A single event page \u2014 full description, date, venue and contact details."},{"src":"https:\/\/ps.w.org\/vieww-events-calendar\/assets\/screenshot-3.png?rev=3551999","caption":"The filterable list view \u2014 search box, date-range From\/To filters, and each upcoming event with venue, time, description and add-to-calendar links (Google Calendar \/ iCal)."},{"src":"https:\/\/ps.w.org\/vieww-events-calendar\/assets\/screenshot-4.png?rev=3551999","caption":"Event Cache Settings \u2014 cache status, one-click refresh button, debug tools and a built-in troubleshooting guide."},{"src":"https:\/\/ps.w.org\/vieww-events-calendar\/assets\/screenshot-5.png?rev=3551999","caption":"Design Settings \u2014 live colour pickers, typography and layout controls with a real-time preview of how event cards will render."},{"src":"https:\/\/ps.w.org\/vieww-events-calendar\/assets\/screenshot-6.png?rev=3551999","caption":"Getting Started screen \u2014 quick-start guide, available shortcodes reference and a key-feature overview."}],"raw_content":"<!--section=description-->\n<p>Vieww Events Calendar is a WordPress events calendar plugin for venues, community groups, churches, schools and small businesses. Show upcoming events in a card grid, a filterable list or a full month calendar \u2014 with recurring events, an interactive events map and full design controls built in.<\/p>\n\n<p>Pick from three views \u2014 a card grid for what's coming up, a filterable list with date ranges, or a full month calendar visitors can click through. On phones, visitors get tap-to-open event cards and a quick toggle between calendar and list, so they don't lose their place.<\/p>\n\n<p>Venue maps are included and work the day you install: they run on OpenStreetMap, so there's no Google account to create, no API key to paste in, and no billing setup. Start typing a venue address and it completes itself \u2014 the pin lands on the map for you.<\/p>\n\n<p><strong><a href=\"https:\/\/vieww.com.au\/events\/\">See the live demo<\/a><\/strong> \u00b7 <strong><a href=\"https:\/\/vieww.com.au\/docs\/\">Documentation<\/a><\/strong><\/p>\n\n<p><strong>What your visitors get:<\/strong><\/p>\n\n<ul>\n<li>A polished calendar that matches your brand<\/li>\n<li>Three views to choose from \u2014 grid, list, or month calendar \u2014 and you can mix them across different pages<\/li>\n<li>Tap-to-open event cards on mobile so they don't have to leave the page to see the details<\/li>\n<li>A built-in events map so they can see at a glance where things are happening<\/li>\n<li>Add-to-calendar links \u2014 Google Calendar plus a downloadable file for Apple, Outlook and others<\/li>\n<\/ul>\n\n<p><strong>What you get:<\/strong><\/p>\n\n<ul>\n<li>Add events in under a minute \u2014 title, date, time, venue, description, done<\/li>\n<li>Recurring events \u2014 set an event to repeat on the days you choose<\/li>\n<li>Pick your own colours, fonts and spacing from a single design panel<\/li>\n<li>Dark mode \u2014 off, auto (follows the visitor's system preference), or always on<\/li>\n<li>Address autocomplete \u2014 start typing a venue and pick from suggestions; the location pin and details fill in for you<\/li>\n<li>One-click cache control whenever you need a fresh copy of your event list<\/li>\n<\/ul>\n\n<p><strong>Shortcodes you can drop into any page or layout:<\/strong><\/p>\n\n<ul>\n<li><code>[vieww_calendar_view]<\/code> \u2014 the interactive month calendar<\/li>\n<li><code>[vieww_list]<\/code> \u2014 a filterable list with date-range and pagination<\/li>\n<li><code>[vieww_calendar]<\/code> \u2014 a 3-column grid of upcoming events<\/li>\n<li><code>[vieww_events_map]<\/code> \u2014 a map of upcoming events with clustering<\/li>\n<\/ul>\n\n<p><strong>Part of the Vieww suite<\/strong><\/p>\n\n<p>Vieww plugins share one philosophy: everything you need ships in the box, your data stays in your own WordPress install, and nothing is sent back to us. Also available: <a href=\"https:\/\/wordpress.org\/plugins\/vieww-directory\/\">Vieww Directory<\/a> and <a href=\"https:\/\/wordpress.org\/plugins\/vieww-property-listings\/\">Vieww Property Listings<\/a>. More at <a href=\"https:\/\/vieww.com.au\/\">vieww.com.au<\/a>.<\/p>\n\n<p><strong>Requirements:<\/strong><\/p>\n\n<ul>\n<li>WordPress 5.0 or higher<\/li>\n<li>PHP 7.4 or higher<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin uses the following third-party services. Each is optional or only triggered by an admin action:<\/p>\n\n<ul>\n<li><strong>Google Fonts<\/strong> (https:\/\/fonts.googleapis.com) \u2014 only when you choose a Google Font in <strong>Events &gt; Design &gt; Typography<\/strong>. System fonts are the default. <a href=\"https:\/\/policies.google.com\/privacy\">Privacy<\/a> \u00b7 <a href=\"https:\/\/developers.google.com\/terms\">Terms<\/a><\/li>\n<li><strong>OpenStreetMap map tiles<\/strong> (https:\/\/tile.openstreetmap.org) \u2014 front-end only, when a page renders an event map. <a href=\"https:\/\/osmfoundation.org\/wiki\/Privacy_Policy\">Privacy<\/a> \u00b7 <a href=\"https:\/\/operations.osmfoundation.org\/policies\/tiles\/\">Tile policy<\/a><\/li>\n<li><strong>Nominatim geocoding<\/strong> (https:\/\/nominatim.openstreetmap.org) \u2014 admin only, when you save an event with a new venue or click \"Geocode Now\". Sends the venue text. <a href=\"https:\/\/osmfoundation.org\/wiki\/Privacy_Policy\">Privacy<\/a> \u00b7 <a href=\"https:\/\/operations.osmfoundation.org\/policies\/nominatim\/\">Terms<\/a><\/li>\n<li><strong>Photon venue autocomplete<\/strong> (https:\/\/photon.komoot.io) \u2014 admin only, while typing into the Location\/Venue field. Sends the partial text. <a href=\"https:\/\/www.komoot.com\/privacy\">Privacy<\/a><\/li>\n<\/ul>\n\n<p>To opt out: leave fonts on System Font, fill latitude\/longitude manually, and don't use the autocomplete dropdown \u2014 no external requests will be made.<\/p>\n\n<h3>Support<\/h3>\n\n<p>For support, please use the WordPress.org support forums for this plugin.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/vieww-events-calendar\/<\/code> directory, or install through the WordPress plugins screen<\/li>\n<li>Activate the plugin through the 'Plugins' screen in WordPress<\/li>\n<li>Go to Events \u2192 Add New to create your first event!<\/li>\n<li>Use shortcodes in your pages to display events<\/li>\n<\/ol>\n\n<p>The plugin automatically registers the custom post type and creates all necessary fields. No additional setup required!<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20google%20maps%20api%20key%3F\"><h3>Do I need a Google Maps API key?<\/h3><\/dt>\n<dd><p>No. The events map runs on OpenStreetMap and works as soon as you activate the plugin. There's no Google account to create, no API key to paste in, and no billing setup.<\/p><\/dd>\n<dt id=\"do%20i%20need%20any%20other%20plugins%3F\"><h3>Do I need any other plugins?<\/h3><\/dt>\n<dd><p>No. Everything the calendar needs \u2014 events, recurring rules, views, maps and add-to-calendar links \u2014 ships in this one plugin. It works with any theme.<\/p><\/dd>\n<dt id=\"what%20shortcodes%20are%20available%3F\"><h3>What shortcodes are available?<\/h3><\/dt>\n<dd><p><strong>Grid\/Card View:<\/strong>\n    [vieww_calendar]<\/p>\n\n<p>Displays the next 9 upcoming events in a 3-column responsive grid.<\/p>\n\n<p><strong>List View:<\/strong>\n    [vieww_list per_page=\"10\"]<\/p>\n\n<p>Displays events in a list with date filters and pagination. The <code>per_page<\/code> parameter is optional (default: 10).<\/p>\n\n<p><strong>Calendar Month View:<\/strong>\n    [vieww_calendar_view show_images=\"yes\"]<\/p>\n\n<p>Displays an interactive month calendar with navigation. The <code>show_images<\/code> parameter is optional (default: yes).<\/p><\/dd>\n<dt id=\"how%20do%20i%20create%20a%20recurring%20event%3F\"><h3>How do I create a recurring event?<\/h3><\/dt>\n<dd><ol>\n<li>Go to Events \u2192 Add New<\/li>\n<li>Leave the Event Date field empty in the Event Details box<\/li>\n<li>In the Recurring Event Settings box, check the days of the week<\/li>\n<li>Set the Recurring Start Date and Recurring End Date<\/li>\n<li>Fill in Event Time and Description<\/li>\n<li>Publish!<\/li>\n<\/ol>\n\n<p>A recurring event is stored as one event with a repeat rule \u2014 not hundreds of duplicate posts \u2014 so edits to the series apply everywhere and your database stays small.<\/p><\/dd>\n<dt id=\"how%20do%20i%20create%20a%20one-time%20event%3F\"><h3>How do I create a one-time event?<\/h3><\/dt>\n<dd><ol>\n<li>Go to Events \u2192 Add New<\/li>\n<li>Fill in the Event Date in the Event Details box<\/li>\n<li>Leave the Recurring Event Settings box empty<\/li>\n<li>Fill in Event Time and Description<\/li>\n<li>Publish!<\/li>\n<\/ol><\/dd>\n<dt id=\"does%20this%20work%20with%20cache%20plugins%3F\"><h3>Does this work with cache plugins?<\/h3><\/dt>\n<dd><p>Yes. The plugin keeps your calendar fast even with hundreds of events, and automatically refreshes itself when you publish or edit an event \u2014 including clearing WP Rocket, W3 Total Cache, WP Super Cache and WP Fastest Cache. If you ever want to force a fresh copy, Events \u2192 Cache Settings has a one-click refresh.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20styling%3F\"><h3>Can I customize the styling?<\/h3><\/dt>\n<dd><p>Yes. The plugin includes a visual customization interface at Events \u2192 Design Settings \u2014 colours, typography and spacing, with a live preview. Developers can also override styles with custom CSS; each view ships its own stylesheet (<code>grid-view.css<\/code>, <code>list-view.css<\/code>, <code>calendar-view.css<\/code>).<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20remove%20the%20plugin%3F\"><h3>What happens to my data if I remove the plugin?<\/h3><\/dt>\n<dd><p>It's yours. Everything lives in your own WordPress database, and deleting the plugin removes its data cleanly \u2014 no orphaned tables left behind. Deactivating (rather than deleting) keeps all your data intact.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.5.0<\/h4>\n\n<ul>\n<li>NEW: Monthly recurring events \u2014 repeat on a chosen day of the month (for example, the 13th of every month). Months that don't have that day, such as the 31st in February, are skipped.<\/li>\n<li>NEW: Monthly events can also repeat on a weekday pattern \u2014 for example the second Tuesday, or the last Friday, of every month.<\/li>\n<li>NEW: Recurring events can repeat every few months (for example every second month), not only every month.<\/li>\n<li>NEW: Recurring events now take a start and end time. Set it once and the time shows on every occurrence across the list, calendar and single-event views.<\/li>\n<li>IMPROVEMENT: The event editor has a new \"Repeats\" control \u2014 Does not repeat, Weekly, or Monthly \u2014 so one-off and recurring events are clearer to set up.<\/li>\n<li>NEW: Designed single-event pages \u2014 each event now has its own styled layout with the date and time, a plain-language recurrence summary (\"the second Tuesday of every month\"), the next upcoming dates, an add-to-calendar button, venue details and a location map. Copy single-vieww-event.php into your theme to customise.<\/li>\n<li>FIXED: Design settings (colours, fonts, spacing) now apply on the front end. Previously they were saved in the admin but never rendered on the site; the calendar, list, grid and single views all follow your design page now.<\/li>\n<li>FIXED: Dark Mode stays readable on light themes. The calendar, list, grid and single-event views now sit on their own dark background, so text and buttons no longer wash out when Dark Mode is On \u2014 or Auto with the visitor's device in dark mode.<\/li>\n<\/ul>\n\n<h4>2.4.5<\/h4>\n\n<ul>\n<li>IMPROVEMENT: WordPress.org listing rewritten \u2014 live demo and documentation links, Vieww-suite cross-links, Google-Maps-API-key and data-ownership FAQs, benefit-led short description. Troubleshooting\/debug FAQ content moved to the documentation site.<\/li>\n<\/ul>\n\n<h4>2.4.4<\/h4>\n\n<ul>\n<li>TESTED: Confirmed compatible with WordPress 7.0.<\/li>\n<\/ul>\n\n<h4>2.4.3<\/h4>\n\n<ul>\n<li>NEW: WordPress.org listing now ships with screenshots \u2014 the interactive month calendar and a single event page. Screenshot captions rewritten to match.<\/li>\n<\/ul>\n\n<h4>2.4.2<\/h4>\n\n<ul>\n<li>IMPROVEMENT: External Services section condensed to one line per service while keeping the required wp.org disclosure.<\/li>\n<li>IMPROVEMENT: Removed the Developer Notes section from the public listing \u2014 internal architecture detail isn't useful for site owners browsing the directory.<\/li>\n<\/ul>\n\n<h4>2.4.1<\/h4>\n\n<ul>\n<li>IMPROVEMENT: Plugin description and listing rewritten to focus on what site owners and visitors get out of the calendar, rather than internal architecture.<\/li>\n<li>NEW: Plugin icon added.<\/li>\n<\/ul>\n\n<h4>2.4.0<\/h4>\n\n<ul>\n<li>FEATURE: Structured location fields \u2014 split the single Location\/Venue input into Venue Name, Street Address, Suburb, State, and Postcode for consistency with sibling Vieww plugins.<\/li>\n<li>FEATURE: Click-to-fill autocomplete \u2014 typing into Street Address shows Photon (komoot.io) suggestions; selecting one populates Suburb \/ State \/ Postcode \/ Latitude \/ Longitude in a single click. If Photon returns a named landmark and Venue Name is empty, the venue name is filled too (user-typed values are never overwritten).<\/li>\n<li>FEATURE: Geocoding now uses structured Nominatim queries from the new fields directly \u2014 more accurate and predictable than parsing a freeform string.<\/li>\n<li>FEATURE: Branded archive template (<code>archive-vieww-event.php<\/code>) renders the calendar at <code>\/events\/<\/code> by default, with a friendly \"No upcoming events\" empty state when there's nothing to show \u2014 replacing the theme's generic \"Sorry, but nothing was found\" page.<\/li>\n<li>IMPROVEMENT: Calendar prev\/next\/Today now swap the visible month in place instead of full-reloading the page, so embedding pages (e.g. Elementor canvases) keep their width and layout.<\/li>\n<li>IMPROVEMENT: Calendar nav uses replaceState rather than pushState \u2014 the browser back button returns to the page you came from, not through every month you visited.<\/li>\n<li>IMPROVEMENT: Default Dark Mode setting is now \"Auto\" (follows system preference) for new installs, with extra coverage for the event-time strip inside calendar event chips.<\/li>\n<li>FIX: Calendar prev\/next URLs no longer leak between embedding pages. The cached HTML used to bake in the rendering page's URL, so a calendar embedded on one page could send visitors to another. URLs are now built from the current document at click time.<\/li>\n<li>FIX: Calendar buttons (prev\/next\/Today\/filter) now follow the plugin's design-settings colour palette instead of inheriting Elementor's global accent\/primary colours, which on some sites rendered the nav arrows green and the Today button blue.<\/li>\n<li>FIX: Addresses with both a unit keyword AND a slash (e.g. <code>Unit 5\/123 Main St<\/code>) no longer lose the street number during geocoding \u2014 coordinates resolve to the actual street, not the suburb centroid.<\/li>\n<li>MIGRATION: Existing <code>event_location<\/code> values are best-effort split into Venue Name + structured address on first load. The original value is retained as a display fallback for entries that didn't parse cleanly.<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>FEATURE: Event venue geocoding \u2014 automatically populates latitude\/longitude from the Location\/Venue field on save, with a fallback chain for Australian unit-style addresses<\/li>\n<li>FEATURE: \"Geocode Now\" button on the event edit screen for instant lat\/lng preview with visible feedback<\/li>\n<li>FEATURE: Venue autocomplete via Photon (OpenStreetMap) \u2014 typeahead dropdown on the Location\/Venue field, preserving user-typed unit prefixes and house numbers<\/li>\n<li>FEATURE: Single-event location map injected via <code>the_content<\/code> when an event has coordinates<\/li>\n<li>FEATURE: New <code>[vieww_events_map]<\/code> shortcode \u2014 renders all upcoming geocoded events on an interactive Leaflet map with clustering<\/li>\n<li>IMPROVEMENT: New REST meta fields <code>event_lat<\/code> and <code>event_lng<\/code> exposed via the WordPress REST API<\/li>\n<li>IMPROVEMENT: Admin-only empty-state banner prompts editors to geocode listings when none yet have coordinates<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>FEATURE: Frontend event search - filter list view events by title, description, or location<\/li>\n<li>FEATURE: Google Fonts integration - 15 Google Fonts available in Design Settings<\/li>\n<li>FEATURE: Dark mode support - off, auto (system preference), or always on<\/li>\n<li>FEATURE: Mobile swipe gestures - swipe left\/right to navigate calendar months<\/li>\n<li>FEATURE: Gutenberg blocks - 3 server-side rendered blocks for the block editor<\/li>\n<li>FEATURE: REST API support - event meta fields exposed via WordPress REST API<\/li>\n<li>FEATURE: iCal export and Google Calendar integration<\/li>\n<li>FEATURE: AJAX calendar navigation for smoother month browsing<\/li>\n<li>FEATURE: Event modal popups with add-to-calendar links<\/li>\n<li>PERFORMANCE: Rendered HTML caching with version-counter invalidation<\/li>\n<li>PERFORMANCE: Per-request instance deduplication for recurring events<\/li>\n<li>SECURITY: Enhanced nonce verification and input sanitization throughout<\/li>\n<li>IMPROVEMENT: Admin meta box validation with real-time feedback<\/li>\n<li>IMPROVEMENT: Tabbed help documentation with persistent tab state<\/li>\n<li>IMPROVEMENT: Dismissable onboarding welcome page<\/li>\n<\/ul>\n\n<h4>2.1.1<\/h4>\n\n<ul>\n<li>RELEASE: Initial WordPress.org release - Full-featured free version<\/li>\n<li>MAJOR: Removed ACF dependency - now completely self-contained with native WordPress meta boxes<\/li>\n<li>FEATURE: Recurring events - set events to repeat on specific days<\/li>\n<li>FEATURE: Design customization system with colors, typography, and spacing controls<\/li>\n<li>FEATURE: Three beautiful display views (grid, list, calendar)<\/li>\n<li>FEATURE: Mobile modal popups and calendar\/list view toggle<\/li>\n<li>FEATURE: Getting started dashboard and help documentation<\/li>\n<li>SECURITY: Full nonce verification, input sanitization, and output escaping<\/li>\n<li>SECURITY: WordPress 6.9 compatibility and coding standards compliance<\/li>\n<li>PERFORMANCE: Advanced caching system with transient storage<\/li>\n<li>PERFORMANCE: Iteration safeguards to prevent infinite loops<\/li>\n<li>Complete plugin restructure with organized class files, separated CSS, and i18n support<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Added calendar month view<\/li>\n<li>Improved caching system<\/li>\n<li>Added admin interface for cache management<\/li>\n<li>Performance optimizations<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Grid and list views<\/li>\n<li>Basic caching functionality<\/li>\n<\/ul>","raw_excerpt":"An events calendar with grid, list and month views, recurring events and venue maps \u2014 working the moment you activate. No API keys, no accounts.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/270248","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/mg.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/mg.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=270248"}],"author":[{"embeddable":true,"href":"https:\/\/mg.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jarradnpd"}],"wp:attachment":[{"href":"https:\/\/mg.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=270248"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/mg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=270248"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/mg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=270248"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/mg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=270248"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/mg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=270248"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/mg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=270248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}