Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: TryGhost/Ghost
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v6.0.0
Choose a base ref
...
head repository: TryGhost/Ghost
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v6.0.1
Choose a head ref
  • 19 commits
  • 38 files changed
  • 13 contributors

Commits on Aug 4, 2025

  1. 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)
    sagzy authored Aug 4, 2025
    Configuration menu
    Copy the full SHA
    042f4b9 View commit details
    Browse the repository at this point in the history
  2. 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
    sagzy authored Aug 4, 2025
    Configuration menu
    Copy the full SHA
    bee785d View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    7b749a4 View commit details
    Browse the repository at this point in the history
  4. 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.
    9larsons authored Aug 4, 2025
    Configuration menu
    Copy the full SHA
    47ff081 View commit details
    Browse the repository at this point in the history

Commits on Aug 5, 2025

  1. 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
    9larsons authored Aug 5, 2025
    Configuration menu
    Copy the full SHA
    95360cf View commit details
    Browse the repository at this point in the history
  2. 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.
    9larsons authored Aug 5, 2025
    Configuration menu
    Copy the full SHA
    9fad710 View commit details
    Browse the repository at this point in the history

Commits on Aug 6, 2025

  1. 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
    minimaluminium authored Aug 6, 2025
    Configuration menu
    Copy the full SHA
    7031edf View commit details
    Browse the repository at this point in the history
  2. 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.
    peterzimon authored Aug 6, 2025
    Configuration menu
    Copy the full SHA
    11c3074 View commit details
    Browse the repository at this point in the history
  3. 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.
    peterzimon authored Aug 6, 2025
    Configuration menu
    Copy the full SHA
    1f28fc1 View commit details
    Browse the repository at this point in the history
  4. 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
    kevinansfield committed Aug 6, 2025
    Configuration menu
    Copy the full SHA
    a499f6b View commit details
    Browse the repository at this point in the history

Commits on Aug 7, 2025

  1. 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>
    allouis and lsinger authored Aug 7, 2025
    Configuration menu
    Copy the full SHA
    ba8f457 View commit details
    Browse the repository at this point in the history
  2. 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
    sagzy authored Aug 7, 2025
    Configuration menu
    Copy the full SHA
    84287c4 View commit details
    Browse the repository at this point in the history
  3. 🌐 Updated French translations (all packages) (#24486)

    ref #23361
    
    ---------
    
    Co-authored-by: Cathy Sarisky <42299862+cathysarisky@users.noreply.github.com>
    matteorlt and cathysarisky authored Aug 7, 2025
    Configuration menu
    Copy the full SHA
    888ae06 View commit details
    Browse the repository at this point in the history
  4. 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
    kevinansfield authored Aug 7, 2025
    Configuration menu
    Copy the full SHA
    ae66b36 View commit details
    Browse the repository at this point in the history
  5. 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>
    peterzimon and 9larsons authored Aug 7, 2025
    Configuration menu
    Copy the full SHA
    6afe28c View commit details
    Browse the repository at this point in the history
  6. 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'.
    9larsons authored Aug 7, 2025
    Configuration menu
    Copy the full SHA
    97c5c34 View commit details
    Browse the repository at this point in the history
  7. 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) |
    [![age](https://developer.mend.io/api/mc/badges/age/npm/react-router/7.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
    |
    [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-router/7.7.1/7.8.0?slim=true)](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`
    ([#&#8203;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
    ([#&#8203;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
    ([#&#8203;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
    ([#&#8203;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
    ([#&#8203;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
    ([#&#8203;14113](https://redirect.github.com/remix-run/react-router/pull/14113))
    
    - Remove dependency on `@types/node` in TypeScript declaration files
    ([#&#8203;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`
    ([#&#8203;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
    ([#&#8203;14078](https://redirect.github.com/remix-run/react-router/pull/14078))
    
    - \[UNSTABLE] Propagate returned Response from server middleware if next
    wasn't called
    ([#&#8203;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`
    ([#&#8203;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
    ([#&#8203;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.
    ([#&#8203;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`
    ([#&#8203;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
    ([#&#8203;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
    ([#&#8203;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
    ([#&#8203;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
    ([#&#8203;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
    ([#&#8203;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 />`
    ([#&#8203;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>
    renovate[bot] authored Aug 7, 2025
    Configuration menu
    Copy the full SHA
    7618a23 View commit details
    Browse the repository at this point in the history

Commits on Aug 8, 2025

  1. 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
    ibalosh authored Aug 8, 2025
    Configuration menu
    Copy the full SHA
    4314c38 View commit details
    Browse the repository at this point in the history
  2. v6.0.1

    github-actions[bot] committed Aug 8, 2025
    Configuration menu
    Copy the full SHA
    b18c99e View commit details
    Browse the repository at this point in the history
Loading