# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

Pending entries for the next release live as individual files under
[`.github/changelog/`](.github/changelog/) and get rolled up into a new
version section by `composer changelog:write` at release time.

## [0.33.3] - 2026-02-16

### Fixed
- Protect GatherPress meta from the Custom Fields panel to prevent stale data overwrites on event save. [#1383](https://github.com/GatherPress/gatherpress/pull/1383)

## [0.33.2] - 2026-02-08

### Fixed
- Fix "not allowed to edit custom field" error when publishing events. [#1375](https://github.com/GatherPress/gatherpress/pull/1375)

## [0.33.1] - 2026-01-30

### Fixed
- Fix `.ics` downloads on sites with custom permalinks, auto-flush rewrite rules on plugin update, and resolve add-to-calendar block context inside Query Loops. [#1356](https://github.com/GatherPress/gatherpress/pull/1356)

## [0.33.0] - 2026-01-10

### Added
- New `gatherpress/event-query` block variation of `core/query` so theme authors can build event-aware loops from any template. [#962](https://github.com/GatherPress/gatherpress/pull/962)
- New `gatherpress/rsvp-form` block with token-based authentication, anonymous submissions, guest counts, and configurable form-field blocks. [#1106](https://github.com/GatherPress/gatherpress/pull/1106) [#1116](https://github.com/GatherPress/gatherpress/pull/1116) [#1168](https://github.com/GatherPress/gatherpress/pull/1168) [#1179](https://github.com/GatherPress/gatherpress/pull/1179)
- New `gatherpress/add-to-calendar` block with cleaner architecture, replacing the legacy attendee-list-only Add to Calendar markup. [#1068](https://github.com/GatherPress/gatherpress/pull/1068)
- Block Guard feature for query-loop integration so editor previews stay interactive without breaking save flow. [#1159](https://github.com/GatherPress/gatherpress/pull/1159)
- Auto-generated developer hook docs under `docs/developer/hooks/`, regenerated by CI on every push to `develop`. [#1135](https://github.com/GatherPress/gatherpress/pull/1135)
- Display options for the Event Date block (date format, time format, separator). [#1155](https://github.com/GatherPress/gatherpress/pull/1155)
- Filter `gatherpress_default_duration_options` to customize the duration dropdown options. [#882](https://github.com/GatherPress/gatherpress/pull/882)
- RSS feed for past events. [#1189](https://github.com/GatherPress/gatherpress/pull/1189)
- Loading animation while the RSVP API is in flight. [#1208](https://github.com/GatherPress/gatherpress/pull/1208)
- GDPR-compliant opt-in filter for event notifications. [#1225](https://github.com/GatherPress/gatherpress/pull/1225)
- Improved security policy with detailed reporting guidelines. [#1321](https://github.com/GatherPress/gatherpress/pull/1321)

### Changed
- Refactor RSVP form processing into a centralized helper class; UI polish across the RSVP block family. [#1224](https://github.com/GatherPress/gatherpress/pull/1224)
- Refactor CSS class naming across blocks to a consistent component pattern. [#1183](https://github.com/GatherPress/gatherpress/pull/1183)
- Improve autoloader flexibility by removing hardcoded directory mappings. [#1199](https://github.com/GatherPress/gatherpress/pull/1199)
- Tie submitted RSVP emails to existing users when possible; fix comment approval flow. [#1213](https://github.com/GatherPress/gatherpress/pull/1213)
- Add support for WordPress 6.9. [#1236](https://github.com/GatherPress/gatherpress/pull/1236)
- Add support for PHP 8.4 in the test matrix. [#1147](https://github.com/GatherPress/gatherpress/pull/1147)
- Move build directory out of the repository in favor of release artifacts. [#1066](https://github.com/GatherPress/gatherpress/pull/1066)
- Update `register_setting` calls to use sanitize callbacks. [#1074](https://github.com/GatherPress/gatherpress/pull/1074)
- Replace deprecated WordPress admin notice markup with `wp_admin_notice()`. [#1080](https://github.com/GatherPress/gatherpress/pull/1080)
- Simplify rewrite rules flushing by leveraging WordPress core's mechanism. [#1231](https://github.com/GatherPress/gatherpress/pull/1231)
- Add gesture-handling library so Leaflet maps don't hijack page scroll. [#1089](https://github.com/GatherPress/gatherpress/pull/1089)
- Update RSVP column on the admin events list. [#1237](https://github.com/GatherPress/gatherpress/pull/1237)
- Add post-type-aware event validation and past-event handling for the RSVP form visibility system. [#1239](https://github.com/GatherPress/gatherpress/pull/1239)
- Multisite test coverage added to the suite. [#1291](https://github.com/GatherPress/gatherpress/pull/1291)

### Fixed
- Resolve translation-loading error by moving GP core function to the `init` hook. [#1055](https://github.com/GatherPress/gatherpress/pull/1055)
- Allow multiple `gatherpress/venue` blocks per event. [#1095](https://github.com/GatherPress/gatherpress/pull/1095)
- Fix critical error when WPForms Pro is also installed. [#1118](https://github.com/GatherPress/gatherpress/pull/1118)
- Fix Block Guard behavior in FSE templates. [#1119](https://github.com/GatherPress/gatherpress/pull/1119)
- Fix Block Guard inside query-loop blocks. [#1159](https://github.com/GatherPress/gatherpress/pull/1159)
- Fix RSVP block dimming, focus trap, and button-block targeting. [#1244](https://github.com/GatherPress/gatherpress/pull/1244) [#1256](https://github.com/GatherPress/gatherpress/pull/1256) [#1269](https://github.com/GatherPress/gatherpress/pull/1269)
- Restrict the RSVP "view" filter to RSVP comment types so counts and the "Mine" filter are correct. [#1133](https://github.com/GatherPress/gatherpress/pull/1133)
- Prevent generic comment notifications from being sent to event authors when an RSVP comment is left. [#1218](https://github.com/GatherPress/gatherpress/pull/1218)
- Honor WordPress comment privacy filters on RSVP inserts. [#1470](https://github.com/GatherPress/gatherpress/pull/1470)
- Fix date-picker relative-mode behavior so duration offset is maintained when the start date changes. [#1219](https://github.com/GatherPress/gatherpress/pull/1219)
- Fix Event Query block toggle on hosts where `array_filter` was stripping `0` values. [#1235](https://github.com/GatherPress/gatherpress/pull/1235)
- Fix Moment Timezone error for sites configured with a Manual UTC Offset. [#1336](https://github.com/GatherPress/gatherpress/pull/1336)
- Fix UI/UX bug where dropdown children were not auto-expanding on parent select. [#1333](https://github.com/GatherPress/gatherpress/pull/1333)
- Fix hardcoded comment-type assumptions so third-party comment plugins keep working. [#1226](https://github.com/GatherPress/gatherpress/pull/1226)
- Fix `extract-wp-hooks` action when no new hooks are present. [#1230](https://github.com/GatherPress/gatherpress/pull/1230)
- Don't ship the `.wordpress-org` directory in plugin releases. [#1104](https://github.com/GatherPress/gatherpress/pull/1104)

### Removed
- Remove `window.GatherPress` global in favor of editor settings, interactivity state, and data stores. [#1465](https://github.com/GatherPress/gatherpress/pull/1465)

## [0.32.3] - 2025-07-09

### Fixed
- Maintenance release with PHP / WordPress compatibility fixes and translation updates carried forward from `develop`. [#1117](https://github.com/GatherPress/gatherpress/pull/1117)

## [0.32.2] - 2025-05-01

### Fixed
- Maintenance release rolling up post-0.32.1 fixes. [#1072](https://github.com/GatherPress/gatherpress/pull/1072)

## [0.32.1] - 2025-04-23

### Added
- `author` support for the event and venue post types so post author appears in block bindings and admin UI. [#1050](https://github.com/GatherPress/gatherpress/pull/1050) [#1052](https://github.com/GatherPress/gatherpress/pull/1052)

### Changed
- Composer dependency refresh. [#1058](https://github.com/GatherPress/gatherpress/pull/1058)

## [0.32.0] - 2025-04-12

### Added
- V2 of the RSVP and RSVP Response blocks with a templating system for attending / not-attending / waiting-list / past / no-status states. [#959](https://github.com/GatherPress/gatherpress/pull/959)
- RSVP Anonymous Checkbox block with per-event opt-in. [#979](https://github.com/GatherPress/gatherpress/pull/979)
- RSVP guest feature with configurable per-event guest count. [#975](https://github.com/GatherPress/gatherpress/pull/975)
- Save RSVP commenter IP address. [#1008](https://github.com/GatherPress/gatherpress/pull/1008)
- Block Guard primitive that lets RSVP and RSVP Response blocks integrate cleanly with the Query Loop block. [#1023](https://github.com/GatherPress/gatherpress/pull/1023)
- Dynamic login and registration links so the RSVP login prompt respects WordPress core settings. [#1027](https://github.com/GatherPress/gatherpress/pull/1027)
- New "Add to calendar" block variation. [#954](https://github.com/GatherPress/gatherpress/pull/954)
- New calendar REST endpoints with documentation and unit tests. [#927](https://github.com/GatherPress/gatherpress/pull/927) [#928](https://github.com/GatherPress/gatherpress/pull/928) [#929](https://github.com/GatherPress/gatherpress/pull/929)
- Hookable patterns infrastructure with slot fills and developer docs. [#888](https://github.com/GatherPress/gatherpress/pull/888)
- New block variation loading mechanism. [#898](https://github.com/GatherPress/gatherpress/pull/898)
- Toggle for showing/hiding latitude and longitude on the Venue block. [#877](https://github.com/GatherPress/gatherpress/pull/877)
- Portuguese (Brazil) locale added to the screenshot generator. [#963](https://github.com/GatherPress/gatherpress/pull/963)
- Block context now propagates to the Event Date block. [#990](https://github.com/GatherPress/gatherpress/pull/990)

### Changed
- RSVP storage migrates from the custom `gp_rsvps` table to the WordPress `comments` table, simplifying queries and aligning with WP conventions. [#692](https://github.com/GatherPress/gatherpress/pull/692)
- Make event query respect `orderBy`, `order`, and "unfinished events". [#889](https://github.com/GatherPress/gatherpress/pull/889)
- Rename "responses" to "records" so the word isn't repeated in data structures. [#997](https://github.com/GatherPress/gatherpress/pull/997)
- Unit test coverage increased substantially across Event, RSVP, Block Guard, Dropdown_Item, Validate, General_Block, Modal, Settings, Event Query, RSVP Query, and global JS helpers. [#1002](https://github.com/GatherPress/gatherpress/pull/1002) [#1003](https://github.com/GatherPress/gatherpress/pull/1003) [#1007](https://github.com/GatherPress/gatherpress/pull/1007) [#1010](https://github.com/GatherPress/gatherpress/pull/1010) [#1012](https://github.com/GatherPress/gatherpress/pull/1012) [#1013](https://github.com/GatherPress/gatherpress/pull/1013) [#1014](https://github.com/GatherPress/gatherpress/pull/1014) [#1015](https://github.com/GatherPress/gatherpress/pull/1015) [#1017](https://github.com/GatherPress/gatherpress/pull/1017) [#1018](https://github.com/GatherPress/gatherpress/pull/1018) [#1031](https://github.com/GatherPress/gatherpress/pull/1031)
- Use focus-trap helper on the RSVP modal so keyboard navigation stays inside the dialog. [#985](https://github.com/GatherPress/gatherpress/pull/985)
- Update Add to Calendar icon styling. [#1004](https://github.com/GatherPress/gatherpress/pull/1004)
- Remove global JS file and rework into per-block helpers. [#986](https://github.com/GatherPress/gatherpress/pull/986)
- Make the login / registration links dynamic. [#1027](https://github.com/GatherPress/gatherpress/pull/1027)
- Node version + package updates. [#1029](https://github.com/GatherPress/gatherpress/pull/1029)

### Removed
- Remove `initialDecline` functionality. [#1019](https://github.com/GatherPress/gatherpress/pull/1019)
- Comment out legacy Add to Calendar code (replaced by new block, see 0.33.0). [#987](https://github.com/GatherPress/gatherpress/pull/987)

### Fixed
- Fix the waiting-list check when max attendance is `0` (interpreted as unlimited). [#999](https://github.com/GatherPress/gatherpress/pull/999)
- Fix dropdown bug in the RSVP Response block. [#1034](https://github.com/GatherPress/gatherpress/pull/1034)
- Fix focusable elements inside Block Guard overlay. [#1035](https://github.com/GatherPress/gatherpress/pull/1035)
- Fix event panels not loading on truly-new events. [#1028](https://github.com/GatherPress/gatherpress/pull/1028)
- Fix regex potentially vulnerable to super-linear runtime due to backtracking. [#1032](https://github.com/GatherPress/gatherpress/pull/1032)
- Many a11y improvements (modal aria, focus traps, color contrast). [#972](https://github.com/GatherPress/gatherpress/pull/972)

## [0.31.0] - 2024-10-04

### Added
- Customizable rewrite bases for post types and taxonomies. [#812](https://github.com/GatherPress/gatherpress/pull/812)
- New `gatherpress/event-date` block UI with refactored controls and renamed files for consistency. [#820](https://github.com/GatherPress/gatherpress/pull/820) [#873](https://github.com/GatherPress/gatherpress/pull/873)
- Customizable `Event->get_formatted_datetime()` (now public). [#878](https://github.com/GatherPress/gatherpress/pull/878)
- New developer docs section for running PHPUnit via `wp-env`. [#879](https://github.com/GatherPress/gatherpress/pull/879)
- Refactor REST API validation into its own class. [#883](https://github.com/GatherPress/gatherpress/pull/883)
- PHPStan static analysis with 36 small bug fixes uncovered by the new gate. [#931](https://github.com/GatherPress/gatherpress/pull/931) [#938](https://github.com/GatherPress/gatherpress/pull/938)
- 100% unit-test coverage for the `Topic` class. [#932](https://github.com/GatherPress/gatherpress/pull/932)
- New WordPress.org README validation workflow. [#811](https://github.com/GatherPress/gatherpress/pull/811)
- New typo-checking workflow. [#824](https://github.com/GatherPress/gatherpress/pull/824)
- New automated image-compression workflow for screenshots. [#837](https://github.com/GatherPress/gatherpress/pull/837) [#914](https://github.com/GatherPress/gatherpress/pull/914)
- Migrate the screenshot workflow to playground/cli with multi-locale support. [#838](https://github.com/GatherPress/gatherpress/pull/838) [#892](https://github.com/GatherPress/gatherpress/pull/892)
- Conditionally render the featured image in event-notification emails. [#918](https://github.com/GatherPress/gatherpress/pull/918)
- Set `html` language attributes correctly on outbound emails. [#919](https://github.com/GatherPress/gatherpress/pull/919)
- Respect the user's locale and custom date/time formats in sent emails. [#922](https://github.com/GatherPress/gatherpress/pull/922)
- Allow escaped characters in user-defined date/time format strings. [#920](https://github.com/GatherPress/gatherpress/pull/920) [#637](https://github.com/GatherPress/gatherpress/pull/637)

### Changed
- Rename "REST API" class to "Event REST API" for clarity. [#864](https://github.com/GatherPress/gatherpress/pull/864)
- Replace "Open Street Maps" with "OpenStreetMap" throughout (typo prevention). [#881](https://github.com/GatherPress/gatherpress/pull/881) [#890](https://github.com/GatherPress/gatherpress/pull/890)
- Use the latest stable plugin version when generating screenshots (not `dev`). [#847](https://github.com/GatherPress/gatherpress/pull/847)
- Updated PHPCS rules and applied fixes. [#897](https://github.com/GatherPress/gatherpress/pull/897)
- Hide alpha-plugin admin notice when installed via the branch-named zip. [#808](https://github.com/GatherPress/gatherpress/pull/808)
- Cleanup and remove outdated code. [#925](https://github.com/GatherPress/gatherpress/pull/925)

### Fixed
- Resolve race condition between Playground setup and Playwright start. [#905](https://github.com/GatherPress/gatherpress/pull/905)
- Fix Sidebar / Event / Venue panels opening behavior by default. [#935](https://github.com/GatherPress/gatherpress/pull/935)
- Fix focus on the message textarea after pressing the "Compose message" button. [#829](https://github.com/GatherPress/gatherpress/pull/829)
- Various GitHub Actions workflow fixes. [#813](https://github.com/GatherPress/gatherpress/pull/813) [#814](https://github.com/GatherPress/gatherpress/pull/814) [#817](https://github.com/GatherPress/gatherpress/pull/817) [#840](https://github.com/GatherPress/gatherpress/pull/840) [#843](https://github.com/GatherPress/gatherpress/pull/843)

## [0.30.0] - 2024-08-15

### Added
- OpenStreetMap support as an alternative to Google Maps. [#643](https://github.com/GatherPress/gatherpress/pull/643)
- Export & Import functionality. [#655](https://github.com/GatherPress/gatherpress/pull/655)
- WordPress Playground preview for the plugin (with pull-request preview support). [#664](https://github.com/GatherPress/gatherpress/pull/664) [#666](https://github.com/GatherPress/gatherpress/pull/666)
- "GatherPress Alpha" admin notice for users running pre-release builds. [#739](https://github.com/GatherPress/gatherpress/pull/739)
- New filter to filter events in the admin list table by venue. [#695](https://github.com/GatherPress/gatherpress/pull/695)
- URL encoding on "Add to calendar" links so titles with special characters survive. [#725](https://github.com/GatherPress/gatherpress/pull/725)
- Site-administrator notifications appear in multisite admin too. [#785](https://github.com/GatherPress/gatherpress/pull/785)
- Membership check includes a timezone check. [#672](https://github.com/GatherPress/gatherpress/pull/672)
- Test scripts for event scenarios. [#713](https://github.com/GatherPress/gatherpress/pull/713) [#721](https://github.com/GatherPress/gatherpress/pull/721)
- Multilingual screenshot generation via Playwright. [#783](https://github.com/GatherPress/gatherpress/pull/783)

### Changed
- Use the WordPress `comments` table for RSVPs instead of the custom RSVP table (foundation for later RSVP work). [#692](https://github.com/GatherPress/gatherpress/pull/692)
- Reflect changes to the venue term when a venue post gets deleted. [#731](https://github.com/GatherPress/gatherpress/pull/731)
- Update autoloader. [#733](https://github.com/GatherPress/gatherpress/pull/733)
- User documentation expanded. [#780](https://github.com/GatherPress/gatherpress/pull/780) [#781](https://github.com/GatherPress/gatherpress/pull/781) [#782](https://github.com/GatherPress/gatherpress/pull/782)
- Cleanup of language files / methods (handled via WordPress core mechanisms). [#718](https://github.com/GatherPress/gatherpress/pull/718)
- Don't load admin CSS/JS on every wp-admin request. [#654](https://github.com/GatherPress/gatherpress/pull/654)
- Limit when `admin_notices` render (skip REST requests). [#745](https://github.com/GatherPress/gatherpress/pull/745)
- Show admin notices in relevant spots and in multisite admin. [#785](https://github.com/GatherPress/gatherpress/pull/785)

### Fixed
- Fix multisite activation. [#685](https://github.com/GatherPress/gatherpress/pull/685)
- Fix max attendance edge cases. [#701](https://github.com/GatherPress/gatherpress/pull/701)
- Fix public requests of the shadow venue taxonomy. [#677](https://github.com/GatherPress/gatherpress/pull/677)
- Switch from `rewrite => false` to `publicly_queryable => false` on the venue taxonomy. [#678](https://github.com/GatherPress/gatherpress/pull/678)
- Fix venues label. [#788](https://github.com/GatherPress/gatherpress/pull/788)
- Fix venue context resolution. [#791](https://github.com/GatherPress/gatherpress/pull/791)
- Plugin preview is configured to use modern Admin UI. [#823](https://github.com/GatherPress/gatherpress/pull/823)

## [0.29.3] - 2024-06-27

### Fixed
- Fix render-file paths for wp.org review. [#706](https://github.com/GatherPress/gatherpress/pull/706)
- Update CLI to align with wp.org plugin guidelines. [#707](https://github.com/GatherPress/gatherpress/pull/707)
- Fix last render issue. [#710](https://github.com/GatherPress/gatherpress/pull/710)

## [0.29.2] - 2024-06-21

### Fixed
- Fix the max-attendance setting (it was not honored correctly). [#698](https://github.com/GatherPress/gatherpress/pull/698)

## [0.29.1] - 2024-06-11

### Fixed
- Fix table creation issue on multisite installs. [#679](https://github.com/GatherPress/gatherpress/pull/679)

## [0.29.0] - 2024-06-04

### Added
- RSVP guest feature returns (with configurable guest count). [#570](https://github.com/GatherPress/gatherpress/pull/570)
- Maximum attending limit at the event level. [#581](https://github.com/GatherPress/gatherpress/pull/581)
- User-format and timezone defaults pulled from WordPress core options. [#556](https://github.com/GatherPress/gatherpress/pull/556) [#617](https://github.com/GatherPress/gatherpress/pull/617)
- Decline-attendance flow that allows users to decline immediately. [#567](https://github.com/GatherPress/gatherpress/pull/567)
- Plugin banner images. [#580](https://github.com/GatherPress/gatherpress/pull/580)
- Allow the date- and time-format strings to contain escaped characters. [#637](https://github.com/GatherPress/gatherpress/pull/637)
- WP-CLI i18n tooling for translators. [#585](https://github.com/GatherPress/gatherpress/pull/585)
- WordPress.org plugin-guidelines check action. [#616](https://github.com/GatherPress/gatherpress/pull/616)
- Sanitize nonce checks. [#644](https://github.com/GatherPress/gatherpress/pull/644)
- Respect user locale across the UI. [#747](https://github.com/GatherPress/gatherpress/pull/747)
- Spanish translation update for v0.28 follow-up. [#594](https://github.com/GatherPress/gatherpress/pull/594)

### Changed
- Decouple and add user filters across the plugin so themes can override behavior. [#579](https://github.com/GatherPress/gatherpress/pull/579)
- Improve translations across multiple languages. [#588](https://github.com/GatherPress/gatherpress/pull/588)
- Updated `gatherpress_` prefix consistency. [#645](https://github.com/GatherPress/gatherpress/pull/645)
- Update "past" wording to "passed" where appropriate. [#642](https://github.com/GatherPress/gatherpress/pull/642)
- Bump blocks to bust admin cache on gatherpress.org. [#648](https://github.com/GatherPress/gatherpress/pull/648)
- Updated documentation re: publicly documenting filters. [#647](https://github.com/GatherPress/gatherpress/pull/647)

### Fixed
- Make online-link available after a user RSVPs attending. [#597](https://github.com/GatherPress/gatherpress/pull/597)
- Fix bug with guest settings. [#575](https://github.com/GatherPress/gatherpress/pull/575)
- Fix issue with default user-datetime fallback. [#576](https://github.com/GatherPress/gatherpress/pull/576)
- Fix RSVP Response block in FSE. [#578](https://github.com/GatherPress/gatherpress/pull/578)
- Fix SQL calls to use the `%i` placeholder. [#622](https://github.com/GatherPress/gatherpress/pull/622)
- Fix markup issue with a self-closing `<div>` tag. [#619](https://github.com/GatherPress/gatherpress/pull/619)
- Change default venue address; do not display the default address on the frontend. [#591](https://github.com/GatherPress/gatherpress/pull/591)
- Fix event-in-the-past link issue. [#661](https://github.com/GatherPress/gatherpress/pull/661)
- Fix language inconsistencies. [#590](https://github.com/GatherPress/gatherpress/pull/590)

### Security
- Disallow direct file access across all plugin PHP files. [#624](https://github.com/GatherPress/gatherpress/pull/624)

## [0.28.0] - 2024-02-19

### Added
- Anonymous RSVP option so attendees can opt out of being listed publicly. [#513](https://github.com/GatherPress/gatherpress/pull/513)
- Datetime caching for performance. [#518](https://github.com/GatherPress/gatherpress/pull/518)
- Datetime formatting on the Events List block. [#517](https://github.com/GatherPress/gatherpress/pull/517)
- RSVP form token field. [#522](https://github.com/GatherPress/gatherpress/pull/522)
- User-profile checkbox to opt in or out of event email notifications. [#531](https://github.com/GatherPress/gatherpress/pull/531)
- FSE compatibility for all blocks. [#529](https://github.com/GatherPress/gatherpress/pull/529)
- Repository docs: Code of Conduct, license declarations, repo templates, dependency review, WordPress version checker. [#500](https://github.com/GatherPress/gatherpress/pull/500) [#501](https://github.com/GatherPress/gatherpress/pull/501) [#502](https://github.com/GatherPress/gatherpress/pull/502) [#503](https://github.com/GatherPress/gatherpress/pull/503) [#504](https://github.com/GatherPress/gatherpress/pull/504) [#505](https://github.com/GatherPress/gatherpress/pull/505)
- WordPress.org deploy workflow. [#512](https://github.com/GatherPress/gatherpress/pull/512)
- E2E test login-flow assertion. [#509](https://github.com/GatherPress/gatherpress/pull/509)
- German (`de_*`) translations. [#543](https://github.com/GatherPress/gatherpress/pull/543)

### Changed
- Refactor localized data delivery. [#530](https://github.com/GatherPress/gatherpress/pull/530)
- Set anonymous RSVP to `false` by default. [#532](https://github.com/GatherPress/gatherpress/pull/532)
- Rename "attend" to "no_status" to better reflect default state. [#525](https://github.com/GatherPress/gatherpress/pull/525)
- Surface `settings_errors()` on the GatherPress settings template. [#520](https://github.com/GatherPress/gatherpress/pull/520)
- Spanish (v0.28) translation refresh. [#552](https://github.com/GatherPress/gatherpress/pull/552)
- French translation context for "not attending". [#541](https://github.com/GatherPress/gatherpress/pull/541) [#546](https://github.com/GatherPress/gatherpress/pull/546)
- Add Carsten Bach to project credits. [#553](https://github.com/GatherPress/gatherpress/pull/553)
- Remove leading underscores from event and venue meta keys (visibility cleanup). [#554](https://github.com/GatherPress/gatherpress/pull/554)

### Fixed
- Fix RSVP modal when the user is not logged in. [#533](https://github.com/GatherPress/gatherpress/pull/533)
- Make sure `textdomain` is loaded before registering post types. [#584](https://github.com/GatherPress/gatherpress/pull/584)

### Removed
- Revert PR #507's `get_formatted_datetime` optimization due to caching interaction. [#516](https://github.com/GatherPress/gatherpress/pull/516)

## [0.27.0] - 2024-01-22

Initial public release. Represents 18+ months of pre-1.0 development and ships the core feature set:

### Added
- Custom post types `gatherpress_event` and `gatherpress_venue` with REST API support.
- Event datetime handling with timezone support and a dedicated `gatherpress_events` database table.
- RSVP system with attending / not-attending / waiting-list states, max-attendance limits, and an attendees list.
- Venue management with name, address, phone, website, and embedded map.
- Online-event link handling (gated on RSVP state).
- "Add to calendar" links covering Google, iCal, Outlook, and Yahoo.
- Email functionality for site organizers to message attendees.
- Block library: Event Date, Venue, Online Event, Add to Calendar, Event List, Attendance Selector, Attendees, Modal, Dropdown.
- Event archive pages for upcoming and past events with configurable archive page assignments.
- Topic taxonomy for events.
- Settings UI under the Events admin menu, including roles and credits.
- WP-CLI integration.
- PHP 8.0 / 8.1 / 8.2 / 8.3 compatibility matrix.
- Initial unit test suite with code coverage via SonarCloud.
- Multilingual screenshots and i18n scaffolding.

[0.33.3]: https://github.com/GatherPress/gatherpress/compare/0.33.2...0.33.3
[0.33.2]: https://github.com/GatherPress/gatherpress/compare/0.33.1...0.33.2
[0.33.1]: https://github.com/GatherPress/gatherpress/compare/0.33.0...0.33.1
[0.33.0]: https://github.com/GatherPress/gatherpress/compare/0.32.3...0.33.0
[0.32.3]: https://github.com/GatherPress/gatherpress/compare/0.32.2...0.32.3
[0.32.2]: https://github.com/GatherPress/gatherpress/compare/0.32.1...0.32.2
[0.32.1]: https://github.com/GatherPress/gatherpress/compare/0.32.0...0.32.1
[0.32.0]: https://github.com/GatherPress/gatherpress/compare/0.31.0...0.32.0
[0.31.0]: https://github.com/GatherPress/gatherpress/compare/0.30.0...0.31.0
[0.30.0]: https://github.com/GatherPress/gatherpress/compare/0.29.3...0.30.0
[0.29.3]: https://github.com/GatherPress/gatherpress/compare/0.29.2...0.29.3
[0.29.2]: https://github.com/GatherPress/gatherpress/compare/0.29.1...0.29.2
[0.29.1]: https://github.com/GatherPress/gatherpress/compare/0.29.0...0.29.1
[0.29.0]: https://github.com/GatherPress/gatherpress/compare/0.28.0...0.29.0
[0.28.0]: https://github.com/GatherPress/gatherpress/compare/0.27.0...0.28.0
[0.27.0]: https://github.com/GatherPress/gatherpress/releases/tag/0.27.0
