TL;DR
Ghost v4.39.0 introduces multiple tiers support, allowing site owners to create and manage different membership tiers with individual welcome pages and visibility settings. This release also enhances member filtering with new options like "Name", "Email", and "Last seen" filters, adds "contains" operator support to query parameters, and includes redesigned user authentication pages. Several bugs have been fixed, including issues with file imports, tag creation, and theme previews.
Highlight of the Release
- Multiple membership tiers support is now generally available
- Enhanced member filtering with Name, Email, and Last seen filters
- New "contains" operator support for API query parameters
- Redesigned user authentication pages
- Updated fixtures for easier onboarding
Migration Guide
Tier Visibility Changes
The release migrates from using portal_products and portal_plans settings to using the visibility property directly on tiers. This change is handled automatically through migrations, but if you've built custom integrations that rely on these settings, you'll need to update them to use the tier visibility property instead.
API Path Changes
The API base path has been centralized across the server codebase. If you have custom code that interacts with Ghost's API paths, you might need to review it to ensure compatibility.
Stripe Product Naming
A migration has been added to rename any Stripe Products from "Default Product" to the site title. This should happen automatically, but if you notice any issues with your Stripe products, you may need to check their names.
NQL Library Update
Ghost has switched from @nexes/nql to @tryghost/nql and bumped @tryghost/bookshelf-plugins to get access to the latest NQL version. If you're using custom filtering in your integrations, be aware of the new operators available.
Upgrade Recommendations
This is a feature-rich release with significant enhancements to Ghost's membership capabilities. The introduction of multiple tiers support represents a major improvement for site owners looking to diversify their membership offerings.
Who should upgrade immediately:
- Site owners who want to offer multiple membership tiers
- Those experiencing issues with tag creation or content imports
- Anyone who needs the enhanced member filtering capabilities
Upgrade difficulty: Medium
The upgrade process should be straightforward for most users, as the migrations for tier visibility changes are handled automatically. However, if you have custom integrations or themes that interact with membership features, you may need to test them after upgrading.
Testing recommendation:
- Test your membership flows after upgrading
- Verify that existing tiers and members are correctly migrated
- If you use custom filtering in the API, test with the new operators
- Check that your theme correctly displays multiple tiers if applicable
Bug Fixes
Fixed Content Import Issues
- Fixed uppercase file extensions being ignored in content import
- Fixed error handling when a zip combines multiple data formats
- Added missing length check in getBaseDirectory
Fixed Tag Management
- Fixed duplicate tags being created when slugs contain spaces
- Fixed tag slug cleaning process before matching with existing tags
Fixed UI and Theme Issues
- Fixed "Must be in the past" error when closing and re-opening publish menu while scheduling
- Fixed Casper preview in theme directory showing an older version
- Fixed theme activation with capitalized names
Fixed API and Data Issues
- Fixed members endpoint not ignoring unknown includes
- Fixed error when editing user with empty roles data
- Fixed default value for Tier visibility
- Fixed new sites using "Default Product" Tier name
New Features
Multiple Tiers Support
Ghost now supports creating and managing multiple membership tiers, allowing site owners to offer different subscription options to their audience. Each tier can have its own:
- Individual welcome page
- Visibility settings for portal and themes
- Custom benefits
Enhanced Member Filtering
- Added "Name" and "Email" filters to the members screen
- Added "Last seen" filter to the members screen
- These filtering options are now generally available without requiring feature flags
New Query Parameter Operators
Added "contains" operator support to ?filter= query parameters with multiple variations:
:~'string' - contains
:-~'string' - does not contain
:~^'string' - starts with
:-~^'string' - does not start with
:~$'string' - ends with
:-~$'string' - does not end with
- Support for escaping quotes in strings, e.g.,
'O\'Nolan'
Redesigned Authentication Pages
- Updated password protection page with improved layout
- Redesigned user authentication pages for better user experience
- Updated unsubscribe page
Security Updates
No significant security fixes were mentioned in this release.
Performance Improvements
Improved Error Handling
- Improved error display in Sentry for theme responses
- Re-throw error when attempting to create webhooks to ensure proper error propagation
Optimized Image Processing
- Enabled fetching
.ico dimension size via probe-image-size instead of downloading the entire image
- Updated
probe-image-size options to reflect underlying library changes from request to needle
Code Optimization
- Centralized base API path value across server codebase for better maintainability
- Changed c8 reporter from html to html-spa for more useful coverage reports
- Configured CI to only calculate coverage for recommended Node version
- Cleaned up multiple loops in onSaving of Post model
Impact Summary
Ghost v4.39.0 marks a significant evolution in Ghost's membership capabilities with the introduction of multiple tiers support. This feature allows site owners to create different membership levels with customized welcome pages and visibility settings, enabling more sophisticated monetization strategies.
The release also enhances the member management experience with improved filtering options, making it easier to segment and target specific member groups. The addition of the "contains" operator for API queries provides developers with more powerful and flexible ways to retrieve data.
User experience improvements are evident in the redesigned authentication pages and updated fixtures that make getting started with Ghost more intuitive. Several bug fixes address issues with content imports, tag creation, and theme previews, improving overall platform stability.
For developers, the centralization of API paths and improved error handling enhance the maintainability and reliability of custom integrations. The migration from settings-based visibility control to tier-based properties represents a more logical and scalable approach to managing membership offerings.
Overall, this release significantly enhances Ghost's capabilities as a membership platform while improving usability for both site owners and developers.
Full Release Notes
- ✨ Added support for multiple tiers (#14311) - Rishabh Garg
- ✨ Added "Name" and "Email" filters to members screen - Kevin Ansfield
- ✨ Added "contains" operator support to
?filter= query params (#14286) - Kevin Ansfield
- ✨ Added "Last seen" filter to members screen - Kevin Ansfield
- 🎨 Redesigned user authentication pages (TryGhost/Admin#2286) - Sanne de Vries
- 💡 Updated fixtures to make it easier to get started (#14299) - Matt Hanley
- 🐛 Fixed "Must be in the past" error when closing and re-opening publish menu whilst scheduling - Kevin Ansfield
- 🐛 Fixed uppercase file extensions ignored in content import (#14268) - Simon Backx
- 🐛 Fixed duplicate tags created when slugs contain spaces (#14277) - Simon Backx
- 🐛 Fixed Casper preview in theme directory showing an older version - Kevin Ansfield
View the changelogs for full details:
🪄 Love open source? We're hiring Node.js Engineers to work on Ghost full-time