Eventward is a complete events calendar for WordPress, and all of it is free. Recurring events, six calendar views, maps, venues, organizers, tickets and RSVP come in one plugin. There is no Pro version, no add-on store, no licence key and no feature held back for a paid tier.
It is built for sites that need to stay fast and correct: event dates live in their own indexed table, repeating schedules are expanded by a real iCalendar engine, and paid tickets go straight to your own Stripe account with no fee from us.
What makes Eventward different
- Everything is in the free plugin. Recurring events, every view, maps, filters, tickets and RSVP. Most event plugins sell these as add-ons; here there is nothing to upgrade to.
- Built on a proper date index. Each event date is stored as a row in one small indexed table, instead of being searched out of post meta. Month, week and list views stay quick as a calendar grows into thousands of dates, and every event keeps its real post ID, so other plugins and page builder loops work with it normally.
- Recurring events that get the details right. Schedules follow the iCalendar standard (RRULE), with skipped and extra dates. Each event has its own timezone, and a 7pm weekly event stays at 7pm when the clocks change.
- Tickets with no platform fee. Free tickets work as an RSVP. Paid tickets use Stripe Checkout on your own Stripe account: buyers pay you directly and you only pay Stripe's standard processing fees.
- Search engine friendly by design. Every event page carries schema.org Event data for Google. Calendar navigation cannot turn into an endless crawl: dated calendar pages are noindex, navigation links are nofollow and empty far-future months return 404.
- An easy move from The Events Calendar. A built-in importer copies your events, venues, organizers, categories, ticket types and bookings across without changing anything in The Events Calendar. Event, venue, organizer, month and day URLs follow the same patterns, and an optional setting lets existing
[tribe_events] shortcodes keep working, so links and pages survive the switch.
- Bring your events from anywhere else too. Import from All-in-One Event Calendar, from Eventbrite, from calendar files (.ics) exported by Google Calendar, Outlook or Apple Calendar, or from a spreadsheet. Calendar feeds can keep syncing on a schedule.
Calendar and views
- Six views: month, week, list, photo, map and day, as a block you can place anywhere, plus ready-made templates for block themes. Classic themes are supported too.
- Search and filters by keyword, category, venue and organizer, applied in place without reloading the page.
- Mobile friendly. On small screens the month view becomes an easy-to-read agenda.
- Category colours. Give each category a colour and show it as a line before each event or as the event's background in the month and week views.
- Your choice of display. 24-hour or 12-hour times, and full event names in the month view for long titles.
- Light on your pages. Styles and scripts only load where events are shown, and moving between months and views updates the calendar in place.
Recurring events and time zones
- Daily, weekly, monthly ("the second Tuesday", "the last Friday") and yearly schedules, with intervals, end dates, counts, skipped dates and extra dates.
- A custom option for anything else the iCalendar standard can describe.
- A timezone per event, with correct local times across daylight saving changes.
- Each date of a repeating event has its own page and its own entry in Google's event data.
Venues, organizers and maps
- Create venues and organizers inline while editing an event. Each gets its own page listing its upcoming events.
- Maps without API keys. OpenStreetMap maps for the calendar, venues and events, with clustered pins, bundled with the plugin.
- Place venues by typing their coordinates, or turn on address lookup (OpenStreetMap Nominatim, off by default) to find them from the address when you save.
Tickets and RSVP
- Free RSVP and paid tickets, several ticket types per event, with capacity per type and per date.
- Stripe Checkout in test and live mode. Connect your Stripe account in one click, or paste a restricted API key.
- Seats are held while a buyer pays and released automatically if they do not finish, so a date does not oversell.
- Confirmation emails with ticket codes, an attendee list with check-in, CSV export, one-click refunds and resending confirmations.
- Your own booking questions on each ticket type (short or long text, dropdown, yes-or-no tick box, phone number), answered once per ticket, with answers on the attendee list, in the CSV and in the emails. Logged-in visitors find their name and email already filled in, which suits membership sites.
- Reports: bookings, check-ins, no-shows and takings by month, by date and by ticket type for any period, with capacity filled per date and a CSV export for your annual figures.
- An optional Stripe webhook for instant confirmations. Without it, payments are still confirmed when buyers return and by a background check.
- Bookings are included in WordPress's personal data export and erasure tools.
Themes, blocks and page builders
- Native blocks and Site Editor templates for block themes.
- Shortcodes for the calendar, event details, single fields (date, venue, cost and more), tickets and maps, for Bricks, Divi, Elementor and other builders.
- A sortable "next date" field for page builder query loops.
Sharing and SEO
- schema.org Event data on every event: status, attendance mode, location, organizer, price and availability.
- Add to calendar links for Google Calendar, Apple Calendar, Outlook and Microsoft 365, plus subscribable iCal feeds for the whole calendar or any category.
- Event status for cancelled, postponed, rescheduled and moved online events, shown on the page and sent to Google.
Fair by default
- No upsells, no admin banners, no ads and no tracking. Every external service Eventward can use is listed below, with what it sends and when.
- Your data stays yours: deactivating never deletes anything, and uninstalling only removes events if you ask it to.
- Translation ready.
Eventward is made by OmnisWP, the team behind Siteward.
0.6.0
- New: Events > Import now has a tab for each source, and four new importers. Each has a check first that changes nothing, can refresh events imported before, and can move everything it imported to the trash.
- New: Import from All-in-One Event Calendar (Timely), or run
wp eventward import-ai1ec (once per site on a network). Copies events with their dates, repeat rules and time zones, categories with their colours, tags and featured images, and turns the venues and contacts typed into each event into shared venues and organizers. Repeat rules come across when Eventward reads them the same way, otherwise the generated dates are copied. Events it pulled in from calendar feeds are left out unless you ask for them. Works with All-in-One Event Calendar inactive and never changes its data.
- New: Import calendar files (.ics) from Google Calendar, Outlook, Apple Calendar, Meetup, The Events Calendar and others, with repeat rules, changed and cancelled dates, time zones (including Outlook's Windows names), venues, organizers, categories and images.
- New: Calendar feeds. Add a calendar's .ics address and Eventward keeps its events in step every hour, twice a day or daily: new events are added, changed ones updated, and future events removed from the feed go to the trash. Events you trash or delete yourself stay out. A reply that stops before the end of the calendar is ignored, and a feed that suddenly has no events, or less than half of what it had, keeps its events and shows a warning instead. Only one sync of a feed runs at a time. Repeating events whose start is in UTC stay in UTC, so their dates match the calendar after daylight saving changes.
wp eventward feeds manages them from the command line.
- New: Import events from a spreadsheet (.csv), or run
wp eventward import-csv. Match each column to an event field with a preview of the first rows; exports from The Events Calendar, Google Calendar and Outlook are matched automatically. Reads CSV files saved from Excel, Google Sheets or Numbers in any common encoding or separator and dates in most formats, working out day-first or month-first dates from the whole file. A sample file is on the screen.
- New (beta): Import your Eventbrite events with a private token from your Eventbrite account, or run
wp eventward import-eventbrite: titles, descriptions, dates in each event's time zone, venues, organizers, categories and images. A series becomes one event with extra dates when every date shares its time. Ticket types can come across too, with bookings turned off so nothing is sold twice; refreshing never changes the ticket types of an event whose bookings you turned on here. Eventbrite is only contacted after you connect (see External services).
- New: Ticket sale dates. Each ticket type can have "On sale from" and "On sale until" (in the event's time zone). The booking form shows when sales open or that they have ended (with the event's time zone when it differs from the site's), and bookings outside those dates are refused. A date picked without a time runs from the start of the first day to the end of the last.
- New: The importer for The Events Calendar now brings bookings across: paid orders from Tickets Commerce, PayPal and WooCommerce, RSVPs and their attendees, with check-ins, answers to attendee questions and ticket codes. Nothing is charged, refunded or emailed. Imported bookings count toward capacity, show in Attendees (marked "Imported") and in Reports, and can be cancelled to free the seat (refunds are made where they were paid). Refreshing keeps each check-in and ticket code with the same person, and keeps bookings you cancelled in Eventward cancelled unless The Events Calendar changed them since. Turn it off with "Import bookings" or
--no-bookings.
- Change: Ticket sale dates from The Events Calendar come across, so tickets whose sales ended are kept, marked "Sales ended", instead of being left out.
- Change: The Import screen says more clearly that events, ticket types and bookings come across from The Events Calendar, not only venues, organizers and categories.
- Fix:
wp eventward import-tec --no-tickets and --no-custom-fields were refused by WP-CLI.
- Fix: Duplicating an imported event no longer copies its import marker, so moving imported items to the trash never touches the copy.
- Change: Moving an import's items to the trash leaves venues and organizers that other events still use.
- Change: The Classic Editor warns when ticket sales end before they start, and its tickets table scrolls on its own on small screens.
- New: "+ New venue" and "+ New organizer" in the event now take every detail, not just the name: address, city, region, postcode, country, phone and website for a venue; email, phone and website for an organizer. With a venue chosen, "Edit venue details" opens it in a new tab. The Classic Editor has the same fields, and creates the venue or organizer when you save the event. People who may not publish venues or organizers (Contributors) add them as pending, for an editor to check. Thanks to Hans-Gerd Gerhards for the idea.
- Fix: The "View map" link under a venue's address searched OpenStreetMap for the venue's name and address together, which often found nothing. It now searches for the address alone, leaving out units and floors ("Level 2") that OpenStreetMap cannot find. Venues with map coordinates still link to their exact spot.
0.5.10
- Fix: Tapping "Book tickets" or "Reserve my spot" several times in quick succession (easy on a phone while the next page loads) could make a separate booking for each tap. The button now locks once the form is sent (with a note that the booking is on its way), and the same form sent again finds the booking it already made (or that booking's payment page) instead of making another, so nothing is booked or emailed twice. A form changed and sent again, for example after the Back button, still makes a new booking. Bookings already made twice are not changed: open the extra ones under Events > Attendees to cancel or refund them.
0.5.9
- New: In the block editor, the settings sidebar now has an "Event settings" panel saying where the event's fields are (in the box under the content since 0.5.8), with a button that opens and scrolls to the box, even if it was collapsed or switched off, and a link to move the fields into the sidebar instead. Venues and organizers get the same.
- New: "+ New organizer" under the Organizers field, like "+ New venue", to add an organizer without leaving the event. (Typing a new name and pressing Enter still works too.)
- Change: The Events list starts with the Author, Tags and Comments columns hidden, so When, Venue and Tickets have room. Show them again under Screen Options at the top of the list.
- Fix: Calendar dates far from any event (more than a month before the first or after the last) now return "not found" on every page with the calendar block or shortcode, as they already did on the events archive and category pages. SEO crawlers that ignore nofollow can no longer walk years of empty dates through your home page.
- Fix: The "Add to calendar" .ics links are marked nofollow, so crawlers no longer download a calendar file for every date of every event.
- Fix: With the Day view switched off under Events > Settings, the month view's "+2 more" links and date numbers opened the default view instead of that day, so with Month as the default nothing seemed to happen. They now open the week holding that day (or the Day view when it is on). If Day and Week are both off, the month grid shows every event instead.
0.5.8
- Fix: The 0.5.7 package on WordPress.org was, by mistake, an early build: it asked one set of booking questions on every event and kept answers per order, and it missed the fixes listed below. 0.5.8 is the finished version. Questions you set under Events > Settings > Booking form are moved onto every ticket type of your existing events, and answers already given are kept on each attendee of the booking, so nothing is lost. Developers: the eventward_booking_fields filter is replaced by eventward_ticket_questions.
- New: Booking questions per ticket type. In an event's Tickets and RSVP panel (block editor or Classic Editor), give any ticket type its own questions: short text, long text, a dropdown, a yes-or-no tick box or a phone number, optional or required, with help text. They are asked once per ticket, so booking three dinner tickets asks for three sets of dietary needs, and each attendee keeps their own answers. An online pass can ask nothing at all.
- New: Answers show under each ticket on the Attendees screen and the order, in the attendee CSV export (a column per question when you export one event), and in the confirmation and admin emails. They are included in WordPress's personal data export and erasure.
- New: Import from The Events Calendar, under Events > Import or with
wp eventward import-tec. Copies categories, venues (with Events Calendar Pro map coordinates), organizers and events: dates and time zones, all-day, venue, organizers, cost, website, featured, hidden, cancelled or postponed status, online events, categories, tags, featured images and each event's address. Repeating events from Events Calendar Pro keep their repeat rule where Eventward can read it, otherwise their list of dates. Ticket types from Tickets Commerce, RSVP, WooCommerce or PayPal tickets come across with prices and capacities, and Event Tickets Plus attendee fields become booking questions. Other custom fields (SEO titles and descriptions, ACF and theme fields) can be copied too.
- New: The import never changes anything in The Events Calendar, works whether it is active or not, runs in small steps so large sites do not time out (and carries on from where it stopped after an error), can be checked first without changing anything, and skips what it imported before (or refreshes it, if you ask). A button moves everything it imported to the trash, to start again. Orders and attendees are not copied: tickets already sold in The Events Calendar come off the capacity, ticket types that were sold out or off sale are left out, and an upcoming event with none left on sale is imported with bookings turned off.
- New: Suggested text for your privacy policy (Settings > Privacy > Policy Guide) describing what Eventward stores about bookings.
- Change: In the block editor, the event, venue and organizer fields (dates, repeats, details, tickets) now sit in a full-width "Event settings" box under the content instead of the narrow sidebar.
- New: Prefer them in the sidebar? Choose "Eventward fields in the sidebar" in the editor's Options menu (the three dots at the top right), or use the link at the foot of the Event settings box. The choice is per user and remembered with your account; the full-width box stays the default.
- Fix: Event, venue, organizer and calendar pages could all return "Page not found" if WordPress's saved permalink rules were rebuilt without Eventward's (for example by another plugin, or during an update), and stayed that way until Settings > Permalinks was saved. Eventward now notices and repairs this by itself.
- Fix: Repeat rules the editor cannot show exactly (for example every third month, or the 15th and 30th of each month, as often imported from The Events Calendar) are kept as a custom rule instead of being simplified when the event is saved. In the Classic Editor a plain Update could change them. "Custom (RRULE)" can be chosen in the block editor again.
- Fix: On sites with more than 100 organizers or venues, the event editor lists them all. Editing an event's organizers could drop ones past the first 100, and typing their name made a duplicate.
- Fix: Booking answers and dropdown choices may contain a percent sign followed by two letters or digits (such as "100%Beef"); before, these were cut out, and such a choice could not be booked.
- Fix: If a booking cannot go through (for example a ticket type sold out a moment earlier), the form comes back with everything the visitor typed still filled in.
- Fix: Booking form fields have clearer borders, for better contrast on light and dark themes.
- Fix: Scripts and styles are refreshed in the browser whenever the plugin is installed again, even at the same version (for example after re-uploading the .zip), so the editor never runs an old copy.
0.5.7
- New: Booking questions. Add your own questions to the RSVP and ticket form under Events > Settings > Booking form: short text, long text, dropdown, checkbox or phone number, each optional or required, with help text. Answers show on the order, in the attendee CSV export and in the confirmation and admin emails, and are included in WordPress's personal data export and erasure. (Replaced by questions per ticket type in 0.5.8.)
- New: Logged-in visitors find their name and email already filled in on the booking form, from their WordPress account. They can still change them to book for someone else (filter: eventward_booking_prefill).
- New: Orders remember the account they were booked from, shown on the order and in the attendee CSV.
- Change: The new booking email to the site admin links straight to the order.
0.5.6
- Fix: On Events > Payments, the "Endpoint details", "Use a restricted API key instead" and "Set up the webhook" sections were squeezed into a narrow column since 0.5.5. They show at full width again. Payments, connections and webhooks themselves were not affected.
0.5.5
- New: Events > Reports. See bookings, check-ins, no-shows and takings for the last 30 days, 90 days, 12 months, this year, last year, the next 12 months or any dates you choose, for all events or one. It includes a month-by-month chart, a list of dates showing how full each one was, a ticket type breakdown and a CSV export. Test payments are kept apart from live takings.
- New: Category colours. Pick a colour for an event category under Events > Categories, then choose under Events > Settings > Calendar whether it shows as a line before each event or as the event's background in the month and week views. Text on a coloured background switches between black and white to stay readable.
- New: Time format setting under Events > Settings > Calendar: 24-hour (19:30), 12-hour (7:30 pm), or the same as WordPress. It applies to the calendar, event pages, shortcodes and booking emails.
- New: Option to show full event names in the month view, wrapping long names onto more lines instead of cutting them short.
- Change: A database index on ticket dates keeps reports quick on sites with many bookings.
0.5.4
- Fix: Sites that use the Classic Editor plugin, or a page builder that turns the block editor off (such as Divi), now get full event, venue and organizer fields on the edit screen: dates and times, repeats, venue, organizers, details, status and tickets. Previously these were only in the block editor sidebar.
0.5.3
- Change: Requires WordPress 6.7 or later, where block themes register plugin templates natively.
- Change: The [tribe_events] shortcode is only handled when you turn on its compatibility option under Events > Settings.
- Change: Settings saved before 0.5.2 have address lookup switched off once; turn it on again under Events > Settings > Maps if you want it.
- Change: Deleting the plugin always removes stored Stripe credentials and scheduled jobs, even when you keep your events.
- Fix: The one-click Stripe connection checks a nonce when you come back from Stripe.
- Fix: Event data for Google is printed with WordPress's own script functions, and admin screens use an enqueued script instead of inline handlers.
0.5.2
- Change: Address lookup for venue maps (OpenStreetMap Nominatim) is now off by default. Turn it on under Events > Settings > Maps; until then no venue data is sent anywhere and no background lookups run.
- Change: The booking form is checked with a nonce, and pages showing it are excluded from page caches so the form never goes stale.
0.5.1
- Fix: With Rank Math or Yoast SEO active, dated, paged and filtered calendar pages stay noindex and each date of a repeating event keeps its own canonical link. Those plugins print their own robots and canonical tags, which had replaced Eventward's.
0.5.0
Review release ahead of the
WordPress.org submission.
- Fix: Paid checkout offers card payments (including Apple Pay and Google Pay) only, and a payment that arrives after a booking lapsed is confirmed if seats are still free or refunded automatically, with the buyer and admin told. A buyer can no longer be charged without getting tickets.
- Fix: Orders are only expired when Stripe says the checkout expired, never because Stripe was briefly unreachable.
- Fix: Prices such as "1,000" are no longer read as 1 or turned into a free ticket: a price that cannot be read clearly is not sold and the editor says why. Three-decimal currencies (KWD, BHD, JOD, OMR, TND) are charged correctly.
- Fix: Moving an event's date or time moves its bookings with it. Tickets left on a date that was removed are flagged on the Attendees screen.
- Fix: Refunds made in the Stripe Dashboard are matched correctly, including several partial refunds.
- Fix: Test-mode bookings no longer count against live capacity.
- Fix: Password-protected events no longer show their content, online link or booking form anywhere (lists, feeds, Google data, REST API) until the password is entered.
- Fix: Shortcodes only show published events.
- Fix: Changing the site timezone rebuilds event dates; long repeating series with an end date or count keep extending; the iCal feed no longer stops at 2000 dates.
- Fix: Several accessibility, contrast and translation improvements in the calendar, booking form, editor and admin screens.
- Change: The Payments screen no longer contacts omniswp.com when it loads; the connection service is only contacted when you press "Connect with Stripe".
- Change: Visitors see a general message when payment is unavailable; the Stripe detail is shown to admins on the Payments screen.
0.4.4
- Fix: When a buyer cancels on Stripe's payment page, the Stripe checkout is closed too, so a copy left open in another tab cannot take payment for seats that were released.
0.4.3
- Change: Test-mode bookings are clearly labelled "Test payment, no money taken" on the confirmation.
0.4.2
- New: Optional Stripe webhook you add by hand in your Stripe Dashboard (Events, Payments). Payments, expired checkouts and refunds made in Stripe then show up instantly instead of within 10 minutes. Every request is checked against the endpoint's signing secret.
- Fix: A booking confirmed at the same moment by the return page and the background check can no longer send two confirmation emails.
0.4.1
- Fix: The booking button now uses the theme's primary colour instead of blending into the background.
- Change: Paid tickets show as not on sale online until Stripe is connected, instead of showing a form that cannot take payment.
- Change: Events with a single ticket type start the quantity at one.
0.4.0
- New: Tickets and RSVP. Add ticket types to any event (free ones are an RSVP), with capacity per date, a booking form on the event page, and confirmation emails with ticket codes.
- New: Paid tickets through Stripe Checkout with your own Stripe account, in test and live mode. Connect in one click through the Eventward Stripe app, or paste a restricted API key. No fee from Eventward.
- New: Attendees screen with filters, check-in, CSV export, order details, refunds and resending confirmations.
- New: Seats are held for 30 minutes while a buyer pays, then released if they do not finish. Refunds made in the Stripe Dashboard cancel the tickets here.
- New: Personal data export and erasure for bookings (Tools, Export or Erase Personal Data).
- New: [eventward_tickets] shortcode for page builder templates.
- Change: Google event data uses real ticket prices and shows sold-out dates as sold out.
0.3.3
- Fix: A calendar with navigation turned off (an upcoming-events widget) no longer changes when another calendar on the same page is navigated.
- Fix: A calendar placed on a static front page kept showing after you moved between months or views. Before, the front page switched to the blog listing.
- Change: Dated and filtered calendar addresses are marked noindex on every page that shows a calendar, not only on the events page.
0.3.2
- Fix: The calendar's view switcher wraps instead of running off the edge in narrow columns and on phones.
0.3.1
- Fix: Map tiles no longer show "Access blocked" on hosts that send a strict Referrer-Policy header (common on CloudPanel and with security plugins).
0.3.0
- New: Week, photo and map views, and a setting to choose which views visitors can switch between.
- New: Search and filters (keyword, category, venue, organizer) above the calendar, applied in place.
- New: OpenStreetMap maps with clustered pins on the map view, venue pages and event pages. No API key needed.
- New: Venue addresses are looked up automatically on save, with a "Find on map" button in the venue editor. Addresses with floors or units ("Level 2/182 Vivian St") are cleaned up first, and coordinates you type yourself are never overwritten.
- New: Shortcodes for page builders: [eventward], [eventward_event_details], [eventward_field] and [eventward_map], plus [tribe_events] compatibility.
- New: Each event keeps its next date in the _eventward_next field, so builder query loops can sort and filter upcoming events.
- New: Setting to stop event details being added automatically when a builder template places them.
0.2.0
- New: Events Calendar block with month, list and day views, in-place navigation and a mobile agenda layout.
- New: Event Details block with date, venue, organizers, cost, map link, add-to-calendar menu and other dates of repeating events.
- New: Templates for block themes (calendar, single event, event category) and support for classic themes.
- New: Each date of a repeating event has its own address, e.g. /event/quiz-night/2026-10-13/.
- New: schema.org Event data for Google, one entry per date.
- New: iCal downloads and subscription feeds (/events/ical/), with correct timezones.
- New: Venue and organizer pages list their upcoming events.
- New: Settings for the default calendar view, events per page and currency code.
- Change: Addresses match The Events Calendar, including /events/month/, /events/list/, /events/today/ and ?ical=1.
0.1.0
- New: Events, venues, organizers and event categories.
- New: Recurring events with skipped and extra dates, previewed live in the editor.
- New: Per-event timezones, all-day events, event status and online or hybrid attendance.
- New: Duplicate an event from the Events list.
- New: Settings for addresses, how far ahead to plan recurring events, and prices.