Skip to content

usertour

v0.8.4 Breaking

This release includes 2 breaking changes for platform teams planning a safe upgrade.

βœ“ No known CVEs patched
Read the diff β†’ Tool health β†’ What is this tool? β†’

✓ No known CVEs patched in this version

Topics

announcements appcues chameleon checklist in-app nps
+8 more
onboarding pendo surveys tooltips tour userflow userpilot walkme

ReleasePort's take

Light signal
editorial:auto 4d

Version v0.8.4 replaces the React‑Context data layer with Apollo's normalized cache and hooks, fixes mutation failures caused by stripped `__typename` tags, adds cursor‑pagination for several tables, improves UI stability during restores/edits, and shows explicit "not found" pages for stale URLs.

Why it matters: Addresses a critical refactor of the data layer (impacting web app performance) and fixes mutation handling that previously failed due to missing `__typename`; introduces unified pagination affecting multiple entities; enhances UI reliability and user experience with clearer error responses.

Summary

AI summary

Updates πŸ› Fixes, cache, and cache-and-network across a mixed release.

Changes in this release

Feature Medium

Unified cursor‑pagination engine for Users, Companies, Sessions, and Analytics tables.

Unified cursor‑pagination engine for Users, Companies, Sessions, and Analytics tables.

Source: llm_adapter@2026-05-30

Confidence: high

β€”
Feature Medium

Content detail page and theme builder stop flashing during restores or edits.

Content detail page and theme builder stop flashing during restores or edits.

Source: llm_adapter@2026-05-30

Confidence: high

β€”
Feature Medium

Explicit "not found" pages shown for stale or invalid detail URLs.

Explicit "not found" pages shown for stale or invalid detail URLs.

Source: llm_adapter@2026-05-30

Confidence: high

β€”
Feature Low

Live, consistent data across the workspace via normalized Apollo cache.

Live, consistent data across the workspace via normalized Apollo cache.

Source: granite4.1:30b@2026-05-30-audit

Confidence: low

β€”
Bugfix Medium

Mutations reusing a cached record no longer fail due to stripped `__typename` tag.

Mutations reusing a cached record no longer fail due to stripped `__typename` tag.

Source: llm_adapter@2026-05-30

Confidence: high

β€”
Bugfix Medium

Segment-filter "Save" button hides correctly after saving; no‑op edits stop re‑running queries.

Segment-filter "Save" button hides correctly after saving; no‑op edits stop re‑running queries.

Source: llm_adapter@2026-05-30

Confidence: high

β€”
Refactor Medium

Replaced React-Context data layer with Apollo normalized cache and hooks.

Replaced React-Context data layer with Apollo normalized cache and hooks.

Source: llm_adapter@2026-05-30

Confidence: high

β€”
Full changelog

This release rebuilds how the admin app fetches and caches server data β€” moving apps/web off its React-Context data layer onto Apollo's normalized cache and a set of focused hooks, and unifying every list's pagination behind shared primitives. For day-to-day use the wins are freshness and stability: a teammate's edits show up without a manual refresh, the content detail page and theme builder no longer flash or go stale after a save, and the users / companies / sessions tables share one consistent, race-free pager. Under the hood this retires roughly twenty server-state Contexts and consolidates the duplicated users/companies UI.

What's Changed

πŸ”„ Live, consistent data across the workspace

The admin app now reads through a normalized Apollo cache, so a mutation in one place updates every view showing the same record. Shared lists run cache-and-network, which means members of the same project see each other's edits without reloading.
Account email / profile changes, theme edits, and content updates now reflect immediately and in full.

✨ Content detail and theme builder stop flashing

Restoring a version or a publish-then-edit no longer blanks the content detail page mid-transition, and the theme builder reflects a theme edit the moment it saves instead of briefly showing the pre-edit state. The builder also stays mounted through background refetches rather than momentarily going blank.

πŸ“œ Unified, sturdier list pagination

Users, companies, sessions, and analytics tables now share one cursor-pagination engine. Clicking the pager faster than the network can respond no longer races into showing one page while the indicator reads the next, and bulk-deleting the rows on the last page no longer strands you on a page that no longer exists. The contents list moved to infinite scroll, and the "Load more" lists no longer collapse or double-fetch.

🚧 Explicit not-found pages

Opening a stale or invalid detail URL now shows a clear "not found" page instead of a silent blank screen.

πŸ› Fixes

  • Mutations that reuse a cached record no longer fail. Outgoing variables now strip the cache's __typename tag, which the server's input types had been rejecting.
  • The segment-filter "Save" button hides correctly after saving, and no-op edits stop re-running queries. Condition comparison now matches the server's JSON-equivalent form instead of in-memory key differences.

πŸ› οΈ Under the hood

The apps/web data layer was reorganised end-to-end; the sections above are the visible surface, here is the shape behind them:

  • Apollo InMemoryCache switched to normalized mode with per-mutation update(cache) callbacks. The app-wide default is no-cache, with an explicit SHARED_CACHE_QUERY_OPTIONS (cache-and-network) opt-in for shared lists and facade hooks. Recorded as ADR 0005 / 0006.
  • The server-state-in-Context anti-pattern is retired: ~20 Context providers deleted in favour of focused hooks, AppContext is now a thin facade over identity hooks, and the remaining raw useQuery / useMutation calls are wrapped in
    @usertour/hooks.
  • List pagination unified into three documented primitives β€” useCursorPagination (page buttons), useLoadMoreAccumulator (load-more), and a shared useCursorFetchMore request-side helper β€” with cache-level merge owned by typePolicy accumulators.
  • Users and companies UI deduplicated into shared components/segments/entity/* components.
  • apollo3-cache-persist dropped (in-memory cache only); the analytics session table's row-shared queries hoisted from per-row to per-table (~80 β†’ 3 observers); a lighter useShouldShowMadeWith reader replaces a three-query useSubscription on theme previews.

Full Changelog: https://github.com/usertour/usertour/compare/v0.8.3...v0.8.4

Breaking Changes

  • Retired ~20 server-state Context providers; apps/web must now use Apollo hooks (`useQuery`, `useMutation`) and the new shared pagination primitives.
  • Switched `InMemoryCache` to normalized mode with explicit opt‑in via `SHARED_CACHE_QUERY_OPTIONS`; existing code relying on unnormalized cache behavior may break.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track usertour

Get notified when new releases ship.

Sign up free

About usertour

Usertour is an open-source user onboarding platform. It allows you to create in-app product tours, checklists, and surveys in minutesβ€”effortlessly and with full control.The open-source alternative to Userflow and Appcues

All releases β†’

Related context

Earlier breaking changes

  • v0.8.3 Removes the insecure 'development-key-not-secure' fallback for ENCRYPTION_KEY; operators must set the env var explicitly.
  • v0.7.5 All 60 workspace packages move to @usertour/* from @usertour-packages/*

Beta — feedback welcome: [email protected]