May 24, 2026
1.3.12.1 – WordPress 7.0 compatibility
Compatibility
- Tested against WordPress 7.0 — admin Settings, calendar, event editor and frontend all verified.
May 21, 2026
1.3.12.0 – Google-style week view, unified recurrence engine & dozens of fixes
New
- Settings → Overview: toggle to disable the "See all events in this series" backlink injected on recurring instance pages.
- REST API now supports custom orderby on /wp/v2/eventkoi_event: start_date, event_start, upcoming, past — for use in core Query Loop blocks and headless integrations.
- Empty Trash button on the Events list.
Improvements
- Week view: Google-style overlap cascade so stacked events stay readable instead of collapsing into "+more".
- Week view: sticky event title on multi-day continuation bars (title visible on every visible day, not just the first).
- Week view: compact Google-style time format ("9 AM" / "3pm" depending on the 12/24-hr toggle).
- Week view: red "now" indicator line.
- Week view: non-working days tinted using the working_days setting.
- Month view: compact time prefix on dot-style events.
- Event popover anchors at the click point instead of jumping.
- Calendar + List blocks: "Select all calendars" is now honored in the editor preview (matches the frontend).
- Calendar block editor preview lands on the current week when timeframe is set to "week".
- Events admin: top toolbar layout (selected count left, pagination right) matches the footer.
- Empty states for "Event not found" and "Event in Trash" — centered card with icon + CTA.
- Sold-out ticket widget stays visible (with sold-out label) instead of disappearing once capacity is reached.
- Event editor date and media UX hardened — end-time defaults, draft cleanup, structured-field guards.
- Page builders: unified occurrence engine across Beaver Builder, Bricks, and Elementor — all read the same instance context for recurring events.
- Tickets / Orders / Emails: instance-aware titles, itemized refunds, multi-seat expansion fixes.
- RSVPs: standard events can now run in event-wide RSVP mode (vs. per-instance).
- TEC importer: paragraphs preserved, address split into structured fields, organizer email/phone/website mapped, _EventCost mapped to ticket price, _EventURL imported as virtual location.
- Upcoming Query Loop: cache-stampede single-flight, ranked dataset for predictable ordering.
- Per-event ownership checks across admin endpoints + healer audit trail.
- i18n: more admin strings wrapped in __() for Loco / translate.wp.org.
Fixes
- Multi-day timed events: time now shows on every visible day instead of only the last; nested "+1 more" stops cascading.
- iCal export: full RFC 5545 compliance — CRLF line endings, line folding, proper PRODID, RRULE syntax.
- JSON-LD: recurring event endDate is now Google-compliant; each instance gets its own JSON-LD block.
- iCal UIDs are stable across recurrences (previously regenerated, breaking subscriber dedup).
- Recurrence cap enforced on UNTIL-style rules; recurring rule summary validated against the cap.
- Stripe webhook + ticket checkout: TOCTOU race fixed (no more oversell under load).
- WooCommerce: duplicate order suppression on retried payment posts.
- Tickets: ticket-duplication and refund-state regressions resolved.
- Capacity claim on RSVPs uses FOR UPDATE locking so two concurrent submitters don't both succeed against the last slot.
- RSVP CSV export sanitises against Excel formula injection (=, +, -, @).
- RSVP prefetch no longer leaks event meta into unauthenticated responses.
- Calendar admin: archive-view event color leak fixed; static-singleton state resets between renders.
- Editor block preview no longer renders the wrong week when timeframe is "week".
- Site editor query loop no longer returns 400 on eventkoiSig.
- "Publish stuck" — events that wouldn't progress past saving now publish reliably.
- Bulk confirm dialogs surface backend errors instead of silently failing.
- Sorting in admin tables is disabled when pagination is server-side, so sort no longer reorders just the current page.
- QR-scanned check-ins guard against double-scan (replay).
- RSVP phantom-instance gate: RSVPs no longer attach to non-existent instances.
- "Invalid Date" guard in attendee TZ normalize.
- API key dead-state regression fixed.
- Lock leaks on WooCommerce checkout cleaned up.
- Plugin .zip build now excludes .vite-hot and agent artifacts.
May 3, 2026
1.3.9.9 – Translatable admin, calendar timezone fixes & editor polish
i18n
- Full admin React UI is now translatable via Loco Translate or bundled JSON. Previously the admin stayed in English even when the site locale was set. POT regenerated with all new strings.
Fixes
- Continuous standard events with specific times were being shown in the All-day lane in calendar Week view (and as full-width strips in Month view). They now render in their correct time slots.
- Picking a start or end time could roll the date back a day when the browser timezone differed from the site timezone. Times now apply in the site timezone consistently.
- Auto-filled end date inherits the picked start time, so users no longer hit "End date cannot be before the start date" the moment they add a non-midnight start time.
- "Display timezone in event page" toggle is now respected on the frontend — when off, the timezone label no longer appears on the event page.
- Completed events were leaking into the Upcoming Query Loop, and future events into the Past Query Loop.
- WordPress was prepending http:// to [eventkoi … as=link] URLs, producing broken double-protocol links. Bogus prefix is stripped on render.
- Standalone editor preview now resolves every event_* dynamic token (date, time, timezone, etc.) instead of showing {Field Name} placeholders.
- Scalar custom fields (text, textarea, dropdown, radio, checkbox, url) auto-unwrap in the [eventkoi] shortcode by default, matching url-typed behavior.
- Tickets "Change currency" link points to WooCommerce settings when WooCommerce is the checkout method, instead of EventKoi settings.
- Stripe webhooks no longer accumulate as dead endpoints when the plugin is deactivated on staging — the webhook is disabled in Stripe on deactivation.
- Live-mode Stripe keys can no longer be saved on staging environments (avoids accidental real charges).
- QR check-in handler now redirects logged-out users to the login URL (HTML) and surfaces a "Log in" button in the JSON overlay; {qr_code} tag stripped from email templates in Lite where the feature is gated.
- Editing a saved event no longer crashes due to a missing translation import in the description component.
Improvements
- Page Numbers block "Number of links" (mid_size) attribute is now honored by EK Query Loop pagination on the frontend.
April 28, 2026
1.3.9.8 – Past events query, recurring date polish & ticket-delete safeguards
New
- "Past events" query option in the Event Query Loop block, Elementor, Bricks, Beaver, and Divi loop surfaces — sort completed events with their most recent past occurrence (rolls backward as time passes, mirroring how Upcoming rolls forward).
- Event Data block exposes the full set of canonical event tokens — separate event_date, event_time, event_date_year, event_date_month, event_date_day, event_date_iso, plus ticket-data tokens (capacity, sold, sold_out, low_stock, ticket_count, ticket_summary, sales_start/end), RSVP tokens, and ticket price + date format presets.
- event_date and event_time dynamic tokens for Elementor, Divi, Beaver Builder and shortcode pickers.
- License notice in admin when the Pro license isn't active, with a one-click jump from the plugins page to license settings.
Improvements
- Recurring events in query loops now display the next upcoming occurrence (not the original series start). Past mode shows the latest past occurrence.
- Recurring "ends on" defaults to one year from today, so newly created recurring events are bounded out of the box.
- Event Query Loop grid is responsive on tablet and mobile breakpoints.
- Calendar week view lands on the current week (not the start of the displayed month) when toggling from Month.
- Ticket delete now requires confirmation and is only persisted when you click Save — refresh restores tickets you removed by mistake.
- Drop the recurring rule summary from the ticket checkout modal — buyers see only what they're booking.
- Stripe currency now auto-detects from the connected account; "Business name" only required in Live mode.
- Test-mode Stripe link points to the Stripe Sandbox dashboard.
- License persists across plugin uninstall + reinstall.
- Ticket counts column reads "N ticket(s)" / "N RSVP(s)" with proper pluralization, and reflects gateway-completed orders only.
- Admin pages share a unified 1280px content width.
- Event Query Loop respects upstream render_block wrapper classes (Block Visibility extension etc.).
Fixes
- Recurring "ends on" date is inclusive — the user-picked end date is now part of the series instead of being silently dropped.
- Block Visibility extension is honored on Calendar, List, and event-data blocks.
- Switching the WordPress timezone setting no longer crashes the site when gmt_offset returns an empty string.
- Wrapper classes from render_block filters are preserved on Calendar and List blocks.
- Per-instance override read paths are hardened against stdClass values returned by some import flows.
- Event description list styling is preserved on the front end.
April 19, 2026
1.3.9.7 – Ticket Save Fixes & Loco Translate Compatibility
Fixes
- Fixed ticket save on the event's Tickets tab. Tickets now persist when you click Save or when you switch to another tab — previously some edits could be lost on navigation.
Improvements
- Tickets auto-save when you switch away from the Tickets tab, so edits are preserved even if you forget to click Save.
- Translations saved to the plugin's own languages folder (Loco Translate's "Author" location) are now picked up automatically.
April 19, 2026
1.3.9.6 – Ampersand & Calendar Block Fixes
Fixes
- Fixed ampersand (&) display in calendar names across the admin UI, multiselect dropdowns, builder module dropdowns (Divi, Elementor, Bricks, Beaver), and the frontend calendar archive page.
- Fixed calendar block showing "Invalid calendar" when the default calendar option was missing or pointed to a deleted term. The block now resolves from its own attributes first, falls back to the default option, and finally to the first available calendar.
Improvements
- Added self-healing for the default calendar option — if the stored value references a deleted or invalid term, it is automatically repointed to a real calendar on the next page load.
- Empty-state calendar block now shows a friendlier message; admins also get a "Create a calendar" link.
- Block editor no longer seeds the calendar block with an invalid default ID when the default option is missing.
April 18, 2026
1.3.9.5 – Divi Integration (Beta), Stripe Fixes & Polish
New
- Added Divi Builder integration (Beta) — EventKoi Calendar, Event, and Loop modules, with occurrence-aware loop expansion and dynamic content tokens for event fields.
- Added admin notification email templates for New RSVP and New ticket sale events.
Improvements
- Added Stripe sync checkout confirmation fallback for environments where webhooks are not reachable (e.g. local development sites).
- Admin notification emails now use the saved sender name and email from the Emails settings.
- Backfilled the Site instance ID UUID automatically on version bump.
- Restored the Site instance ID display on Settings > Integrations.
- Tightened WordPress coding standards compliance and verified-build stability.
Fixes
- Fixed Stripe account currency drift — checkout now uses the connected account's default currency instead of silently defaulting to USD.
- Fixed admin sale notification not firing on Stripe checkout.
- Prevented a fatal error in the admin sale notification pipeline.
- Fixed theme CSS bleed into FullCalendar cells on Divi-like themes.
- Fixed the WP-CLI eventkoi seed command's recurrence rule schema.
- Fixed archive/unarchive actions for ticket sales on the global and per-event views.
April 12, 2026
1.3.9.4 – UI & Calendar Improvements
Improvements
- Centralized confirmation dialogs with consistent centered modal design across all destructive actions.
Fixes
- Bulk actions on the global ticket sales page now correctly show Archive/Unarchive instead of Duplicate/Move to trash.
April 11, 2026
1.3.9.3 – WooCommerce Gateway & Reporting Fixes
Improvements
- Tickets are now issued as soon as a WooCommerce order moves to "processing", so every gateway (including Cash on Delivery and Bank Transfer) works out of the box.
- Ticket refund emails now fire automatically when a WooCommerce order is partially or fully refunded, matching the Stripe flow.
- Centralized the ticket sales query builder so the global Orders list, per-event Sales History, and stats endpoints always stay in lockstep on currency, gateway, and status filters.
Fixes
- Orders with a partial refund now display the correct "Partially refunded" status on the Orders list and per-event sales history (previously showed "Pending payment").
- Ticket sales totals, net earnings, and per-event stats no longer mix amounts from different WooCommerce currencies.
- Pro now follows the active WooCommerce currency when the checkout method is WooCommerce, so stats stay consistent even when a stale currency was stored in plugin settings.
- In-progress checkout holds are no longer counted toward sales stats.
April 11, 2026
1.3.9.1 – Direct Stripe & Ticketing Polish
New
- Stripe now runs directly against your own Stripe account — no Supabase edge functions, no Connect OAuth. Enter your API keys in Settings → Payments and you're live.
- Webhook handler creates orders, generates check-in codes, and sends confirmation emails locally, identical to the WooCommerce checkout flow.
- Admin refunds now call the Stripe API directly and sync to the local orders database.
Improvements
- Ticket refund emails fire automatically when a WooCommerce order is refunded.
- Orders list and sales history CSV exports are now working.
- WooCommerce order links in orders, attendees and sales history open in the same tab.
- master_checkin_code is populated from WooCommerce order meta so check-in works consistently.
- Attendees tab refreshes reliably after ticket status changes.
- Billing information (name, email) is auto-filled for logged-in users during ticket checkout.
- Clearer error messaging when WooCommerce is not installed.
- Removed Beta badges from ticket-related UI.
Fixes
- Fatal error in Orders::create_order caused by a stray Stripe class reference.
- Stripe webhook now passes the correct checkout session ID into confirmation emails (activity note now shows on direct Stripe orders).
- Order status filter tabs on the Tickets → Orders page now point at the correct base.
- Event status dropdown is hidden on non-event admin pages.
- React "Rules of Hooks" error on the Event Attendees tab.
- Removed undefined isResendEmail reference in the Attendees component.
- Hidden the attendees bulk-actions toolbar when no row-level actions are available.
- REST API responses no longer break when third-party plugins emit PHP notices.
- Stripe webhook secret handling for array-shaped values.
- Wrong text domain in block descriptions.
March 21 2026
1.3.2.0 – Page Builder Integrations, Accessibility & Performance
New
- Added Elementor Pro Loop Grid integration with occurrence-aware query
rewriting, custom controls (orderby mode, date range, include instances), and
dynamic tag support for instance-specific dates, titles, and permalinks.
- Added Bricks Builder query loop integration with the same occurrence
expansion, pagination, and filtering capabilities as Beaver Builder and
Elementor.
- Added Event Instance Datetime Elementor dynamic tag that
renders instance-specific start dates in loop templates.
- Added rate limiter to QR check-in endpoint (20 requests/minute per IP) to
prevent brute-force scanning.
- Added per-event default template selector in Settings with support for block
templates and Elementor templates.
- Added performance test harness (tests/perf/) for benchmarking
query and rendering operations.
Improvements
- Improved RSVP capacity enforcement with database-level transaction locking
to prevent race conditions under concurrent submissions.
- Improved Beaver Builder loop pagination to correctly resolve
paged/page query vars from the request instead of relying
solely on builder-injected args.
- Improved event template resolution so page builders (Elementor Theme
Builder, Beaver Themer) only override the template when explicitly assigned in both
the builder and EventKoi's template selector.
- Improved frontend script loading to prevent duplicate
wp_localize_script calls when multiple EventKoi blocks appear on the
same page.
- Improved admin page load performance by inlining the Supabase remote config
into the page so the frontend no longer makes a separate network request on every
admin page load.
- Improved temporal event status filtering (live,
upcoming, completed) to handle mutual exclusivity
correctly when multiple temporal statuses are passed.
Accessibility
- Added aria-hidden="true" to all decorative icons across admin
components (filters, order headers, stats, instances table, dropzone, multiselect,
date range, navigation).
- Added aria-label to interactive controls: refund checkboxes,
quantity inputs, working day toggles, edit buttons, multiselect remove buttons, and
template editor links.
- Added aria-pressed to working day toggle buttons and
aria-current="page" to active side-tab navigation links.
- Replaced non-interactive elements with proper <button>
elements where click handlers were attached (event name edit, dropzone).
- Added role="progressbar" with
aria-valuenow/aria-valuemax to the RSVP capacity bar and
role="alert" to error messages on the frontend.
- Added keyboard support (Enter/Space) to dropzone
and edit icon interactions.
- Wrapped hardcoded admin UI strings in __() for
internationalization (settings, stats, filters, date range, instances table).
- Added sr-only labels for links that open in new tabs.
Fixes
- Fixed Elementor Loop Grid date range filter, section labels, and display
issues.
- Fixed Beaver Builder loop link resolution for recurring event instances so
instance-specific URLs are generated instead of parent series URLs.
- Fixed occurrence status detection so live events are correctly counted as
started occurrences.
- Fixed date field clear interaction by replacing the external Clear button
with an inline clear control inside the input.
- Fixed stale integration tests that expected per-code row expansion instead
of the current aggregated-order normalization format.
February 27 2026
1.3.1.2 – Calendar, Loop & Schema Bug Fixes
Fixes
- Fixed structured data output for event locations to prevent empty/
invalid Location fields in Event schema.
- Fixed schema handling for physical, virtual, and mixed event locations
so JSON-LD location data is generated correctly.
- Fixed EventKoi list display edge case where small per_page</ code> + max_results values could return no results when sorting
by upcoming events.
- Fixed recurring-event link resolution in Beaver loop contexts so
instance links resolve correctly instead of pointing to the parent series
URL.
- Fixed Beaver editor preview issue where EventKoi list output
could appear empty in builder preview.
- Fixed recurring weekday/day alignment and related timezone drift
issues across event edit, instances, and calendar views.
- Fixed date range filtering inconsistencies affecting event/instance
results.
- Fixed event list date/time display inconsistencies in admin table
views.
- Fixed location consistency issues so updated event locations are
reflected reliably across EventKoi views.
- Fixed multiple UI layering and overflow issues in calendar popovers
and compact/responsive layouts.
February 19 2026
1.3.1.1 – Activation Safety & Stability
Improvements
- Improved plugin activation flow to initialize EventKoi schema directly
and more predictably.
- Improved database recovery on activation by ensuring missing core
EventKoi tables are recreated reliably.
- Improved overall reliability of activation and update lifecycle
behavior.
Fixes
- Fixed activation-time compatibility issue that could cause conflicts
with other active plugins.
- Fixed duplicate initialization behavior during activation that could
trigger fatal errors in some environments.
- Fixed missing table recreation edge cases for core ticketing and order
data after reactivation.
February 15 2026
1.3.1.0 – Beaver Builder Integration & Stability
New
- Added Beaver Builder integration for EventKoi templates.
- Added EventKoi Beaver modules (Event module and Calendar module).
- Added EventKoi dynamic tags support for Beaver Builder content.
- Added support for using Beaver templates from EventKoi template settings
(global and per-event).
Improvements
- Improved template rendering compatibility across Beaver Theme and block
themes.
- Improved token replacement behavior in Beaver module/template output.</ li>
- Improved timezone/calendar handling consistency across views and local-
time scenarios.
- Improved admin settings/navigation cleanup and UX consistency.
Fixes
- Fixed Beaver Event module context resolution when “Use current event
context” is selected.
- Fixed calendar week/day header and local timezone shift issues in
specific views.
- Fixed RSVP/check-in status/count edge-case inconsistencies.
- Fixed email/template token rendering and formatting regressions.
- Fixed multiple template fallback/selection issues with custom
builders.
January 29 2026
1.3.0.0 – RSVP & Check-in
New
- Added RSVP management with attendee statuses, counts, and RSVP
finder.
- Added attendee check-in flow with QR codes and QR check-in UI.
- Added RSVP email notifications, resends, and email editor.
- Added CSV export for RSVP data.
Improvements
- Improved date/time handling and timezone display.
Fixes
- Fixed issue with some custom fields were not displaying.
- Fixed default/global event template applied to new events.
- Fixed slugs and permalink-related issues.
January 13 2026
1.2.0.0 – Custom fields & Integrations
New
- Added Custom Fields with field groups, global fields, and event-level
field editing.
- Added builder integrations: Elementor widgets/dynamic tags and Bricks
elements/query loop.
Improvements
- Added default event template setting and template editor shortcut.
- Added timezone settings and local-time display support across admin and
frontend.
- Improved dashboard event thumbnails and admin UI layout.
Fixes
- Fixed onboarding wizard navigation step handling.
- Fixed demo event image handling in onboarding.
- Fixed admin table rendering issues.
January 1 2026
1.1.0.2 – Calendar timezone fix
Fixes
- Fixed calendar day headers shifting when the server timezone differs
from the WordPress timezone.
December 23 2025
1.1.0.1 – Style fixes
Fixes
- Fixed image styling in the Event Query Loop block.
- Fixed Event Data block styling.
December 4 2025
1.0.0.1 – Fixed missing JS imports
Fixes
- Fixed issue with missing i18n imports.
December 3 2025
1.0.0 – Event query loop block, event series page & more
New changes
- Introduced the new Event Query Loop block with templating, layout controls, and live editor previews.
- Added the new Event Series page/template with automatic instance listings and proper permalink routing.
Improvements
- Improved recurring rule UI with corrected weekday alignment, more accurate date handling, and reduced off-by-one errors.
- Enhanced Event Editor to always display dates in the WordPress timezone while saving clean UTC values internally.
- Optimized calendar rendering and ensured consistent color propagation for per-calendar event colors.
Fixes
- Fixed issue where recurring instances displayed on the wrong weekday in FullCalendar when using non-UTC timezones.
- Fixed incorrect “Ends On” dates when selecting a date in the recurring editor.
- Fixed recurring instances shifting by one hour or one day because of mixed UTC/Singapore conversions.
October 21 2025
0.9.7 – Week View Layout & Locale Handling Improvements
Improvements
- Redesigned week view header to display weekday names and dates on separate lines for improved readability.
- Improved locale detection and validation to ensure consistent weekday labels across languages.
Fixes
- Fixed issue where month view displayed extra numbers beside month names.
- Minor refinements to header rendering and date formatting for smoother cross-locale behavior.
October 20 2025
0.9.6 – Important bug fix
Fixes
- Fixed issue with recurring instances not loading. (May require saving permalinks again)
October 9 2025
0.9.4 – Calendar View & Localization Fixes
Improvements
- Enhanced localization support across admin and frontend interfaces.
- Improved responsiveness and overall stability in calendar rendering.
Fixes
- Resolved layout and navigation issues in the weekly calendar view.
- Corrected locale handling and improved date/time formatting consistency.
- Fixed recurring instances appearing blank when event time was unset or set as an all-day rule.
September 8 2025
0.9.2 – Calendar & Admin Improvements
New changes
- Introduced time format picker (12/24 hour).
- Added links to the “Account” page in plugin admin/dashboard.
Improvements
- Enhanced search event feature in calendar view.
- Added navigation support to the search event feature in calendar view.
- Improved timezone picker/switcher for better usability.
Fixes
- Fixed date range filter in backend.
- Fixed calendar blocks.
August 28 2025
0.9.1 – Admin & Calendar Fixes
Fixes
- Fixed CSS conflict with WordPress admin styles.
- Fixed CSS issues affecting the plugin UI in the admin area.
- Fixed “Add to Calendar” feature to ensure proper functionality.
July 25 2025
0.9.0 – First Pro release
Release notes
- Initial release of EventKoi Pro plugin.