Releases: nextcloud/IntroVox
v1.7.0 - Transifex-ready language model + #17/#18 fixes
What's New in v1.7.0
Closes #17 (i18n design fixed to 6 languages) and #18 (l10n strings need adaptation before translation can start) — preparing IntroVox for the Nextcloud Transifex sync (docker-ci#938).
Conceptual change
Every Nextcloud-supported language is now automatically available to end users with auto-translated default tour content. Admins manage per-language overrides instead of opting languages in/out.
Added
- Language-override workflow in the admin Steps tab — searchable picker over the full NC language list; override only created on save.
- DefaultStepsService — single source of truth for built-in tour steps, consumed by both AdminController and ApiController.
Changed
- Wizard auto-translates via
$l->t()for every Transifex-supported language;/api/stepsreturns inline-translated defaults when no override exists. - Settings tab simplified — language checkbox grid removed.
- License/telemetry payload field rename:
enabledLanguages→languagesWithOverrides. - Documentation restructured (
docs/admin/language-management.mdrewritten for the new model).
Removed
enabled_languagesappconfig concept (existing rows ignored, not deleted).- Auto-persist of defaults on first Steps-tab open.
- "Tour not available in your language" personal-settings branch.
Fixed
- l10n source-string adaptations (#18): triple-dots →
…+ nbsp; dropped "successfully" from "Settings saved". - HTML-escape bug —
sanitizeStep()was double-escaping admin-authored HTML. - Wrong-language fallback — switched to
IFactory::findLanguage(null)so the raw user preference is honored, with explicit English fallback in DefaultStepsService. - Wizard client re-translated defaults locally instead of trusting server response.
Upgrade notes
Existing wizard_steps_<lang> rows from 1.6.x auto-persist are kept as-is and treated as overrides. They no longer pick up Transifex translation updates until the admin clicks Reset per language. See docs/admin/language-management.md for full upgrade notes.
Full changelog: https://github.com/nextcloud/IntroVox/blob/main/CHANGELOG.md
v1.5.0 - Enterprise subscription, NC 34, security hardening
What's New in v1.5.0
🎉 Added
- Enterprise subscription support — IntroVox can now be activated with a subscription key from VoxCloud
- New "Support" admin tab with subscription management UI
- Per-language step-count progress bars (free tier: 10 steps per language; licensed: configurable limits)
- Automatic daily license sync via background job
- Full feature set remains available on free tier — only volume is limited
- Nextcloud 34 support — declared compatibility for NC 32–34
- Explicit PHP 8.1 minimum declared in
appinfo/info.xml
🐛 Fixed
- #14 — Long wizard steps trapped users on mobile
- When step content exceeded the screen height, the modal overlay blocked page scroll while the step itself did not scroll either
- Cancel (×) button and primary action buttons became unreachable
- Fix: step now caps at
100dvh - 16pxon mobile with internal scroll; header/footer pinned so close button and actions stay visible - Verified at 375×667 (iPhone 6/7/8) and 320×568 (iPhone SE)
🔒 Security
- CSRF protection restored on 7 state-changing admin endpoints (
saveSteps,resetToDefault,saveSettings,exportSteps,importSteps,toggleTelemetry,sendTelemetryNow) - Defensive admin checks added to all 13 admin controller endpoints via
IGroupManager::isAdmin() - HTML sanitization (
OCP\Util::sanitizeHTML) on steptitleandtextto prevent stored XSS - HTTP response validation on license-server calls
🌍 Translations
- 27 new strings for the Support tab across all 6 languages (EN/NL/DE/FR/DA/SV)
- 6 missing statistics strings added to Danish and Swedish
- "Support" tab label translated in nl/de/fr
Full changelog: https://github.com/nextcloud/IntroVox/blob/main/CHANGELOG.md
v1.4.3 - Fix wizard endpoint crash on non-array config blob
What's New in v1.4.3
Fixed
- Wizard endpoint crashed with
array_filter()null error — When thewizard_steps_<lang>config blob existed but did not decode to a JSON array (corrupt or legacy non-array value),GET /apps/introvox/api/stepsreturned HTTP 500 for every logged-in user, blocking the onboarding tour.- Added
is_array()guard afterjson_decodeinApiController::getWizardSteps(); falls back to the existinguseDefault: trueresponse so the frontend uses built-in defaults. - Mirrors the defensive pattern already used in
TelemetryService.
- Added
Changed
- Telemetry user-count uses
callForAllUsersinstead ofcallForSeenUsers— User count now reflects all provisioned users, not only those who have logged in at least once; minimum returned value is1(was0) so downstream consumers cannot receive a zero count.
Full changelog: https://github.com/nextcloud/IntroVox/blob/main/CHANGELOG.md
v1.4.2 - Fix tour never starting on some Nextcloud versions
What's New in v1.4.2
Fixed
- Tour never starting on some Nextcloud versions — The app-menu readiness check introduced in v1.4.1 used CSS selectors that didn't match all Nextcloud versions, causing the tour to hang indefinitely
- Added multiple fallback selectors for app-menu detection across Nextcloud versions
- Added 10-second timeout fallback to prevent tour from never starting if menu selectors don't match
Full changelog: https://github.com/nextcloud/IntroVox/blob/main/CHANGELOG.md
v1.4.1 - Fix tour steps skipped when target element not yet rendered
What's New in v1.4.1
Fixed
- Tour steps skipped when target element not yet rendered — Steps with a valid
attachToselector were silently skipped if the DOM element hadn't been rendered by Vue at tour start time (e.g., Dashboard step on page load)- Steps now fall back to centered display instead of being skipped when their target element is not found
- Added app-menu readiness check — tour now waits for the app-menu to be fully rendered before starting
- Fixes issue where early steps (Dashboard, Activity) were skipped while later steps (Files) worked, due to Vue render timing
Full changelog: https://github.com/nextcloud/IntroVox/blob/main/CHANGELOG.md
v1.4.0 - Dark mode theme compliance & CSS architecture refactor
What's New in v1.4.0
Bug Fix
- Dark mode theme compliance — Wizard modal now correctly follows the active Nextcloud theme (#13)
Improvements
- CSS architecture refactor — Replaced 70
!importantoverrides with proper CSS specificity (down to 5, only forprefers-reduced-motiona11y) - Removed ~60 lines of redundant dark mode CSS — CSS variables already adapt automatically per theme
- Cleaner, more maintainable stylesheet — Easier to override in downstream themes
Full changelog: https://github.com/nextcloud/IntroVox/blob/main/CHANGELOG.md
v1.3.1 - Fix wizard shown to users outside group limitation
What's New in v1.3.1
Fixed
- Group limitation support — Wizard no longer shown to users outside the app's "Limit to groups" setting (#12)
LoadScripts.phpnow checksIAppManager::isEnabledForUser()before loading scripts- Prevents
AppNotEnabledExceptionerrors in server log - Added defensive error handling for HTTP 412/403 responses in frontend
Full changelog: https://github.com/nextcloud/IntroVox/blob/main/CHANGELOG.md
v1.3.0 - Nextcloud 33 compatibility
What's New in v1.3.0
Nextcloud 33 Support
- App now supports both Nextcloud 32 and Nextcloud 33
Modernized APIs
- Migrated admin UI from legacy
OCP.Toastto@nextcloud/dialogstoast functions - Migrated admin confirm dialogs from
OC.dialogs.confirm()to promise-basedshowConfirmation() - Replaced
OC.generateUrl()andOC.appswebrootswith@nextcloud/routerimports - Replaced
\OC::$serverdirect access with proper dependency injection
Cleanup
- Removed unused
@nextcloud/filesdependency
Full changelog: https://github.com/nextcloud/IntroVox/blob/main/CHANGELOG.md
v1.2.2 - Telemetry expansion & responsive tabs
What's New in v1.2.2
Added
- Telemetry expansion: Added 3 new server configuration fields to anonymous usage statistics
- OS family, web server type, Docker detection
- Send report now button: Manual telemetry report trigger in admin Statistics tab
- Responsive admin tabs: Tab navigation stacks vertically on mobile screens (< 768px)
Fixed
- Telemetry timezone fallback: Timezone uses smarter fallback: Nextcloud config → php.ini → UTC (instead of always falling back to UTC)
Full changelog: https://github.com/nextcloud/IntroVox/blob/main/CHANGELOG.md
v1.2.1 - Telemetry Improvements
What's New in v1.2.1
Changed
- Telemetry enabled by default - Anonymous usage statistics are now opt-out instead of opt-in
- Helps developers improve IntroVox with anonymous usage data
- Administrators can still disable telemetry in admin panel (Statistics tab)
- No personal data is ever collected - only aggregate statistics
Added
- Extended telemetry data - New privacy-friendly server environment fields:
serverRegion- Country code from admin-configureddefault_phone_regiondefaultLanguage- Server's default language settingdefaultTimezone- Server's timezonedatabaseType- Database type (mysql/pgsql/sqlite)totalGroups- Number of Nextcloud groups (count only)groupVisibilityUsed- Whether group-based step visibility is used
All new fields are privacy-friendly: admin-configured values only, no personal data.
Full changelog: https://github.com/nextcloud/IntroVox/blob/main/CHANGELOG.md