Changelog

3.1.2 2026-05-30

Changed

  • Tweak for session/event capacity trigger.
  • Rename the event sidebar “Event Capacity” field to “Capacity” to better fit Craft’s meta layout.
  • Clarify event, session and ticket type capacity behaviour in the control panel and docs.

Fixed

  • Fix ticket update sync to avoid duplicate generated tickets.
  • Fix event capacity 0 being treated inconsistently in some capacity summary calculations.
  • Fix an error with session-capacity checks.

3.1.1 2026-05-19

Changed

  • Bump schemaVersion.

3.1.0 2026-05-14

Changed

  • Now requires Craft 5.10.0+.
  • Bump endroid/qr-code to be compatible with Craft 5.10+.

3.0.22 2026-05-14

Fixed

  • Fix session-level capacity not saving correctly, and improve UI.

3.0.21 2026-05-10

Fixed

  • Fix Purchased Ticket customer-related columns.
  • Fix purchased ticket relation backfill for Events 3 upgrades.

3.0.20 2026-05-03

Fixed

  • Fix an Events 2 to 3 migration error.

3.0.19 2026-04-29

Added

  • Add “Default Event Index Status” plugin setting.
  • Add the ability to set capacity on sessions.

Changed

  • Improve events_sessions.capacity element query check to be more guarded.

Fixed

  • Fix an error with migration and ticket purchasable store propagation.

3.0.18 2026-04-11

Added

  • Add sync ticket handling to all Commerce stores for CP manual orders.
  • Add Capacity, Purchased and Remaining columns to Events element index.

Fixed

  • Fix weekly recurrence day order so occurrence 0 matches session start.

3.0.17 2026-03-28

Added

  • Add support for Event Types to have “Generated Fields”.

3.0.16 2026-03-24

Added

  • Add events/tickets/cleanup-orphaned console command.

Fixed

  • Fix handling of event tickets for deleted/disabled events/sessions/ticket types.

3.0.15 2026-03-15

Added

  • Add Ticket::getPromotionRelationSource() for promotion category handling.

Changed

  • FIXED: Fix double quote issue on migration of events.

Fixed

  • Fix tickets not being propogated on multi-store installs.
  • Fix an issue where legacy tickets could be added to new orders in the control panel.
  • Fix an error where the base/price of a ticket wasn’t enforced correctly.
  • Fix an error where ticket shipping/tax categories didn’t always resolve.

3.0.14 2026-03-03

Fixed

  • Fix an error when sorting events by start/end date for paginated requests.
  • Fix incorrect error format for the downloads/pdf controller when an order cannot be found.

3.0.13 2026-02-13

Changed

  • Tickets now make use of the parent session, ticket type, or event’s enabled state to infer their own enabled state.

3.0.12 2026-01-23

Fixed

  • Fix Purchased Ticket title’s not including disabled or non-live status elements.

3.0.11 2026-01-13

Changed

  • Editing a Purchased Ticket from the control panel no longer allows for event/session/ticket type changes - instead change the ticket.

Fixed

  • Fix an issue when changing the Ticket value of a Purchased Ticket.

3.0.10 2025-11-06

Added

  • Add Ticket::getPromotionRelationSource() for promotion category handling.

Changed

  • Update English translations.

Fixed

  • Fixed a Mutex exception that could occur in certain scenarios when retrieving a cart.

3.0.9 2025-08-13

Added

  • Add the ability to set ticket type capacity to unlimited.

Fixed

  • Fix lack of supported site handling for a sessions and ticket types.
  • Fix an error when creating sessions.

3.0.8 2025-07-18

Added

  • Add Start/End Date columns as sortable to Events element index.
  • Add Session::getIsAvailable(), Session::getAvailableTickets(), TicketType::getIsAvailable(), TicketType::getAvailableTickets().
  • Add craft.events.sessions().

Changed

  • Update English translations.
  • Improve element query performance for events/sessions/tickets/etc with cached element queries.
  • Improve performance when querying ticket quantity/stock.

Fixed

  • Fix lack of supported site handling for an event.
  • Fix an error when creating new Event Types.
  • Fix an error for craft.events.isTicket() for some line item types.
  • Fix Event::getIsAvailable() type check.
  • Fix generating an ICS for an event.
  • Fix missing Event::getIcsUrl().
  • Fix an error when querying tickets by their event.

3.0.7 2025-05-01

Added

  • Add Shipping and Tax Category support for Event Types

Changed

  • Tickets are now ordered by their Ticket Type and Session order.
  • Update GraphQL resolvers to use ElementCollection correctly.

Fixed

  • Fix PDF handling for Craft Cloud.
  • Fix an error when sorting Ticket Types in their element tables.
  • Fix an error when upgrading to Craft 5 and the m250315_131608_unlimited_authors Craft migration.
  • Fix an SQL error.

3.0.6 2025-03-05

Changed

  • Use allTicketTypes as the attribute that manages ticket types on events.
  • Use allSessions as the attribute that manages sessions on events.
  • Improve event session and ticket type query performance.
  • Override the ownerType to speed up nested element trait lookup.

Fixed

  • Fix routing error when visiting the top-level Events page.
  • Fix references to availableCapacity and capacity for GraphQL queries for events and sessions.
  • Fix a query performance degradation bug for sessions and ticket types.
  • Fix a PHP error when eager loading a session or ticket type’s owner.
  • Fix a PHP error for invalid owners of sessions and ticket types.

3.0.5 2025-02-02

Fixed

  • Fix tickets being marked as shippable, and not respecting the ticketsShippable config setting.
  • Fix an error with Postgres when querying events.
  • Fix Purchased Tickets element table not escaping some values correctly.
  • Fix an issue where querying events by startDate or endDate wouldn’t work correctly in some scenarios.
  • Fix Post and Expiry Date values not saving correctly for Events.

3.0.4 2024-12-27

Fixed

  • Fix Ticket generation when Events, Sessions or Ticket Types were disabled.
  • Fix some misc typos and dependency issues.
  • Fix an error when downloading event PDFs.
  • Fix Session and Ticket Type custom fields not working for indexes.
  • Fix stock availability checks. (thanks @kennethormandy).

3.0.3 2024-11-19

Changed

  • Update element translations for display names.

Fixed

  • Fix an error for installs that use a database prefix.
  • Fix an error when handling order-creation with legacy ticket purchasables.
  • Fix incorrect checks for some Ticket Type properties, not saving correctly.
  • Fix default “Seats Per Ticket” value for Ticket Types.
  • Fix some translation strings.
  • Fix an error when sorting events via startDate or endDate.
  • Fix ordering by “Is Occurrence” for Sessions.
  • Fix an error when editing the settings of the Purchased Tickets field.
  • Fix “Purchased Tickets” index title not translatable.
  • Fix email link, referring to the Commerce email in the control panel.
  • Fix a migration error for sessions and ticket types.

3.0.2 2024-11-13

Added

  • Add error handling for when being unable to check in or check out Purchased Ticket.
  • Add before/after check-in/check-out events for Purchased Tickets.

Fixed

  • Fix compatibility with nystudio107/craft-seomatic 5.1.6+.

3.0.1 2024-11-13

Fixed

  • Fix an Events 2 migration error for sessions and ticket types.
  • Fix Ticket pricing not updating when changing Ticket Type.

3.0.0 2024-10-31

{warning} This release introduces Sessions and re-purposed Ticket Types. As such, it's a major architectural change to how you structure events, which should be largely intuitive. All your existing events and tickets will be migrated. Read through the changes here (opens new window).

Added

  • Add Sessions inside events to manage multiple dates per Event.
  • Add recurring Sessions to handle your recurring Events. Pick from Once, Daily, Weekly and Monthly.
  • Add GraphQL support.
  • Add the ability to register your own recurring frequency logic.
  • Add helper to events for checking when to automatically generate new Tickets when Sessions or Ticket Types have changed.
  • Add the ability when editing a Session to pick how to update it (just the occurrence, all, future, etc).
  • Add the ability when deleting a Session to pick how to handle it (just the occurrence, all, future, etc).
  • Add Ticket and Purchased Ticket element index tables as custom fields, if you want to attach them to various element screens.
  • Add the ability to set a default time for sessions.
  • Add allowed quantity to tickets types to control the minimum or maximum number of tickets to be purchased.
  • Add download button to purchased ticket interface.
  • Add the ability to attach ticket PDFs to Commerce emails.
  • Add the ability to set the timezone on start/end dates for sessions.
  • Add Events element conditions.
  • Add Purchased Ticket element conditions.
  • Add Promotable field to Ticket Types to control whether tickets should be promotable.
  • Add the ability to set a “Seats per Ticket” setting for tickets.
  • Add Purchased and Available columns for Ticket elements.

Changed

  • Now requires PHP 8.2.0+.
  • Now requires Craft 5.0.0+.
  • Events now no longer house the start/end dates for an event. These are managed in a Session.
  • Ticket Types are now defined in your Event, and have been re-puposed to be more powerful. This replaces what was Tickets in Events 2.x, and is where you define your pricing and capacity.
  • Tickets are now automatically generated for every event, based on the Event Sessions and Ticket Types. Previously, you defined the tickets themselves.
  • Tickets and Ticket Types from Events 2.x have been archived as legacy elements. These are re-created in Events 3.x in their new format.
  • Event capacity is now optional. It can now be used to override the automatically calculated capacity based off Ticket Types.
  • Ticket Type capacity is now required.
  • Checking in a ticket now shows a prompt to check in, rather than automatically checking in a user.
  • Updated the look and content of the check in template.
  • Revamp permissions, include event/session/ticket type view/create/edit/delete permissions.
  • Event element cards now show the event type and start/end date/times of events
  • Deleting a Ticket element is now prevented if any purchased tickets exist.