-
-
Notifications
You must be signed in to change notification settings - Fork 11k
Comparing changes
Open a pull request
base repository: TryGhost/Ghost
base: v6.0.0
head repository: TryGhost/Ghost
compare: v6.0.1
- 19 commits
- 38 files changed
- 13 contributors
Commits on Aug 4, 2025
-
Updated help link in Network Settings (#24597)
no issue - Social web help docs now have a specific section to explain domain restrictions (custom domain required, subdirectory not supported)
Configuration menu - View commit details
-
Copy full SHA for 042f4b9 - Browse repository at this point
Copy the full SHA 042f4b9View commit details -
Fixed upgrade popup being rendered one newsletter too early (#24573)
ref https://linear.app/ghost/issue/BAE-494 - Previously: given a Ghost site with e.g. a limit of 3 max. newsletters, a popup to upgrade would appear in the middle of creating newsletter 3 - Now: the popup to upgrade only appears when attempting to add newsletter 4
Configuration menu - View commit details
-
Copy full SHA for bee785d - Browse repository at this point
Copy the full SHA bee785dView commit details -
Configuration menu - View commit details
-
Copy full SHA for 7b749a4 - Browse repository at this point
Copy the full SHA 7b749a4View commit details -
Fixed ghost_head erroring on missing context (#24598)
ref https://ghost.slack.com/archives/CJBJ3MZFD/p1754319214934039?thread_ts=1754317131.975229&cid=CJBJ3MZFD If the context prop was not set on dataRoot, it was possible for ghost_head to error loading and serve a 422, rather than failing to serve the page.
Configuration menu - View commit details
-
Copy full SHA for 47ff081 - Browse repository at this point
Copy the full SHA 47ff081View commit details
Commits on Aug 5, 2025
-
Fixed newsletter metric display in Analytics > Top Posts (#24601)
ref https://linear.app/ghost/issue/PROD-2386/post-newsletter-analytics-hover-doesnt-respect-one-flag-disabled ref #24599 - updated display logic in Top Posts Building on the other PR (see ref), this updates the Newsletter analytics column in the Top Posts component. Logic is very similar to the Posts List column, except there's one fewer column in Top Posts, as there's less horizontal space here. Column display: - Hidden if no post email data - Show open rate if open rate tracking enabled - Show click rate if open rate tracking disabled *and* click rate tracking enabled - Show sent count if open rate tracking and click rate tracking are disabled Tooltip: - Always display Sent count - Display click count if click tracking enabled - Display open rate if open rate enabled
Configuration menu - View commit details
-
Copy full SHA for 95360cf - Browse repository at this point
Copy the full SHA 95360cfView commit details -
Fixed posts list newsletter analytics hover logic (#24599)
ref https://linear.app/ghost/issue/PROD-2386/post-newsletter-analytics-hover-doesnt-respect-one-flag-disabled - updated show/hide logic to respect settings for clicks/opens - added fallback to sent when both clicks+opens disabled W/r to the issue, this fixes the logic in the Posts List component. I'll tackle the Top Posts updates separately. The logic is as follows, for posts with email data: - Show clicks column if click tracking enabled - Show open column is open tracking enabled - Show sent column if open tracking and click tracking are disabled Tooltip behavior should respect the settings as well: - Sent always shown - Clicks shown if click tracking enabled - Opens shown if open tracking enabled The idea here is that Sent data should always be shown, and the other two should only be shown if the corresponding setting is enabled. There's some slight differences here with number of columns vs. Top Posts which is why I'm separating it out, as that component has less horizontal space to work with.
Configuration menu - View commit details
-
Copy full SHA for 9fad710 - Browse repository at this point
Copy the full SHA 9fad710View commit details
Commits on Aug 6, 2025
-
Fixed profile navigation and data consistency issues in ActivityPub (#…
…24610) ref PROD-2409 - Resolved data staleness by refetching profile information when navigating between profiles - Reset tab selection to "Posts" when visiting a new profile - Ensured followers, following counts, descriptions, and images are always current
Configuration menu - View commit details
-
Copy full SHA for 7031edf - Browse repository at this point
Copy the full SHA 7031edfView commit details -
Fixed position of member metric for latest post (#24363)
ref https://linear.app/ghost/issue/ENG-2455/fix-position-of-member-metric-on-latest-posts - The member metric (ie. no. of new members the post generated) in the Latest post section on Analytics overview had to be positioned as the last item, if the post [has been sent as an email] and [there's no web analytics data (email-only post) or web analytics is turned off] — the reason for this is purely aesthetical: in this case it looks better if the member metric appears in the 2nd row of the grid. The current condition had not contained the first part ("has been sent as an email"), this PR added it.
Configuration menu - View commit details
-
Copy full SHA for 11c3074 - Browse repository at this point
Copy the full SHA 11c3074View commit details -
Improved typography and layout of trend tooltips (#24612)
ref https://linear.app/ghost/issue/ENG-2456/add-max-width-and-text-pretty-to-tooltips-on-overview - The tooltip over the trend values in Analytics overview KPIs were too wide (covering the "View more" button) and it could have widows in certain cases. This PR sets a max width for the tooltip.
Configuration menu - View commit details
-
Copy full SHA for 1f28fc1 - Browse repository at this point
Copy the full SHA 1f28fc1View commit details -
Fixed import emails not sending after members/db import with integrat…
…ion auth no issue - the syntax used for fetching owner email as a fallback when `frame.user` is missing (as is the case with integration auth) was incorrectly calling `.get('email')` immediately on the Promise returned by `.getOwnerUser()` rather than waiting for that promise to resolve, this meant the email send was erroring due to a missing `to` parameter - fixed all instances of incorrect await syntax when using `User.getOwnerUser()` and added tests to confirm expected behaviour
Configuration menu - View commit details
-
Copy full SHA for a499f6b - Browse repository at this point
Copy the full SHA a499f6bView commit details
Commits on Aug 7, 2025
-
Specified why we need to test on staging (#23325)
In an engineering meeting on 4th December 2024 we discussed that performance on our local machines is not comparable to a production environment, the outcome of this meeting was an agreement that we would test migrations on staging (or production-like environment) in order to understand the performance qualities. --------- Co-authored-by: Leif Singer <github.2017@singer.sh>
Configuration menu - View commit details
-
Copy full SHA for ba8f457 - Browse repository at this point
Copy the full SHA ba8f457View commit details -
Updated ActivityPub default error screen to redirect to the new homep…
…age (#24620) closes https://linear.app/ghost/issue/PROD-2414 - in Ghost 6.0, the new Admin homepage is /analytics, as opposed to the previous /dashboard
Configuration menu - View commit details
-
Copy full SHA for 84287c4 - Browse repository at this point
Copy the full SHA 84287c4View commit details -
🌐 Updated French translations (all packages) (#24486)
ref #23361 --------- Co-authored-by: Cathy Sarisky <42299862+cathysarisky@users.noreply.github.com>
Configuration menu - View commit details
-
Copy full SHA for 888ae06 - Browse repository at this point
Copy the full SHA 888ae06View commit details -
Re-enabled Renovate automerge (#24628)
reverts commit 239d6c0. - code-freeze for the 6.0 major is over, we can allow renovate to automatically merge passing PRs again
Configuration menu - View commit details
-
Copy full SHA for ae66b36 - Browse repository at this point
Copy the full SHA ae66b36View commit details -
Added clickthrough from post analytics to members (#24624)
ref https://linear.app/ghost/issue/PROD-2353/add-links-to-filter-members-by-opens-clicks-from-post-newsletter-page - Customers were missing the ability to filter members who received, clicked or opened emails + who signed up, directly from the post analytics Newsletter & Growth tabs. --------- Co-authored-by: Steve Larson <9larsons@gmail.com>
Configuration menu - View commit details
-
Copy full SHA for 6afe28c - Browse repository at this point
Copy the full SHA 6afe28cView commit details -
Added redirect from Ember Dashboard to new Analytics page (#24613)
ref https://linear.app/ghost/issue/PROD-2415/add-redirect-for-dashboard-analytics - added redirect from Dashboard -> Analytics This change helps preserve existing user bookmarks by simply pushing them towards the 'new dashboard'.
Configuration menu - View commit details
-
Copy full SHA for 97c5c34 - Browse repository at this point
Copy the full SHA 97c5c34View commit details -
Update dependency react-router to v7.8.0 (#24632)
This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [react-router](https://redirect.github.com/remix-run/react-router) ([source](https://redirect.github.com/remix-run/react-router/tree/HEAD/packages/react-router)) | [`7.7.1` -> `7.8.0`](https://renovatebot.com/diffs/npm/react-router/7.7.1/7.8.0) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>remix-run/react-router (react-router)</summary> ### [`v7.8.0`](https://redirect.github.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#780) [Compare Source](https://redirect.github.com/remix-run/react-router/compare/react-router@7.7.1...react-router@7.8.0) ##### Minor Changes - Add `nonce` prop to `Links` & `PrefetchPageLinks` ([#​14048](https://redirect.github.com/remix-run/react-router/pull/14048)) - Add `loaderData` arguments/properties alongside existing `data` arguments/properties to provide consistency and clarity between `loaderData` and `actionData` across the board ([#​14047](https://redirect.github.com/remix-run/react-router/pull/14047)) - Updated types: `Route.MetaArgs`, `Route.MetaMatch`, `MetaArgs`, `MetaMatch`, `Route.ComponentProps.matches`, `UIMatch` - `@deprecated` warnings have been added to the existing `data` properties to point users to new `loaderData` properties, in preparation for removing the `data` properties in a future major release ##### Patch Changes - Prevent *"Did not find corresponding fetcher result"* console error when navigating during a `fetcher.submit` revalidation ([#​14114](https://redirect.github.com/remix-run/react-router/pull/14114)) - Bubble client-side middleware errors prior to `next` to the appropriate ancestor error boundary ([#​14138](https://redirect.github.com/remix-run/react-router/pull/14138)) - Switch Lazy Route Discovery manifest URL generation to usea standalone `URLSearchParams` instance instead of `URL.searchParams` to avoid a major performance bottleneck in Chrome ([#​14084](https://redirect.github.com/remix-run/react-router/pull/14084)) - Adjust internal RSC usage of `React.use` to avoid Webpack compilation errors when using React 18 ([#​14113](https://redirect.github.com/remix-run/react-router/pull/14113)) - Remove dependency on `@types/node` in TypeScript declaration files ([#​14059](https://redirect.github.com/remix-run/react-router/pull/14059)) - Fix types for `UIMatch` to reflect that the `loaderData`/`data` properties may be `undefined` ([#​12206](https://redirect.github.com/remix-run/react-router/pull/12206)) - When an `ErrorBoundary` is being rendered, not all active matches will have loader data available, since it may have been their `loader` that threw to trigger the boundary - The `UIMatch.data` type was not correctly handing this and would always reflect the presence of data, leading to the unexpected runtime errors when an `ErrorBoundary` was rendered -
⚠️ This may cause some type errors to show up in your code for unguarded `match.data` accesses - you should properly guard for `undefined` values in those scenarios. ```tsx // app/root.tsx export function loader() { someFunctionThatThrows(); // ❌ Throws an Error return { title: "My Title" }; } export function Layout({ children }: { children: React.ReactNode }) { let matches = useMatches(); let rootMatch = matches[0] as UIMatch<Awaited<ReturnType<typeof loader>>>; // ^ rootMatch.data is incorrectly typed here, so TypeScript does not // complain if you do the following which throws an error at runtime: let { title } = rootMatch.data; // 💥 return <html>...</html>; } ``` - \[UNSTABLE] Ensure resource route errors go through `handleError` w/middleware enabled ([#​14078](https://redirect.github.com/remix-run/react-router/pull/14078)) - \[UNSTABLE] Propagate returned Response from server middleware if next wasn't called ([#​14093](https://redirect.github.com/remix-run/react-router/pull/14093)) - \[UNSTABLE] Allow server middlewares to return `data()` values which will be converted into a `Response` ([#​14093](https://redirect.github.com/remix-run/react-router/pull/14093)) - \[UNSTABLE] Update middleware error handling so that the `next` function never throws and instead handles any middleware errors at the proper `ErrorBoundary` and returns the `Response` up through the ancestor `next` function ([#​14118](https://redirect.github.com/remix-run/react-router/pull/14118)) - \[UNSTABLE] When middleware is enabled, make the `context` parameter read-only (via `Readonly<unstable_RouterContextProvider>`) so that TypeScript will not allow you to write arbitrary fields to it in loaders, actions, or middleware. ([#​14097](https://redirect.github.com/remix-run/react-router/pull/14097)) - \[UNSTABLE] Rename and alter the signature/functionality of the `unstable_respond` API in `staticHandler.query`/`staticHandler.queryRoute` ([#​14103](https://redirect.github.com/remix-run/react-router/pull/14103)) - The API has been renamed to `unstable_generateMiddlewareResponse` for clarity - The main functional change is that instead of running the loaders/actions before calling `unstable_respond` and handing you the result, we now pass a `query`/`queryRoute` function as a parameter and you execute the loaders/actions inside your callback, giving you full access to pre-processing and error handling - The `query` version of the API now has a signature of `(query: (r: Request) => Promise<StaticHandlerContext | Response>) => Promise<Response>` - The `queryRoute` version of the API now has a signature of `(queryRoute: (r: Request) => Promise<Response>) => Promise<Response>` - This allows for more advanced usages such as running logic before/after calling `query` and direct error handling of errors thrown from query -⚠️ This is a breaking change if you've adopted the `staticHandler` `unstable_respond` API ```tsx let response = await staticHandler.query(request, { requestContext: new unstable_RouterContextProvider(), async unstable_generateMiddlewareResponse(query) { try { // At this point we've run middleware top-down so we need to call the // handlers and generate the Response to bubble back up the middleware let result = await query(request); if (isResponse(result)) { return result; // Redirects, etc. } return await generateHtmlResponse(result); } catch (error: unknown) { return generateErrorResponse(error); } }, }); ``` - \[UNSTABLE] Convert internal middleware implementations to use the new `unstable_generateMiddlewareResponse` API ([#​14103](https://redirect.github.com/remix-run/react-router/pull/14103)) - \[UNSTABLE] Change `getLoadContext` signature (`type GetLoadContextFunction`) when `future.unstable_middleware` is enabled so that it returns an `unstable_RouterContextProvider` instance instead of a `Map` used to contruct the instance internally ([#​14097](https://redirect.github.com/remix-run/react-router/pull/14097)) - This also removes the `type unstable_InitialContext` export -⚠️ This is a breaking change if you have adopted middleware and are using a custom server with a `getLoadContext` function - \[UNSTABLE] Run client middleware on client navigations even if no loaders exist ([#​14106](https://redirect.github.com/remix-run/react-router/pull/14106)) - \[UNSTABLE] Change the `unstable_getContext` signature on `RouterProvider`/`HydratedRouter`/`unstable_RSCHydratedRouter` so that it returns an `unstable_RouterContextProvider` instance instead of a `Map` used to contruct the instance internally ([#​14097](https://redirect.github.com/remix-run/react-router/pull/14097)) -⚠️ This is a breaking change if you have adopted the `unstable_getContext` prop - \[UNSTABLE] proxy server action side-effect redirects from actions for document and callServer requests ([#​14131](https://redirect.github.com/remix-run/react-router/pull/14131)) - \[UNSTABLE] Fix RSC Data Mode issue where routes that return `false` from `shouldRevalidate` would be replaced by an `<Outlet />` ([#​14071](https://redirect.github.com/remix-run/react-router/pull/14071)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - Between 05:00 PM and 11:59 PM, only on Friday ( * 17-23 * * 5 ), Only on Sunday and Saturday ( * * * * 0,6, ), Between 12:00 AM and 12:59 PM, only on Monday ( * 0-12 * * 1 ) (UTC). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/TryGhost/Ghost). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS41MS4xIiwidXBkYXRlZEluVmVyIjoiNDEuNTEuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>Configuration menu - View commit details
-
Copy full SHA for 7618a23 - Browse repository at this point
Copy the full SHA 7618a23View commit details
Commits on Aug 8, 2025
-
Added the initial ADR document (#24627)
* Added ADR documents, in order to improve test code quality and consistency, which help * to document important test-related decisions with reasoning * to Improve long-term clarity and team alignment * to establish consistent guidelines how to write tests
Configuration menu - View commit details
-
Copy full SHA for 4314c38 - Browse repository at this point
Copy the full SHA 4314c38View commit details -
Configuration menu - View commit details
-
Copy full SHA for b18c99e - Browse repository at this point
Copy the full SHA b18c99eView commit details
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff v6.0.0...v6.0.1