TL;DR
Ghost v5.94.2: Bug Fixes and UI Improvements
This release focuses on fixing several critical bugs affecting member filtering, bookmark cards, and editor functionality. It also includes UI improvements for the Portal and ActivityPub integration, along with performance optimizations for the members API endpoint. These changes enhance stability and user experience across the platform while laying groundwork for future features.
Highlight of the Release
- Fixed member filtering for 'Unsubscribed from newsletter' filters that previously returned all members when multiple filters were used
- Added local revisions to the editor as a backstop against data loss
- Fixed bookmark card functionality to properly fetch and store icons and thumbnails locally
- Added a maximum limit of 100 for GET members admin endpoint to improve API performance
- Improved ActivityPub integration with reply functionality and UI enhancements
Migration Guide
GET Members API Endpoint Limit Change
The GET ghost/api/admin/members/ endpoint no longer supports the limit=all parameter. Any request with limit=all or a limit greater than 100 will only return up to 100 members per request.
Required Action: If your integration or custom code uses limit=all to retrieve all members, you must update your code to implement pagination. Use the page parameter along with limit to retrieve members in batches.
Example:
// Before
const allMembers = await api.members.browse({ limit: 'all' });
// After
let allMembers = [];
let page = 1;
let hasMore = true;
while (hasMore) {
const response = await api.members.browse({
limit: 100,
page: page
});
allMembers = allMembers.concat(response);
if (response.length < 100) {
hasMore = false;
} else {
page++;
}
}
This change aims to improve the performance and scalability of the API, especially for sites with large member databases.
Upgrade Recommendations
This release (v5.94.2) contains important bug fixes and performance improvements that benefit all Ghost installations. We recommend upgrading promptly, especially if you:
- Use member filtering with newsletter subscription status
- Work with bookmark cards in the editor
- Have experienced issues with the "Unsaved post" modal appearing after publishing
- Manage a large member database and use the GET members API endpoint
The upgrade process should be straightforward with no breaking changes for most users, except for the GET members API endpoint limit change which requires pagination implementation if you were previously using limit=all.
Priority: Medium
Urgency: Normal
Complexity: Low (standard upgrade process)
Bug Fixes
Member Management
- Fixed member filtering for "Unsubscribed from newsletter" filters that previously returned all members when multiple filters were used
- Removed safeguard around bulk deletion when multiple newsletter filters are in use, as the root problem has been fixed
Editor Issues
- Fixed "Unsaved post" modal incorrectly showing after publishing (reverted two commits)
- Fixed wrong breadcrumb and missing post status when starting a new post from analytics
- Fixed issue with bookmark card functionality to properly fetch and store icons and thumbnails locally
- Fixed duplicate oembed requests when adding bookmarks to the editor
UI and Navigation
- Fixed issue with comments UI styling and spacing
- Fixed avatars appearing stretched in replies for ActivityPub
- Fixed date storage for analytics job using SQLite (previously stored as Unix timestamps)
- Fixed post reply button behavior in ActivityPub integration
Error Reporting
- Fixed missing
extra context for Sentry report for editor 404
- Fixed "[Object]" appearing in Sentry log for unsaved-changes reason diff
- Filtered Sentry network breadcrumbs to reduce noise in error reports
New Features
ActivityPub Integration Enhancements
- Reply Functionality: Added the ability to reply to ActivityPub content with a dedicated reply box
- UI Improvements: Added "More" menu for feed items with options like "Delete" and "Copy link"
- User Experience: Implemented focus states, placeholder text, and success notifications for replies
- Data Management: Updated to use the new activities endpoint for better performance with paginated data
Analytics Improvements
- Data Consistency: Updated KPI pipe to fill missing data points in charts
- Terminology Clarification: Renamed "unique visitors" to "unique visits" for accuracy
- Filtering: Fixed audience filtering to properly update top metrics along with charts
Editor Enhancements
- Data Protection: Added local revisions stored in browser localStorage as protection against data loss
- Debugging: Added comprehensive logging of post state changes to help identify and fix editor issues
- Error Handling: Improved error messages to distinguish between deleted posts and editor crashes
Security Updates
No specific security fixes were mentioned in this release.
Performance Improvements
API Performance
- Added a maximum limit of 100 for GET members admin endpoint
- Previously, using
limit=all would return all members in a single request
- This change improves API response times and reduces server load for sites with large member bases
- Pagination must now be implemented to retrieve the complete list of members
ActivityPub Integration
- Updated ActivityPub app to utilize new activities endpoint
- Returns a paginated list of activities instead of all data at once
- Addresses issue where the inbox was returning up to 33MB of data
- Significantly improves loading times and reduces memory usage
Analytics Data Processing
- Updated KPI pipe to fill missing data points
- Implemented Clickhouse's WITH FILL feature to handle gaps in time series data
- Fixed bounce rate calculation to avoid generating nulls
- Results in smoother, more consistent chart displays
Error Logging
- Improved Sentry error reporting efficiency
- Removed large lexical objects from context that were being truncated anyway
- Added more targeted context data like diffs for lexical changes
- Filtered network breadcrumbs to reduce noise in error logs
Impact Summary
Ghost v5.94.2 delivers several important bug fixes and quality-of-life improvements across the platform. The most significant impact comes from fixing member filtering for newsletter unsubscribes, which previously returned incorrect results when using multiple filters. This ensures accurate member segmentation and targeting.
Performance improvements to the members API endpoint will benefit sites with large member databases by enforcing pagination, while the addition of local revisions to the editor provides an important safety net against data loss during editing sessions.
For international users, additional translations and fixes for missing i18n strings improve the experience for non-English installations. The ActivityPub integration continues to mature with new reply functionality and UI improvements, making the social features more robust.
Overall, this release focuses on stability, performance, and user experience refinements rather than introducing major new features, making it a recommended upgrade for all Ghost installations.
Full Release Notes
- 🎨 Wrapped missing i18n strings in portal (#21042) - Cathy Sarisky
- 🎨 Added a maximum limit of 100 for GET members admin endpoint (#20643) - Princi Vershwal
- 🐛 Fixed wrong breadcrumb and missing post status when starting new post from analytics - Kevin Ansfield
- 🐛 Fixed fetching and storing bookmark card icons and thumbnails (#21036) - Princi Vershwal
- 🐛 Fixed member filtering for "Unsubscribed from newsletter" filters (#20926) - Sag
View the changelog for full details: v5.94.1...v5.94.2