This release includes 1 breaking change for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+8 more
Affected surfaces
ReleasePort's take
Light signalThe release consolidates @usertour/ui packages and fixes several UI bugs; it also removes the insecure default ENCRYPTION_KEY fallback.
Why it matters: All operators must explicitly set ENCRYPTION_KEY before upgrading, avoiding a security regression that affects deployments using the previous insecure development key.
Summary
AI summaryUI hardening for viewer role, soft‑deleted content handling, and @usertour/ui consolidation.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Breaking | High |
Removes the insecure 'development-key-not-secure' fallback for ENCRYPTION_KEY; operators must set the env var explicitly. Removes the insecure 'development-key-not-secure' fallback for ENCRYPTION_KEY; operators must set the env var explicitly. Source: llm_adapter@2026-05-28 Confidence: high |
— |
| Feature | Low |
Collapses 38 @usertour/ui component packages into a single package per ADR 0004. Collapses 38 @usertour/ui component packages into a single package per ADR 0004. Source: llm_adapter@2026-05-28 Confidence: high |
— |
| Feature | Low |
Viewer‑role members see a clean read‑only list without row checkboxes or bulk‑action buttons on users/companies tables. Viewer‑role members see a clean read‑only list without row checkboxes or bulk‑action buttons on users/companies tables. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Feature | Low |
User/company filter‑save dialogs have aligned double‑submit and view‑only guards across surfaces. User/company filter‑save dialogs have aligned double‑submit and view‑only guards across surfaces. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Feature | Low |
Sessions tied to deleted content display a "Deleted" badge on user‑detail Sessions tab and session‑detail page for historical analytics. Sessions tied to deleted content display a "Deleted" badge on user‑detail Sessions tab and session‑detail page for historical analytics. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Bugfix | Medium |
Removes hardcoded English literals; UI strings now flow through i18n for non‑English users. Removes hardcoded English literals; UI strings now flow through i18n for non‑English users. Source: llm_adapter@2026-05-28 Confidence: high |
— |
| Bugfix | Medium |
Eliminates duplicate DOM id="date" in DateRangePicker instances on content analytics page. Eliminates duplicate DOM id="date" in DateRangePicker instances on content analytics page. Source: llm_adapter@2026-05-28 Confidence: high |
— |
| Bugfix | Medium |
Shows error toast when saving SegmentEditDialog with missing segment ID instead of dead‑buttoning. Shows error toast when saving SegmentEditDialog with missing segment ID instead of dead‑buttoning. Source: llm_adapter@2026-05-28 Confidence: high |
— |
| Bugfix | Medium |
Corrects bulk delete/remove toast to display confirmed selection count when server returns nullable count. Corrects bulk delete/remove toast to display confirmed selection count when server returns nullable count. Source: llm_adapter@2026-05-28 Confidence: high |
— |
| Bugfix | Medium |
Prevents misattribution of post‑save refetch failure as "save failed" in useSaveCompanySegmentFilter. Prevents misattribution of post‑save refetch failure as "save failed" in useSaveCompanySegmentFilter. Source: llm_adapter@2026-05-28 Confidence: high |
— |
| Bugfix | Low |
Segment rename dialog no longer refetches segment list on Cancel/Escape, preventing table flashes. Segment rename dialog no longer refetches segment list on Cancel/Escape, preventing table flashes. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Bugfix | Low |
Selecting a row on a MANUAL segment in the companies page no longer triggers an error boundary. Selecting a row on a MANUAL segment in the companies page no longer triggers an error boundary. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
| Bugfix | Low |
Content detail pages render a "404 / This content has been deleted" placeholder for soft‑deleted flows/checklists etc. Content detail pages render a "404 / This content has been deleted" placeholder for soft‑deleted flows/checklists etc. Source: granite4.1:30b@2026-05-28-audit Confidence: low |
— |
Full changelog
Hardens the segments / users / companies surface and lands a workspace-wide UI package consolidation.
✨ Highlights
- Viewer-role members get a clean read-only list. Row checkboxes and bulk-action buttons (add to manual segment, remove, delete) no longer appear on the users / companies tables for viewer-role accounts — no more grey buttons or fake affordances they can't act on.
- Segment dialogs settle down. The rename dialog no longer refetches the segment list on Cancel / Escape (used to flash the table); selecting a row on a MANUAL segment on the companies page no longer hits the error boundary; double-submit and view-only guards aligned across the user / company filter-save dialogs.
- Soft-deleted content surfaces correctly. The content detail page renders a "404 / This content has been deleted" placeholder instead of going blank for deleted flows / checklists / etc. Sessions tied to deleted content now carry a "Deleted" badge on the user-detail Sessions tab and the session-detail page so historical analytics stay legible.
- @usertour/ui consolidation (ADR 0004). The 38 per-component packages under packages/components// (button, dialog, popover, ...) collapse into a single @usertour/ui aligned with shadcn's single-directory convention. @usertour/frame is kept standalone so the embedded SDK / widget bundles stay unaffected — SDK usertour.js is byte-identical to the v0.8.2 build. See docs/adr/0004 for the full migration story.
🐛 Fixes
- Non-English users no longer see hardcoded English literals from shared UI primitives — date-range picker presets, locale selector
placeholders, and content-loading spinner messages now flow through i18n. - Two DateRangePicker instances on the content analytics page (header + tooltip-target-missing dialog) no longer share a duplicate DOM id="date" — axe / lighthouse no longer flag the a11y violation.
- SegmentEditDialog's Save with a missing segment id now surfaces an error toast instead of silently dead-buttoning.
- Bulk delete / remove toasts no longer render "0 users deleted" on a successful action when the server's count field comes back nullable — falls back to the confirmed selection count.
- useSaveCompanySegmentFilter no longer misattributes a post-save refetch failure as "save failed".
- ENCRYPTION_KEY is wired through config and the in-service 'development-key-not-secure' fallback is removed — operators must set the env var explicitly (production deployments unaffected).
Full Changelog: https://github.com/usertour/usertour/compare/v0.8.2...v0.8.3
Breaking Changes
- ENCRYPTION_KEY environment variable is now required; the 'development-key-not-secure' fallback has been removed.
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
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
Related context
Related tools
Earlier breaking changes
- v0.7.5 All 60 workspace packages move to @usertour/* from @usertour-packages/*
Beta — feedback welcome: [email protected]