Skip to content

Releases: nextcloud/IntroVox

v1.7.0 - Transifex-ready language model + #17/#18 fixes

08 Jun 20:38

Choose a tag to compare

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/steps returns inline-translated defaults when no override exists.
  • Settings tab simplified — language checkbox grid removed.
  • License/telemetry payload field rename: enabledLanguageslanguagesWithOverrides.
  • Documentation restructured (docs/admin/language-management.md rewritten for the new model).

Removed

  • enabled_languages appconfig 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

21 May 10:58

Choose a tag to compare

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 - 16px on 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 step title and text to 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

05 May 12:51

Choose a tag to compare

What's New in v1.4.3

Fixed

  • Wizard endpoint crashed with array_filter() null error — When the wizard_steps_<lang> config blob existed but did not decode to a JSON array (corrupt or legacy non-array value), GET /apps/introvox/api/steps returned HTTP 500 for every logged-in user, blocking the onboarding tour.
    • Added is_array() guard after json_decode in ApiController::getWizardSteps(); falls back to the existing useDefault: true response so the frontend uses built-in defaults.
    • Mirrors the defensive pattern already used in TelemetryService.

Changed

  • Telemetry user-count uses callForAllUsers instead of callForSeenUsers — User count now reflects all provisioned users, not only those who have logged in at least once; minimum returned value is 1 (was 0) 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

16 Apr 07:23

Choose a tag to compare

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

16 Apr 06:54

Choose a tag to compare

What's New in v1.4.1

Fixed

  • Tour steps skipped when target element not yet rendered — Steps with a valid attachTo selector 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

31 Mar 11:51

Choose a tag to compare

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 !important overrides with proper CSS specificity (down to 5, only for prefers-reduced-motion a11y)
  • 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

26 Mar 10:50

Choose a tag to compare

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.php now checks IAppManager::isEnabledForUser() before loading scripts
    • Prevents AppNotEnabledException errors 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

18 Feb 13:32

Choose a tag to compare

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.Toast to @nextcloud/dialogs toast functions
  • Migrated admin confirm dialogs from OC.dialogs.confirm() to promise-based showConfirmation()
  • Replaced OC.generateUrl() and OC.appswebroots with @nextcloud/router imports
  • Replaced \OC::$server direct access with proper dependency injection

Cleanup

  • Removed unused @nextcloud/files dependency

Full changelog: https://github.com/nextcloud/IntroVox/blob/main/CHANGELOG.md

v1.2.2 - Telemetry expansion & responsive tabs

31 Jan 13:23

Choose a tag to compare

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

23 Jan 07:07

Choose a tag to compare

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-configured default_phone_region
    • defaultLanguage - Server's default language setting
    • defaultTimezone - Server's timezone
    • databaseType - 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