IntroVox - Releases

← App details

Nextcloud 34

IntroVox 1.7.0
Release Details
UpdatedJune 8, 2026, 8:42 p.m.
Changelog

Upgrade notes

  • Stale wizard_steps_<lang> rows from 1.6.x are kept as-is. Versions before 1.7.0 auto-persisted the default tour content into oc_appconfig the first time the admin opened the Steps tab, so most 1.6.x installs have six rows (en/nl/de/da/fr/sv) that are byte-identical to the bundled defaults at the time. After upgrade, those rows show up in the Steps-tab dropdown as "overrides". The wizard keeps working and end users see no difference, but those six languages will no longer pick up new Transifex translations until the admin clicks Reset on each one — that deletes the row and lets the Transifex-translated defaults take over. Languages that were never touched on the old install have no row and are unaffected; their users get fresh Transifex translations automatically. No data is lost either way.
  • Obsolete enabled_languages appconfig key is ignored, not deleted. Left in place so a downgrade to 1.6.x stays functional. Can be removed manually with occ config:app:delete introvox enabled_languages if desired; harmless if left.

Added

  • Language-override workflow for admins (#17) — Steps tab gains an explicit "Add language override" flow. A searchable dropdown shows every Transifex-supported language; admins pick one and start authoring custom copy. No DB rows are created until first save. New GET /admin/overrides endpoint returns the list of languages with admin-authored overrides.
  • DefaultStepsService — Single source of truth for the eight built-in tour steps. Both AdminController (editor view) and ApiController (end-user fetch) consume the same Transifex-translated defaults via this service. Removes a previously duplicated step-builder.

Changed

  • Wizard is automatically available in every Transifex-translated language (#17) — Default tour content is auto-translated; end users always see the wizard in their Nextcloud locale (fallback chain: user lang → base lang → English). The admin no longer needs to opt languages in. API path: when no admin override exists for a user's language, /api/steps now returns the Transifex-translated defaults inline instead of useDefault:true + empty array.
  • Settings tab simplified — The language checkbox grid is replaced by a single hint line stating how many languages have overrides. Wizard-on/off switch and "Show wizard to all users" button remain.
  • Reset semantics for a per-language override — "Reset to default" now deletes the override row entirely; the next request serves Transifex-translated defaults. Previously the row was re-saved with defaults baked into the DB.
  • License/telemetry payload field renameenabledLanguageslanguagesWithOverrides. Same data shape, more honest name.
  • Documentation restructured to match IntraVox/MetaVox layout — Replaced the four flat doc files (ADMINISTRATOR_GUIDE.md, ADMIN_MANUAL.md, USER_MANUAL.md, APP_STORE_SUBMISSION.md) with a nested structure: docs/index.md hub, docs/getting-started.md, plus admin/, user/, features/, architecture/, and deployment/ subdirectories. The two admin monoliths (which largely duplicated each other) were deduplicated into nine topic-scoped files. README and appinfo/info.xml <documentation> block updated to point at the new paths.

Removed

  • "Enable languages" concept (#17) — The Settings tab's per-language checkbox grid is gone, and the enabled_languages appconfig key is no longer read or written. Existing rows are left in place on upgrade (harmless; ignored). Existing wizard_steps_<lang> override rows are preserved and now displayed in the Steps-tab dropdown.
  • "Tour not available in your language" personal-settings branch — Since every Transifex-translated language is auto-available, this branch was always dead post-upgrade. Removed from lib/Settings/PersonalSettings.php, templates/personal.php, and src/personal.js.
  • Auto-persist of default steps on first GETAdminController::getSteps used to write defaults to oc_appconfig on first read; this artificially inflated the override-list. Defaults are now persisted only when an admin explicitly saves changes.

Fixed

  • l10n source-string adaptations for Transifex (#18) — Replaced triple-dot ellipses with U+2026 + nbsp (Saving …, Validating …, Activating …, Restarting tour …) per Nextcloud translation dos-and-don'ts. Dropped "successfully" from Settings saved per Nextcloud writing guidelines. Existing translations for the renamed keys are preserved.
  • App description no longer claims a fixed 6-language limit (#17) — appinfo/info.xml description rewritten to reflect Transifex-driven language coverage; removed the "Language-specific tour availability management" bullet.
  • Admin-saved step content rendered with literal <p> tagsAdminController::sanitizeStep ran OCP\Util::sanitizeHTML() on every save, which escapes HTML rather than sanitising it; admin-authored copy ended up in the DB as &lt;p&gt;...&lt;/p&gt; and Shepherd surfaced the raw tags to end users. Replaced with a plain trim(). Admin-authored wizard copy is intentionally HTML and admins are already trusted.
  • End-user wizard could be served in the wrong languageApiController used IL10N::getLanguageCode() which returns NC's validated language (the one with a translation file), silently rerouting e.g. an Italian user to Dutch when no Italian IntroVox translation existed. Switched to IFactory::findLanguage(null) so the raw user preference is used, and the defaults service falls back to English (not the system default language) when the user's language has no translation file.
  • Wizard client ignored server-provided default steps and re-translated locallysrc/components/wizardSteps.js discarded data.steps whenever the response had useDefault:true, then rebuilt the eight default steps in the browser via t('introvox', '<English source>'). Combined with the wrong-language IL10N bug above, this meant a non-translated user's wizard came out in the system default language. The client now uses the server's full step list directly.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignatureefMYucgM+8ad/07hy8SwvkUJCMBw9/rXNKvwFrjhcwlUcNlxmzYR6x8FPP7jMQtkYOpvwgBWqSs8dnbSneuLDT5OxP3b//hj6bT6LCjw0JL5kBNoGlJcRSnptIs2lh2GRPeT7+9M1WP8cLtmpPg1mx9ImVvwNqrz6ZIJ/Mpn8C+EhGWsU1KT8s/igk0IZ/YUK5vROQpNFPLY0eHxWVHYZOK5Knr6sILQael692EkX3oMTIbOFrFsabEi43hAb9Fv0zw1VGdiDmBCWBjkqVfHMByadGZ6XTiPIMI2nCUHc7fEVX3fxIsq2jJ9b+OCLDgjq6plMDucg3HJZuDFacCiQ7aGTqgnHsF/w1RudxmSSv2dkwVFt9CoAR5+9hjHp+ltopaKCgO5W0GQqzLSUpy+b/0LMcYViraMuE0B0ywBT/IsbepyPRhZoy6Ibug16fTQEEHMsIH5d3brbRq6t5TV3TajcKhzZlhMTf+1Ul8N7ZlQ00RhuYY1MuwXwPgyQYX2x6YO1TYxEnWYTKuWpL8GISf60Ow0NSIW9jkxHayrzkFVWdVd3iGaNuF6s1/NxypAIAffAm85zpcnFWh8HeTggI4ypH36vySBz0LwF7L7M92BxeaECtdiJIosD7pvYTFefI6ZkSRq+yzpSjah2mV0S4y9OLz/Qm/kVfaq68D4lpE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0
IntroVox 1.5.0
Release Details
UpdatedMay 21, 2026, 11:07 a.m.
Changelog

Added

  • Enterprise subscription support - IntroVox can now be activated with a subscription key from VoxCloud
  • New "Support" tab in admin settings with subscription management UI
  • Per-language step-count progress bars showing free-tier (10 steps per language) vs. licensed limits
  • Automatic daily license sync via background job (with stable jitter to spread load across installations)
  • License status and limits sourced from licenses.voxcloud.nl; 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

Changed

  • Telemetry payload includes license key + Enterprise detection - Reports now include the configured subscription key and hasExtendedSupport flag (detected via OCP\Util::hasExtendedSupport) so the license server can verify Enterprise claims server-side
  • 27 new translation strings for the Support tab across all 6 languages (EN/NL/DE/FR/DA/SV)

Fixed

  • Long wizard steps trapped users on mobile (#14) - When step content exceeded the screen height on mobile, the modal overlay blocked page scroll while the step itself did not scroll either, leaving the cancel (×) button and primary action buttons unreachable. Users had to disable the offending step in the admin panel to escape the tour.
  • Added max-height: calc(100vh - 32px) (or 100dvh - 16px on mobile, accounting for browser chrome) to the step container
  • Header and footer are now pinned via flex-shrink: 0 so the close icon and action buttons remain visible
  • The body text area scrolls internally (overflow-y: auto with overscroll-behavior: contain)
  • Verified at 375×667 (iPhone 6/7/8) and 320×568 (iPhone SE)

Security

  • CSRF protection restored on state-changing admin endpoints - Removed @NoCSRFRequired from 7 POST endpoints (saveSteps, resetToDefault, saveSettings, exportSteps, importSteps, toggleTelemetry, sendTelemetryNow) that were previously vulnerable to cross-site request forgery
  • Defensive admin checks added to all admin controller endpoints - All 13 admin endpoints now double-check admin privileges via IGroupManager::isAdmin() in addition to the framework's annotation-based check, preventing accidental exposure if annotations are misconfigured
  • HTML sanitization on step content - Step title and text fields are now sanitized via OCP\Util::sanitizeHTML on save/update/import to prevent stored XSS
  • HTTP response validation on license-server calls - LicenseService now checks status codes and JSON shape before trusting responses, preventing false-positive license validations on transient server errors
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
Signaturen3cRy31Wt5oTL8+NWdR894FRxFtoXujCp724KZEKR0tz66cGuytJtnKodqVkzxlsiyLPLpSfFLYLMlICqjHXnYHfrOJylVbGCCcxn+iSlKfs63p2v1KEwWOuUW4Y+SOw2uK8AkH7XyjkTcf/XQDUcuVt02Rg+jQ3wddZWcqwS0IKAOZ1JZujzpownvRDHGcXjyqcYxUpWRgtWvgtCQYGWcN3NZWkA6C7oJv0Z/vMrCbDTd50LbQZ91qZxmfXqlPoGQEw5+1+zA2gyM40jHUTwADHaruVCPILABiYjljHlS7Abv8RQ3dHZwjgbq57BIpeut7jCEAfi+THSyWmlniu1bQMtwdTVrZnXXqGcGZSkBndXY2dS2CRYB6KrPvVSjvqdlabO4iNebjgNXPibcVDoijOJmLEQz9pHBl2wBHTLmBNxzWHR31nt+4grMTMWuDO/pIVmwKZnAvUHnLyDzsypVwvOEcsxgfc1SPr1GhwGvK5Ko5iP5ldePwbcu8o/GDcuHl6zvfeGe+NaCQrWIfGl5C61NnNc6fBtyMHkdh1+BKeVZK/A8NYl7VjAx+wO2X3J5AX8HVNS4berRpmG+OBR9MeOOtx6MGwVx1UX94NolRSxe8LEdNcJyiTDd3fx88XSnl8w59vDZMZy3fqyLfCR0TROKyXAFuuEiIWnQaFO34=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0

Nextcloud 33

IntroVox 1.7.0
Release Details
UpdatedJune 8, 2026, 8:42 p.m.
Changelog

Upgrade notes

  • Stale wizard_steps_<lang> rows from 1.6.x are kept as-is. Versions before 1.7.0 auto-persisted the default tour content into oc_appconfig the first time the admin opened the Steps tab, so most 1.6.x installs have six rows (en/nl/de/da/fr/sv) that are byte-identical to the bundled defaults at the time. After upgrade, those rows show up in the Steps-tab dropdown as "overrides". The wizard keeps working and end users see no difference, but those six languages will no longer pick up new Transifex translations until the admin clicks Reset on each one — that deletes the row and lets the Transifex-translated defaults take over. Languages that were never touched on the old install have no row and are unaffected; their users get fresh Transifex translations automatically. No data is lost either way.
  • Obsolete enabled_languages appconfig key is ignored, not deleted. Left in place so a downgrade to 1.6.x stays functional. Can be removed manually with occ config:app:delete introvox enabled_languages if desired; harmless if left.

Added

  • Language-override workflow for admins (#17) — Steps tab gains an explicit "Add language override" flow. A searchable dropdown shows every Transifex-supported language; admins pick one and start authoring custom copy. No DB rows are created until first save. New GET /admin/overrides endpoint returns the list of languages with admin-authored overrides.
  • DefaultStepsService — Single source of truth for the eight built-in tour steps. Both AdminController (editor view) and ApiController (end-user fetch) consume the same Transifex-translated defaults via this service. Removes a previously duplicated step-builder.

Changed

  • Wizard is automatically available in every Transifex-translated language (#17) — Default tour content is auto-translated; end users always see the wizard in their Nextcloud locale (fallback chain: user lang → base lang → English). The admin no longer needs to opt languages in. API path: when no admin override exists for a user's language, /api/steps now returns the Transifex-translated defaults inline instead of useDefault:true + empty array.
  • Settings tab simplified — The language checkbox grid is replaced by a single hint line stating how many languages have overrides. Wizard-on/off switch and "Show wizard to all users" button remain.
  • Reset semantics for a per-language override — "Reset to default" now deletes the override row entirely; the next request serves Transifex-translated defaults. Previously the row was re-saved with defaults baked into the DB.
  • License/telemetry payload field renameenabledLanguageslanguagesWithOverrides. Same data shape, more honest name.
  • Documentation restructured to match IntraVox/MetaVox layout — Replaced the four flat doc files (ADMINISTRATOR_GUIDE.md, ADMIN_MANUAL.md, USER_MANUAL.md, APP_STORE_SUBMISSION.md) with a nested structure: docs/index.md hub, docs/getting-started.md, plus admin/, user/, features/, architecture/, and deployment/ subdirectories. The two admin monoliths (which largely duplicated each other) were deduplicated into nine topic-scoped files. README and appinfo/info.xml <documentation> block updated to point at the new paths.

Removed

  • "Enable languages" concept (#17) — The Settings tab's per-language checkbox grid is gone, and the enabled_languages appconfig key is no longer read or written. Existing rows are left in place on upgrade (harmless; ignored). Existing wizard_steps_<lang> override rows are preserved and now displayed in the Steps-tab dropdown.
  • "Tour not available in your language" personal-settings branch — Since every Transifex-translated language is auto-available, this branch was always dead post-upgrade. Removed from lib/Settings/PersonalSettings.php, templates/personal.php, and src/personal.js.
  • Auto-persist of default steps on first GETAdminController::getSteps used to write defaults to oc_appconfig on first read; this artificially inflated the override-list. Defaults are now persisted only when an admin explicitly saves changes.

Fixed

  • l10n source-string adaptations for Transifex (#18) — Replaced triple-dot ellipses with U+2026 + nbsp (Saving …, Validating …, Activating …, Restarting tour …) per Nextcloud translation dos-and-don'ts. Dropped "successfully" from Settings saved per Nextcloud writing guidelines. Existing translations for the renamed keys are preserved.
  • App description no longer claims a fixed 6-language limit (#17) — appinfo/info.xml description rewritten to reflect Transifex-driven language coverage; removed the "Language-specific tour availability management" bullet.
  • Admin-saved step content rendered with literal <p> tagsAdminController::sanitizeStep ran OCP\Util::sanitizeHTML() on every save, which escapes HTML rather than sanitising it; admin-authored copy ended up in the DB as &lt;p&gt;...&lt;/p&gt; and Shepherd surfaced the raw tags to end users. Replaced with a plain trim(). Admin-authored wizard copy is intentionally HTML and admins are already trusted.
  • End-user wizard could be served in the wrong languageApiController used IL10N::getLanguageCode() which returns NC's validated language (the one with a translation file), silently rerouting e.g. an Italian user to Dutch when no Italian IntroVox translation existed. Switched to IFactory::findLanguage(null) so the raw user preference is used, and the defaults service falls back to English (not the system default language) when the user's language has no translation file.
  • Wizard client ignored server-provided default steps and re-translated locallysrc/components/wizardSteps.js discarded data.steps whenever the response had useDefault:true, then rebuilt the eight default steps in the browser via t('introvox', '<English source>'). Combined with the wrong-language IL10N bug above, this meant a non-translated user's wizard came out in the system default language. The client now uses the server's full step list directly.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignatureefMYucgM+8ad/07hy8SwvkUJCMBw9/rXNKvwFrjhcwlUcNlxmzYR6x8FPP7jMQtkYOpvwgBWqSs8dnbSneuLDT5OxP3b//hj6bT6LCjw0JL5kBNoGlJcRSnptIs2lh2GRPeT7+9M1WP8cLtmpPg1mx9ImVvwNqrz6ZIJ/Mpn8C+EhGWsU1KT8s/igk0IZ/YUK5vROQpNFPLY0eHxWVHYZOK5Knr6sILQael692EkX3oMTIbOFrFsabEi43hAb9Fv0zw1VGdiDmBCWBjkqVfHMByadGZ6XTiPIMI2nCUHc7fEVX3fxIsq2jJ9b+OCLDgjq6plMDucg3HJZuDFacCiQ7aGTqgnHsF/w1RudxmSSv2dkwVFt9CoAR5+9hjHp+ltopaKCgO5W0GQqzLSUpy+b/0LMcYViraMuE0B0ywBT/IsbepyPRhZoy6Ibug16fTQEEHMsIH5d3brbRq6t5TV3TajcKhzZlhMTf+1Ul8N7ZlQ00RhuYY1MuwXwPgyQYX2x6YO1TYxEnWYTKuWpL8GISf60Ow0NSIW9jkxHayrzkFVWdVd3iGaNuF6s1/NxypAIAffAm85zpcnFWh8HeTggI4ypH36vySBz0LwF7L7M92BxeaECtdiJIosD7pvYTFefI6ZkSRq+yzpSjah2mV0S4y9OLz/Qm/kVfaq68D4lpE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0
IntroVox 1.5.0
Release Details
UpdatedMay 21, 2026, 11:07 a.m.
Changelog

Added

  • Enterprise subscription support - IntroVox can now be activated with a subscription key from VoxCloud
  • New "Support" tab in admin settings with subscription management UI
  • Per-language step-count progress bars showing free-tier (10 steps per language) vs. licensed limits
  • Automatic daily license sync via background job (with stable jitter to spread load across installations)
  • License status and limits sourced from licenses.voxcloud.nl; 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

Changed

  • Telemetry payload includes license key + Enterprise detection - Reports now include the configured subscription key and hasExtendedSupport flag (detected via OCP\Util::hasExtendedSupport) so the license server can verify Enterprise claims server-side
  • 27 new translation strings for the Support tab across all 6 languages (EN/NL/DE/FR/DA/SV)

Fixed

  • Long wizard steps trapped users on mobile (#14) - When step content exceeded the screen height on mobile, the modal overlay blocked page scroll while the step itself did not scroll either, leaving the cancel (×) button and primary action buttons unreachable. Users had to disable the offending step in the admin panel to escape the tour.
  • Added max-height: calc(100vh - 32px) (or 100dvh - 16px on mobile, accounting for browser chrome) to the step container
  • Header and footer are now pinned via flex-shrink: 0 so the close icon and action buttons remain visible
  • The body text area scrolls internally (overflow-y: auto with overscroll-behavior: contain)
  • Verified at 375×667 (iPhone 6/7/8) and 320×568 (iPhone SE)

Security

  • CSRF protection restored on state-changing admin endpoints - Removed @NoCSRFRequired from 7 POST endpoints (saveSteps, resetToDefault, saveSettings, exportSteps, importSteps, toggleTelemetry, sendTelemetryNow) that were previously vulnerable to cross-site request forgery
  • Defensive admin checks added to all admin controller endpoints - All 13 admin endpoints now double-check admin privileges via IGroupManager::isAdmin() in addition to the framework's annotation-based check, preventing accidental exposure if annotations are misconfigured
  • HTML sanitization on step content - Step title and text fields are now sanitized via OCP\Util::sanitizeHTML on save/update/import to prevent stored XSS
  • HTTP response validation on license-server calls - LicenseService now checks status codes and JSON shape before trusting responses, preventing false-positive license validations on transient server errors
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
Signaturen3cRy31Wt5oTL8+NWdR894FRxFtoXujCp724KZEKR0tz66cGuytJtnKodqVkzxlsiyLPLpSfFLYLMlICqjHXnYHfrOJylVbGCCcxn+iSlKfs63p2v1KEwWOuUW4Y+SOw2uK8AkH7XyjkTcf/XQDUcuVt02Rg+jQ3wddZWcqwS0IKAOZ1JZujzpownvRDHGcXjyqcYxUpWRgtWvgtCQYGWcN3NZWkA6C7oJv0Z/vMrCbDTd50LbQZ91qZxmfXqlPoGQEw5+1+zA2gyM40jHUTwADHaruVCPILABiYjljHlS7Abv8RQ3dHZwjgbq57BIpeut7jCEAfi+THSyWmlniu1bQMtwdTVrZnXXqGcGZSkBndXY2dS2CRYB6KrPvVSjvqdlabO4iNebjgNXPibcVDoijOJmLEQz9pHBl2wBHTLmBNxzWHR31nt+4grMTMWuDO/pIVmwKZnAvUHnLyDzsypVwvOEcsxgfc1SPr1GhwGvK5Ko5iP5ldePwbcu8o/GDcuHl6zvfeGe+NaCQrWIfGl5C61NnNc6fBtyMHkdh1+BKeVZK/A8NYl7VjAx+wO2X3J5AX8HVNS4berRpmG+OBR9MeOOtx6MGwVx1UX94NolRSxe8LEdNcJyiTDd3fx88XSnl8w59vDZMZy3fqyLfCR0TROKyXAFuuEiIWnQaFO34=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0
IntroVox 1.4.3
Release Details
UpdatedMay 5, 2026, 2:07 p.m.
Changelog

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 value or legacy non-array data), 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
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignatureEOLvG+1EatgDKjGzzzW/dZWL61XV9puCCPF1O9hUmD+v7WfQZGUYCfbWCS2WpmQ/QLOEfbcZykl5EUmxqG+LeVufRtkQ9KPwXzJ0MDXI79D3VoyC97MYPYI2rmBMNcv0nzU4rd11htm424EKNuMI6PD3aX8I6qCEZUc4h+fXp+7aPjp+DGZCIW6Rbu/4qCbKFHJatUzYwnJFByqkhZ9dyplidyXVrPe4L9Oqw7PUneTDwLcRdX5rc2Yw4fLESQVtK/upL8BC49cjq7ZsNH8xu1h81FZHqjf7AzD+IdQHHXr674juUZIdiCS2rYjZOZjXwm9UOwbXdhLTuwhJefT7fwcIm1Gfv8rJpdQPBrdDQhmO5xMrSXtcAuF56kE6Nafh/dli0svcSW04KS4XZ/j/2NDQd/nXQkP7T2C1xLLN6MFQVZbOBhovkT1cV7lRZEFAZyv04NaDabzoewlFTQZkF2wW5e/pEd2peHbh4sSL4mmuRXml3UCXuU2wDqV7+rSa3OJViHUlFZKy5aACxfsyp+ceppUloIjEXxGu1rKJ1nW6lVZaBivh/I74wPdoZC2W5KuUiEPwtmr1gSX8ektvDEeeZP5C6J6pJATqIqMzfQ/dIBHQM9/hqbT5cPc8BzVIvWGwvOg+ChOVAhqVH7d4Sqzu1NYTd7XILz0HppIF09Y=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
IntroVox 1.4.2
Release Details
UpdatedApril 16, 2026, 7:23 a.m.
Changelog

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
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignatureRf4IEp3Uvr+PdmI95/ifZukCHnwQDmjG1CSNbMMLT1hlYRiID0sCMxEGqyxIGR/zkY+L+TOC6sardOxbW0D2WYkLsYlm5jIuTfnlT+rD7YWUr44l6Mr3yc/Y98cTFYxJDik31DEm++rndOZJf83rb8QtAQJRRW917be6KiLYXGUk4SZvpWV+kQLIKONvuKiw5O8XgWYXODYhQ390MF30KOpOAJa4xIX3uFfqddnrzR91dD7lhO/Zrv5jSdS+ZSQOTdxBRRjoGfGytQsJpyBSLYxWo0XT81OAL1pEttHR5QFPGoRIkgjGQFAQrpdbIkt5garVGNqlc5ahv9G3fLUutuSQb3grkRzHCfWtbvwOtln3kBh4G5eQo6bVMaAA+J1ttzzD1//4bBMxY4/rwoE6Yz8zb6A4mMO468n2Wx+cJ/601RJJEX8IQYEZtIxQQJZFGCnHJq6MZHs4j/9bPHEdto0PZQlnwschiqtU9bVXkeG7kiIoJsW+F7rCb4zfLKBOqU5wtFbLaboKxByZGp/R9aMpLIgay7uNLfx+lqFG9Jq8cpGVUBtPYnI6m1yZBnw4Iz4VzGwXs2XmEaJ+77vc4y78UZ/nRY34d3DY4l/TdyguBxNas6nwwW61uDXvQ2I/AS1LM3wzzHS0/lCYJO67FOyeo2mISpgev3McHBqKV3M=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
IntroVox 1.4.1
Release Details
UpdatedApril 16, 2026, 6:56 a.m.
Changelog

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 to waitForNextcloudReady — tour now waits for .app-menu-list .app-menu-entry elements before starting
  • Fixes issue where early steps (Dashboard, Activity) were skipped while later steps (Files) worked, due to Vue render timing
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignatureYkZ6ZWFtd45sKB7ydxdRSTk4ytYoW3UiDRYn1Cw3xuxoc1wBihDXhS8SF+r1hjFnEnRWxzuZX4EXdQW7ABCDXb338mKJWCwEpit4kcLHBM2dj6mM7wxYRSAbd6OkntGOEy+eDZAj6qS1F7qW6UJLc/3RMvAcyiOIWzRIpTJkAtVIbiojA93XDVuM2G29ibJSYi5vcNNokw/gmTd6894Lr67rfvn+K+Y49R0pC5TPk1NYjSNsdvdn+w1mIM6NqnJG5iawIhVeZ1IWaAc5m62AoWuq2QQF0XzbNNorVjhn/NSXPtntyh4lD45Hbi/m0KT7OTIKNt4v6AYd/sqWyqRi6B5DNz8E5Yimkn5RLJOVbNxWoAgzpLDhFPQBXsk+IzFMlJ9oDT2MszlXSfrVr3u7dwF98aB/hT5JwEwfGI+uH/TZzSEJGGZIyqlWroR5I7y/NTqAoRaF8N8oBEvJrutoS6Ru0bl6wFMAnvXVr2g6PTsMCVTRMgeqPxCwGQQYQKqZU5i4FnsGdc3gr3MI6EHcB6o3ouMTPtaXLXvh6Q2CnY9ktdLEIA1t2ZNTBTQuBIE5e5vOeJCEo74XqEySAKPSAz/kUfgj6HPBdskJaFg4+uC/q7sOvC3jdHr/ANlIysXtF+14UHeSAGwSEASE7pKDjDpSsSicpXlAe7yWXp71/TE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
IntroVox 1.4.0
Release Details
UpdatedMarch 31, 2026, 11:52 a.m.
Changelog

Fixed

  • Dark mode theme compliance - Wizard modal now correctly follows the active Nextcloud theme (#13)
  • Fixed CSS load order: Shepherd.js default styles no longer override custom theme-aware styles
  • Moved Shepherd.js CSS import to main.js (before wizard.css) to ensure correct cascade order
  • Removed duplicate Shepherd.js CSS import from WizardManager.vue
  • Modal background, header, arrow, and all elements now adapt to light, dark, and high contrast themes

Improved

  • CSS architecture refactor - Replaced all !important overrides with proper CSS specificity
  • Reduced !important usage from 70 to 5 (only prefers-reduced-motion for a11y best practice)
  • Uses compound selectors (e.g. .nextcloud-wizard-step.shepherd-element) to win specificity naturally over Shepherd.js defaults
  • Added targeted selectors for Shepherd's .shepherd-has-title variants to properly override header and cancel icon styling
  • Overlay selector now targets .shepherd-modal-is-visible state for correct specificity
  • More maintainable and future-proof: easier to override in downstream themes
  • Removed redundant dark mode CSS - Eliminated ~60 lines of duplicate dark mode overrides
  • Header background/color and title color overrides in dark mode blocks were redundant (CSS variables already adapt automatically)
  • Dark mode blocks now only contain properties that genuinely differ per theme (box-shadow, overlay opacity, glow colors)
  • Removed empty CSS rulesets - Cleaned up unused hover/active placeholder rules
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
Signatureco5vmh+pDQ1xCuO5N6wLJAdbPeSgWeq7ngkSvpofmOBEA+CCU41FDF/gqArouGO+L9eND4ZGaNFJ8eENrNH2RLsEl3g2NAtiuUyCEZnywvb3RGx4uChLHfBwUWWltdIVwIUXSfMtpH3twvUljRM0N4vrp3FkcDPKaO3hjTi85D+fVWMEBvj3zbKRcWvVKQsJ5Km9ttiEC126Zmi90NQPqJwnfkUTjx2fd1aII7qX09nQIAU9LYBsGVCQxZ/ffCFRNLi78n/y9zQ5lofvmk/11/41qIqLZfD+mn1A4FHgn2SZU3ydosTHU9AoytaGhHCVHOu58Ty/N2OFXjsMCJd0/73kzj00/on+3M5Gy5pjs8/4GOXR3LXfGhCwm/AIRjQGFayTUCRYJO7X1Qcl6qdj/OlU7VNDag/vDGYPrlo+a3Uomge/ha+FGXZxDy3APWxGpxZDMe0cAQbbNv7iFWjlNbA/Vod5tfee5LtPEjxoH/qTmeSGT7sIkMS/6ZUkdKUzsxERnTeNFKLaEjKfMttqT4nDUKG2eOdGU05BR9wxxWpThi3Y/U/AwMqwahnLgWoNBMR4fDrfzwTsI6mVOEyYJbFBpCgZguU+49iUaAt3ErbtQPtuhJ8XsQMEbyunh/sE9DmRRY+J1YueIc+r+L6WIHuzUQ+49c2FkQSkq+3h1cA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
IntroVox 1.3.1
Release Details
UpdatedMarch 26, 2026, 10:52 a.m.
Changelog

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 for users outside allowed groups
  • Added defensive error handling in WizardManager.vue: HTTP 412/403 responses now correctly disable the wizard instead of falling through to show it
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignaturecLvldwu7VJk/5yMHCJja/0N93URQgrJ5gdu7BBcfkJwl5/yuL5D86MZYs/q7QYzj5KLiMIdRd/3dhc7CGyL29c8ma5hrRPNojL1bYao/4EIOzyWuIyFGWzycDbNpnXiUq9ZWASO8/MnUx6vib18ceknqvvjdkIG4Xw0JT/zdx4UFML6whimQVFO9GIKZcADOGmvtlG/VltEv+CqLHTsQrguWzZwnJydWbMcsLvGBxfg/08HwV4w3EGX3FmppFl/fIlX0F96AYGWme+LP3VpEpYRaceZONY0pgg07o2rnURot2Jp8v4tR8B2py/xgVzPD5bgl0tBKbjsDfP+v9fwE4gMDv7WNxh2KaqtrGQeTuYnD336zxZZ4In8n2Ryu4uxAwKOm+8uhR/9ZJSRGP6reCi98/hRoeitkrB+8JGWgrDhA1DH36FcEnp/EA31rfXJAHG940TVV6Bi40nkFMV+HqtShYcJQ+8tmC1MqyvmIkqOkxGCCU2bxRakW3lAPLxLk5jJRRZkJNutxtX/WkU6QAQIj8KLa2NlBGj8S5G8sOJFvw9G6uDaHLSm4PvKSsUdivyTI+eFwSWhfD5dX33LDW3WIAtJI/xfCCKOkA6kl7NGzIzWDYWhgbSnIzvZzBLxObI50uwwD7vO4He0mKSm0bZ/YVTa8meprKw3F+lRchis=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
IntroVox 1.3.0
Release Details
UpdatedFeb. 18, 2026, 1:37 p.m.
Changelog

Added

  • Nextcloud 33 compatibility - App now supports Nextcloud 32 and 33

Changed

  • Migrated admin UI toast notifications - Replaced legacy OCP.Toast globals with showSuccess, showError, showWarning, showInfo from @nextcloud/dialogs in admin interface
  • Migrated admin confirm dialogs - Replaced legacy OC.dialogs.confirm() with promise-based showConfirmation() from @nextcloud/dialogs in admin interface (5 locations)
  • Migrated personal settings redirect - Replaced OC.generateUrl() and OC.appswebroots with @nextcloud/router imports for tour restart redirect
  • Improved dependency injection - Replaced direct \OC::$server->getL10NFactory() access with proper constructor injection of IL10NFactory in AdminController

Removed

  • Unused @nextcloud/files dependency - Removed from package.json (was never imported in source code)

Technical

  • Added webpack resolve.fallback for path module (required by @nextcloud/dialogs transitive dependency)
  • Admin bundle uses @nextcloud/dialogs for all toast and confirmation dialogs
  • Personal settings bundle retains lightweight OCP.Toast usage to avoid bundle bloat
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignaturerJf/b/Mk7afjb4gUNWyxlpuL9QR8h1B92KEg8LgFBCBKEWwW/AUjs3gxnRlizhbcAYo1uhrmXg/xVzzkyJlMlKP2XV1rvxDtaJqALeOq9CEg0gKaVvQoLYfYGA+og6+6ywwqDhCPSiTRAHCrR0E4U5UL/lZVf7+sw7Z8nRZwcsugMQgP9OZtOSqI4Ye3TfRn0q++2RKmX4ZBFfcHqZuRtdPLk/QdIJR4iRA8/kLqfT7dHfTDKmqtF7vl17TEdvi6fsdJxAx6ctUPLvuZmBtAcP5SrNDpbWI+CwLLgDNspsTIQUQnenT3fhiuPBkaJHd3hf+imkVzXqeYpayPYTXXx/z9juONOLyHVVcLG+d1O5BqFu3G+ULvhAfiLmKNBkh7YTJdAITDZkHZ2HY3EHZtgi1+J5ca2jRchIS7vp1e/v491G7hm99w7aNncUWsXzR+V8dk6W7+w6eSvJMkb+q6gPzdIreG6HgV0RPQGLnZG69V13BJ03NczHR/oliKF0AwrzBwACamBL3ziwNxOrPIbzrn2HLI0bmuZCsqDB3TfrzIXWvRIJIqNZX/Pn7/NZJ19K3nEcTu3Uzt6H/YAq6phLntn26cTVeI/GeiRqNFOr69gBNhAftdfS2p7srXGXzbBSStblEXiD4qJwUo+otqPpFFFZ4ay0K01XSzwsvipG4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32

Nextcloud 32

IntroVox 1.7.0
Release Details
UpdatedJune 8, 2026, 8:42 p.m.
Changelog

Upgrade notes

  • Stale wizard_steps_<lang> rows from 1.6.x are kept as-is. Versions before 1.7.0 auto-persisted the default tour content into oc_appconfig the first time the admin opened the Steps tab, so most 1.6.x installs have six rows (en/nl/de/da/fr/sv) that are byte-identical to the bundled defaults at the time. After upgrade, those rows show up in the Steps-tab dropdown as "overrides". The wizard keeps working and end users see no difference, but those six languages will no longer pick up new Transifex translations until the admin clicks Reset on each one — that deletes the row and lets the Transifex-translated defaults take over. Languages that were never touched on the old install have no row and are unaffected; their users get fresh Transifex translations automatically. No data is lost either way.
  • Obsolete enabled_languages appconfig key is ignored, not deleted. Left in place so a downgrade to 1.6.x stays functional. Can be removed manually with occ config:app:delete introvox enabled_languages if desired; harmless if left.

Added

  • Language-override workflow for admins (#17) — Steps tab gains an explicit "Add language override" flow. A searchable dropdown shows every Transifex-supported language; admins pick one and start authoring custom copy. No DB rows are created until first save. New GET /admin/overrides endpoint returns the list of languages with admin-authored overrides.
  • DefaultStepsService — Single source of truth for the eight built-in tour steps. Both AdminController (editor view) and ApiController (end-user fetch) consume the same Transifex-translated defaults via this service. Removes a previously duplicated step-builder.

Changed

  • Wizard is automatically available in every Transifex-translated language (#17) — Default tour content is auto-translated; end users always see the wizard in their Nextcloud locale (fallback chain: user lang → base lang → English). The admin no longer needs to opt languages in. API path: when no admin override exists for a user's language, /api/steps now returns the Transifex-translated defaults inline instead of useDefault:true + empty array.
  • Settings tab simplified — The language checkbox grid is replaced by a single hint line stating how many languages have overrides. Wizard-on/off switch and "Show wizard to all users" button remain.
  • Reset semantics for a per-language override — "Reset to default" now deletes the override row entirely; the next request serves Transifex-translated defaults. Previously the row was re-saved with defaults baked into the DB.
  • License/telemetry payload field renameenabledLanguageslanguagesWithOverrides. Same data shape, more honest name.
  • Documentation restructured to match IntraVox/MetaVox layout — Replaced the four flat doc files (ADMINISTRATOR_GUIDE.md, ADMIN_MANUAL.md, USER_MANUAL.md, APP_STORE_SUBMISSION.md) with a nested structure: docs/index.md hub, docs/getting-started.md, plus admin/, user/, features/, architecture/, and deployment/ subdirectories. The two admin monoliths (which largely duplicated each other) were deduplicated into nine topic-scoped files. README and appinfo/info.xml <documentation> block updated to point at the new paths.

Removed

  • "Enable languages" concept (#17) — The Settings tab's per-language checkbox grid is gone, and the enabled_languages appconfig key is no longer read or written. Existing rows are left in place on upgrade (harmless; ignored). Existing wizard_steps_<lang> override rows are preserved and now displayed in the Steps-tab dropdown.
  • "Tour not available in your language" personal-settings branch — Since every Transifex-translated language is auto-available, this branch was always dead post-upgrade. Removed from lib/Settings/PersonalSettings.php, templates/personal.php, and src/personal.js.
  • Auto-persist of default steps on first GETAdminController::getSteps used to write defaults to oc_appconfig on first read; this artificially inflated the override-list. Defaults are now persisted only when an admin explicitly saves changes.

Fixed

  • l10n source-string adaptations for Transifex (#18) — Replaced triple-dot ellipses with U+2026 + nbsp (Saving …, Validating …, Activating …, Restarting tour …) per Nextcloud translation dos-and-don'ts. Dropped "successfully" from Settings saved per Nextcloud writing guidelines. Existing translations for the renamed keys are preserved.
  • App description no longer claims a fixed 6-language limit (#17) — appinfo/info.xml description rewritten to reflect Transifex-driven language coverage; removed the "Language-specific tour availability management" bullet.
  • Admin-saved step content rendered with literal <p> tagsAdminController::sanitizeStep ran OCP\Util::sanitizeHTML() on every save, which escapes HTML rather than sanitising it; admin-authored copy ended up in the DB as &lt;p&gt;...&lt;/p&gt; and Shepherd surfaced the raw tags to end users. Replaced with a plain trim(). Admin-authored wizard copy is intentionally HTML and admins are already trusted.
  • End-user wizard could be served in the wrong languageApiController used IL10N::getLanguageCode() which returns NC's validated language (the one with a translation file), silently rerouting e.g. an Italian user to Dutch when no Italian IntroVox translation existed. Switched to IFactory::findLanguage(null) so the raw user preference is used, and the defaults service falls back to English (not the system default language) when the user's language has no translation file.
  • Wizard client ignored server-provided default steps and re-translated locallysrc/components/wizardSteps.js discarded data.steps whenever the response had useDefault:true, then rebuilt the eight default steps in the browser via t('introvox', '<English source>'). Combined with the wrong-language IL10N bug above, this meant a non-translated user's wizard came out in the system default language. The client now uses the server's full step list directly.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignatureefMYucgM+8ad/07hy8SwvkUJCMBw9/rXNKvwFrjhcwlUcNlxmzYR6x8FPP7jMQtkYOpvwgBWqSs8dnbSneuLDT5OxP3b//hj6bT6LCjw0JL5kBNoGlJcRSnptIs2lh2GRPeT7+9M1WP8cLtmpPg1mx9ImVvwNqrz6ZIJ/Mpn8C+EhGWsU1KT8s/igk0IZ/YUK5vROQpNFPLY0eHxWVHYZOK5Knr6sILQael692EkX3oMTIbOFrFsabEi43hAb9Fv0zw1VGdiDmBCWBjkqVfHMByadGZ6XTiPIMI2nCUHc7fEVX3fxIsq2jJ9b+OCLDgjq6plMDucg3HJZuDFacCiQ7aGTqgnHsF/w1RudxmSSv2dkwVFt9CoAR5+9hjHp+ltopaKCgO5W0GQqzLSUpy+b/0LMcYViraMuE0B0ywBT/IsbepyPRhZoy6Ibug16fTQEEHMsIH5d3brbRq6t5TV3TajcKhzZlhMTf+1Ul8N7ZlQ00RhuYY1MuwXwPgyQYX2x6YO1TYxEnWYTKuWpL8GISf60Ow0NSIW9jkxHayrzkFVWdVd3iGaNuF6s1/NxypAIAffAm85zpcnFWh8HeTggI4ypH36vySBz0LwF7L7M92BxeaECtdiJIosD7pvYTFefI6ZkSRq+yzpSjah2mV0S4y9OLz/Qm/kVfaq68D4lpE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0
IntroVox 1.5.0
Release Details
UpdatedMay 21, 2026, 11:07 a.m.
Changelog

Added

  • Enterprise subscription support - IntroVox can now be activated with a subscription key from VoxCloud
  • New "Support" tab in admin settings with subscription management UI
  • Per-language step-count progress bars showing free-tier (10 steps per language) vs. licensed limits
  • Automatic daily license sync via background job (with stable jitter to spread load across installations)
  • License status and limits sourced from licenses.voxcloud.nl; 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

Changed

  • Telemetry payload includes license key + Enterprise detection - Reports now include the configured subscription key and hasExtendedSupport flag (detected via OCP\Util::hasExtendedSupport) so the license server can verify Enterprise claims server-side
  • 27 new translation strings for the Support tab across all 6 languages (EN/NL/DE/FR/DA/SV)

Fixed

  • Long wizard steps trapped users on mobile (#14) - When step content exceeded the screen height on mobile, the modal overlay blocked page scroll while the step itself did not scroll either, leaving the cancel (×) button and primary action buttons unreachable. Users had to disable the offending step in the admin panel to escape the tour.
  • Added max-height: calc(100vh - 32px) (or 100dvh - 16px on mobile, accounting for browser chrome) to the step container
  • Header and footer are now pinned via flex-shrink: 0 so the close icon and action buttons remain visible
  • The body text area scrolls internally (overflow-y: auto with overscroll-behavior: contain)
  • Verified at 375×667 (iPhone 6/7/8) and 320×568 (iPhone SE)

Security

  • CSRF protection restored on state-changing admin endpoints - Removed @NoCSRFRequired from 7 POST endpoints (saveSteps, resetToDefault, saveSettings, exportSteps, importSteps, toggleTelemetry, sendTelemetryNow) that were previously vulnerable to cross-site request forgery
  • Defensive admin checks added to all admin controller endpoints - All 13 admin endpoints now double-check admin privileges via IGroupManager::isAdmin() in addition to the framework's annotation-based check, preventing accidental exposure if annotations are misconfigured
  • HTML sanitization on step content - Step title and text fields are now sanitized via OCP\Util::sanitizeHTML on save/update/import to prevent stored XSS
  • HTTP response validation on license-server calls - LicenseService now checks status codes and JSON shape before trusting responses, preventing false-positive license validations on transient server errors
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
Signaturen3cRy31Wt5oTL8+NWdR894FRxFtoXujCp724KZEKR0tz66cGuytJtnKodqVkzxlsiyLPLpSfFLYLMlICqjHXnYHfrOJylVbGCCcxn+iSlKfs63p2v1KEwWOuUW4Y+SOw2uK8AkH7XyjkTcf/XQDUcuVt02Rg+jQ3wddZWcqwS0IKAOZ1JZujzpownvRDHGcXjyqcYxUpWRgtWvgtCQYGWcN3NZWkA6C7oJv0Z/vMrCbDTd50LbQZ91qZxmfXqlPoGQEw5+1+zA2gyM40jHUTwADHaruVCPILABiYjljHlS7Abv8RQ3dHZwjgbq57BIpeut7jCEAfi+THSyWmlniu1bQMtwdTVrZnXXqGcGZSkBndXY2dS2CRYB6KrPvVSjvqdlabO4iNebjgNXPibcVDoijOJmLEQz9pHBl2wBHTLmBNxzWHR31nt+4grMTMWuDO/pIVmwKZnAvUHnLyDzsypVwvOEcsxgfc1SPr1GhwGvK5Ko5iP5ldePwbcu8o/GDcuHl6zvfeGe+NaCQrWIfGl5C61NnNc6fBtyMHkdh1+BKeVZK/A8NYl7VjAx+wO2X3J5AX8HVNS4berRpmG+OBR9MeOOtx6MGwVx1UX94NolRSxe8LEdNcJyiTDd3fx88XSnl8w59vDZMZy3fqyLfCR0TROKyXAFuuEiIWnQaFO34=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<35.0.0
Minimum Integer bits32
PHP>=8.1.0
IntroVox 1.4.3
Release Details
UpdatedMay 5, 2026, 2:07 p.m.
Changelog

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 value or legacy non-array data), 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
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignatureEOLvG+1EatgDKjGzzzW/dZWL61XV9puCCPF1O9hUmD+v7WfQZGUYCfbWCS2WpmQ/QLOEfbcZykl5EUmxqG+LeVufRtkQ9KPwXzJ0MDXI79D3VoyC97MYPYI2rmBMNcv0nzU4rd11htm424EKNuMI6PD3aX8I6qCEZUc4h+fXp+7aPjp+DGZCIW6Rbu/4qCbKFHJatUzYwnJFByqkhZ9dyplidyXVrPe4L9Oqw7PUneTDwLcRdX5rc2Yw4fLESQVtK/upL8BC49cjq7ZsNH8xu1h81FZHqjf7AzD+IdQHHXr674juUZIdiCS2rYjZOZjXwm9UOwbXdhLTuwhJefT7fwcIm1Gfv8rJpdQPBrdDQhmO5xMrSXtcAuF56kE6Nafh/dli0svcSW04KS4XZ/j/2NDQd/nXQkP7T2C1xLLN6MFQVZbOBhovkT1cV7lRZEFAZyv04NaDabzoewlFTQZkF2wW5e/pEd2peHbh4sSL4mmuRXml3UCXuU2wDqV7+rSa3OJViHUlFZKy5aACxfsyp+ceppUloIjEXxGu1rKJ1nW6lVZaBivh/I74wPdoZC2W5KuUiEPwtmr1gSX8ektvDEeeZP5C6J6pJATqIqMzfQ/dIBHQM9/hqbT5cPc8BzVIvWGwvOg+ChOVAhqVH7d4Sqzu1NYTd7XILz0HppIF09Y=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
IntroVox 1.4.2
Release Details
UpdatedApril 16, 2026, 7:23 a.m.
Changelog

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
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignatureRf4IEp3Uvr+PdmI95/ifZukCHnwQDmjG1CSNbMMLT1hlYRiID0sCMxEGqyxIGR/zkY+L+TOC6sardOxbW0D2WYkLsYlm5jIuTfnlT+rD7YWUr44l6Mr3yc/Y98cTFYxJDik31DEm++rndOZJf83rb8QtAQJRRW917be6KiLYXGUk4SZvpWV+kQLIKONvuKiw5O8XgWYXODYhQ390MF30KOpOAJa4xIX3uFfqddnrzR91dD7lhO/Zrv5jSdS+ZSQOTdxBRRjoGfGytQsJpyBSLYxWo0XT81OAL1pEttHR5QFPGoRIkgjGQFAQrpdbIkt5garVGNqlc5ahv9G3fLUutuSQb3grkRzHCfWtbvwOtln3kBh4G5eQo6bVMaAA+J1ttzzD1//4bBMxY4/rwoE6Yz8zb6A4mMO468n2Wx+cJ/601RJJEX8IQYEZtIxQQJZFGCnHJq6MZHs4j/9bPHEdto0PZQlnwschiqtU9bVXkeG7kiIoJsW+F7rCb4zfLKBOqU5wtFbLaboKxByZGp/R9aMpLIgay7uNLfx+lqFG9Jq8cpGVUBtPYnI6m1yZBnw4Iz4VzGwXs2XmEaJ+77vc4y78UZ/nRY34d3DY4l/TdyguBxNas6nwwW61uDXvQ2I/AS1LM3wzzHS0/lCYJO67FOyeo2mISpgev3McHBqKV3M=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
IntroVox 1.4.1
Release Details
UpdatedApril 16, 2026, 6:56 a.m.
Changelog

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 to waitForNextcloudReady — tour now waits for .app-menu-list .app-menu-entry elements before starting
  • Fixes issue where early steps (Dashboard, Activity) were skipped while later steps (Files) worked, due to Vue render timing
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignatureYkZ6ZWFtd45sKB7ydxdRSTk4ytYoW3UiDRYn1Cw3xuxoc1wBihDXhS8SF+r1hjFnEnRWxzuZX4EXdQW7ABCDXb338mKJWCwEpit4kcLHBM2dj6mM7wxYRSAbd6OkntGOEy+eDZAj6qS1F7qW6UJLc/3RMvAcyiOIWzRIpTJkAtVIbiojA93XDVuM2G29ibJSYi5vcNNokw/gmTd6894Lr67rfvn+K+Y49R0pC5TPk1NYjSNsdvdn+w1mIM6NqnJG5iawIhVeZ1IWaAc5m62AoWuq2QQF0XzbNNorVjhn/NSXPtntyh4lD45Hbi/m0KT7OTIKNt4v6AYd/sqWyqRi6B5DNz8E5Yimkn5RLJOVbNxWoAgzpLDhFPQBXsk+IzFMlJ9oDT2MszlXSfrVr3u7dwF98aB/hT5JwEwfGI+uH/TZzSEJGGZIyqlWroR5I7y/NTqAoRaF8N8oBEvJrutoS6Ru0bl6wFMAnvXVr2g6PTsMCVTRMgeqPxCwGQQYQKqZU5i4FnsGdc3gr3MI6EHcB6o3ouMTPtaXLXvh6Q2CnY9ktdLEIA1t2ZNTBTQuBIE5e5vOeJCEo74XqEySAKPSAz/kUfgj6HPBdskJaFg4+uC/q7sOvC3jdHr/ANlIysXtF+14UHeSAGwSEASE7pKDjDpSsSicpXlAe7yWXp71/TE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
IntroVox 1.4.0
Release Details
UpdatedMarch 31, 2026, 11:52 a.m.
Changelog

Fixed

  • Dark mode theme compliance - Wizard modal now correctly follows the active Nextcloud theme (#13)
  • Fixed CSS load order: Shepherd.js default styles no longer override custom theme-aware styles
  • Moved Shepherd.js CSS import to main.js (before wizard.css) to ensure correct cascade order
  • Removed duplicate Shepherd.js CSS import from WizardManager.vue
  • Modal background, header, arrow, and all elements now adapt to light, dark, and high contrast themes

Improved

  • CSS architecture refactor - Replaced all !important overrides with proper CSS specificity
  • Reduced !important usage from 70 to 5 (only prefers-reduced-motion for a11y best practice)
  • Uses compound selectors (e.g. .nextcloud-wizard-step.shepherd-element) to win specificity naturally over Shepherd.js defaults
  • Added targeted selectors for Shepherd's .shepherd-has-title variants to properly override header and cancel icon styling
  • Overlay selector now targets .shepherd-modal-is-visible state for correct specificity
  • More maintainable and future-proof: easier to override in downstream themes
  • Removed redundant dark mode CSS - Eliminated ~60 lines of duplicate dark mode overrides
  • Header background/color and title color overrides in dark mode blocks were redundant (CSS variables already adapt automatically)
  • Dark mode blocks now only contain properties that genuinely differ per theme (box-shadow, overlay opacity, glow colors)
  • Removed empty CSS rulesets - Cleaned up unused hover/active placeholder rules
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
Signatureco5vmh+pDQ1xCuO5N6wLJAdbPeSgWeq7ngkSvpofmOBEA+CCU41FDF/gqArouGO+L9eND4ZGaNFJ8eENrNH2RLsEl3g2NAtiuUyCEZnywvb3RGx4uChLHfBwUWWltdIVwIUXSfMtpH3twvUljRM0N4vrp3FkcDPKaO3hjTi85D+fVWMEBvj3zbKRcWvVKQsJ5Km9ttiEC126Zmi90NQPqJwnfkUTjx2fd1aII7qX09nQIAU9LYBsGVCQxZ/ffCFRNLi78n/y9zQ5lofvmk/11/41qIqLZfD+mn1A4FHgn2SZU3ydosTHU9AoytaGhHCVHOu58Ty/N2OFXjsMCJd0/73kzj00/on+3M5Gy5pjs8/4GOXR3LXfGhCwm/AIRjQGFayTUCRYJO7X1Qcl6qdj/OlU7VNDag/vDGYPrlo+a3Uomge/ha+FGXZxDy3APWxGpxZDMe0cAQbbNv7iFWjlNbA/Vod5tfee5LtPEjxoH/qTmeSGT7sIkMS/6ZUkdKUzsxERnTeNFKLaEjKfMttqT4nDUKG2eOdGU05BR9wxxWpThi3Y/U/AwMqwahnLgWoNBMR4fDrfzwTsI6mVOEyYJbFBpCgZguU+49iUaAt3ErbtQPtuhJ8XsQMEbyunh/sE9DmRRY+J1YueIc+r+L6WIHuzUQ+49c2FkQSkq+3h1cA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
IntroVox 1.3.1
Release Details
UpdatedMarch 26, 2026, 10:52 a.m.
Changelog

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 for users outside allowed groups
  • Added defensive error handling in WizardManager.vue: HTTP 412/403 responses now correctly disable the wizard instead of falling through to show it
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignaturecLvldwu7VJk/5yMHCJja/0N93URQgrJ5gdu7BBcfkJwl5/yuL5D86MZYs/q7QYzj5KLiMIdRd/3dhc7CGyL29c8ma5hrRPNojL1bYao/4EIOzyWuIyFGWzycDbNpnXiUq9ZWASO8/MnUx6vib18ceknqvvjdkIG4Xw0JT/zdx4UFML6whimQVFO9GIKZcADOGmvtlG/VltEv+CqLHTsQrguWzZwnJydWbMcsLvGBxfg/08HwV4w3EGX3FmppFl/fIlX0F96AYGWme+LP3VpEpYRaceZONY0pgg07o2rnURot2Jp8v4tR8B2py/xgVzPD5bgl0tBKbjsDfP+v9fwE4gMDv7WNxh2KaqtrGQeTuYnD336zxZZ4In8n2Ryu4uxAwKOm+8uhR/9ZJSRGP6reCi98/hRoeitkrB+8JGWgrDhA1DH36FcEnp/EA31rfXJAHG940TVV6Bi40nkFMV+HqtShYcJQ+8tmC1MqyvmIkqOkxGCCU2bxRakW3lAPLxLk5jJRRZkJNutxtX/WkU6QAQIj8KLa2NlBGj8S5G8sOJFvw9G6uDaHLSm4PvKSsUdivyTI+eFwSWhfD5dX33LDW3WIAtJI/xfCCKOkA6kl7NGzIzWDYWhgbSnIzvZzBLxObI50uwwD7vO4He0mKSm0bZ/YVTa8meprKw3F+lRchis=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
IntroVox 1.3.0
Release Details
UpdatedFeb. 18, 2026, 1:37 p.m.
Changelog

Added

  • Nextcloud 33 compatibility - App now supports Nextcloud 32 and 33

Changed

  • Migrated admin UI toast notifications - Replaced legacy OCP.Toast globals with showSuccess, showError, showWarning, showInfo from @nextcloud/dialogs in admin interface
  • Migrated admin confirm dialogs - Replaced legacy OC.dialogs.confirm() with promise-based showConfirmation() from @nextcloud/dialogs in admin interface (5 locations)
  • Migrated personal settings redirect - Replaced OC.generateUrl() and OC.appswebroots with @nextcloud/router imports for tour restart redirect
  • Improved dependency injection - Replaced direct \OC::$server->getL10NFactory() access with proper constructor injection of IL10NFactory in AdminController

Removed

  • Unused @nextcloud/files dependency - Removed from package.json (was never imported in source code)

Technical

  • Added webpack resolve.fallback for path module (required by @nextcloud/dialogs transitive dependency)
  • Admin bundle uses @nextcloud/dialogs for all toast and confirmation dialogs
  • Personal settings bundle retains lightweight OCP.Toast usage to avoid bundle bloat
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignaturerJf/b/Mk7afjb4gUNWyxlpuL9QR8h1B92KEg8LgFBCBKEWwW/AUjs3gxnRlizhbcAYo1uhrmXg/xVzzkyJlMlKP2XV1rvxDtaJqALeOq9CEg0gKaVvQoLYfYGA+og6+6ywwqDhCPSiTRAHCrR0E4U5UL/lZVf7+sw7Z8nRZwcsugMQgP9OZtOSqI4Ye3TfRn0q++2RKmX4ZBFfcHqZuRtdPLk/QdIJR4iRA8/kLqfT7dHfTDKmqtF7vl17TEdvi6fsdJxAx6ctUPLvuZmBtAcP5SrNDpbWI+CwLLgDNspsTIQUQnenT3fhiuPBkaJHd3hf+imkVzXqeYpayPYTXXx/z9juONOLyHVVcLG+d1O5BqFu3G+ULvhAfiLmKNBkh7YTJdAITDZkHZ2HY3EHZtgi1+J5ca2jRchIS7vp1e/v491G7hm99w7aNncUWsXzR+V8dk6W7+w6eSvJMkb+q6gPzdIreG6HgV0RPQGLnZG69V13BJ03NczHR/oliKF0AwrzBwACamBL3ziwNxOrPIbzrn2HLI0bmuZCsqDB3TfrzIXWvRIJIqNZX/Pn7/NZJ19K3nEcTu3Uzt6H/YAq6phLntn26cTVeI/GeiRqNFOr69gBNhAftdfS2p7srXGXzbBSStblEXiD4qJwUo+otqPpFFFZ4ay0K01XSzwsvipG4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
IntroVox 1.2.2
Release Details
UpdatedJan. 31, 2026, 1:29 p.m.
Changelog

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)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignatureyQSuZAsK+xuddGyEST5KMiuMldN/kSlBsWjO9P4k2yZi3uA7iw6I2wnE2WzQEPd/rItUk8eURwOSEoEyKI/Vbr55ez2+lMW06vK4v5OIISndCNKl63O4tWCtUSgEzqsu/tU+Tb+xaIExzXAcfeZ0HvjYwNhKDtCYWhw9DvMsxJZycX/ZEagp6vSmPLSYS6lfJcYwvSHltwjxW8X4MpyqmeIgd7KUQeUk/fp5YSK+cLP+yS3zMndsa03Ml3fRBxfeOVh4V642NWxzs0iaudB0j8cwsVTtRYmIVDZBa9HNejmHcRah83dirxdBJpahj4lVfA+isRkxR+gUaSsp/oI425sg/vJlODXXmuMmIs6ITlwmhGCieQgdaiH50G8kcUHQD95auZPcPzNKOW2EfxYtMyvzyVjf3smJ3eO0sFFTC4wpGYjZkOjYoDRbCF54/YpI3YTXfizU5+Ho+70afkwUfsYFFuxxrRMcjSdmZpXy8lqia7VIY689tUtXurtFE4jyTUMMcvRDZe7IuVKoFGbHd9BMXZNFKqvHM+QftbJvUtydeWquFeHZ+AHunUASqnYlism4htRQ9cFDmDf98AftXYuH+D4gNJtkijXcAgQmbbg7JgMIS/EwkcAXygITxWUz1nJjd7tQOKuiYop9UBqeUplWKM+ylt7dUxjOUr4Qtx8=%
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
IntroVox 1.2.1
Release Details
UpdatedJan. 23, 2026, 7:08 a.m.
Changelog

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 (ISO 3166-1)
  • defaultLanguage - Server's default language setting
  • defaultTimezone - Server's timezone (e.g., "Europe/Amsterdam")
  • databaseType - Database type (mysql/pgsql/sqlite)
  • totalGroups - Number of Nextcloud groups (count only, no names)
  • groupVisibilityUsed - Whether group-based step visibility is used (boolean)
  • All new fields are privacy-friendly: admin-configured values only, no personal data
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignatureetO5jWsYm85wc/caHNRpO5FipMRBTZwOjmVh7MOXb65jh+p/F0jd7XwEWQFz+LcoH4N0oHditz5w9xN0uGjEG/Bymyh/im4YxGJJgLKBbSj3lBNs8VfR1EGBIt9VdTtVyWAOj+slOOfd6r4oCyFHelazqC2rfqVkfh1jyV4azaXVS2yInwdu1wJzm36g4Or8Ny3aTeWe7KeSFMocBCyq1473r4CtYR7n8QFaIURzRHTewIe6zocxy2/Q3W+/HEMdjxNle1j2usn9nwpzmexPKUWcT6EdXjEkCzj5xw+pdWAc50oNg0CefmzKocUPFo/OC65SfOqJOYv7HlXNbhUR0ROG+7eKR4zYlYcq20MDZwQmwfuIK3t8SslK1fDR2r/wNR+jcEAzWGHP7F5nJcMaXyHpd8hUu4ZVkavmvgULWMKdHldPr0nZ5lMpMwUeRDNG5AmlPIWFQRnKICXXPa+ExMj6UfgG8aMNi7PrCu+WRcWEzL2F1RHIBFwzUa/WEYcV/mivwhnjHyiht4NvO/w318zrkCRECahZBcywB9BE4i/dq3qlFFYJ2UB9RkuNs7msxIhklk2x2Ff6pW1X9gP6ZZyfPhsT6pqo3p2Lfde7ucU9BWQdmrkoLzNO8rwqb58TLGoQFVQYxqj9f0+akdEo5LNDBgMSGMBa2uYEwRPPigY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
IntroVox 1.2.0
Release Details
UpdatedJan. 22, 2026, 9:14 p.m.
Changelog

Added

  • Group-based step visibility - Control which user groups can see specific wizard steps
  • New "Visible to groups" multi-select dropdown in step editor
  • Select one or more Nextcloud groups per step
  • Empty selection (default) means visible to all users
  • Steps are filtered on the backend before being sent to users
  • Users only see steps they have access to based on their group membership
  • Perfect for role-based onboarding (e.g., different steps for admins vs regular users)
  • Groups API endpoint - New /admin/groups endpoint to fetch available Nextcloud groups
  • Automatic migration - Existing steps automatically get visibleToGroups: [] (visible to all)
  • Admin statistics dashboard - New "Statistics" tab in admin interface
  • Wizard usage metrics: users started, users completed, times skipped, completion rate
  • Instance information: total users, active users (30d), total steps, enabled languages
  • Real-time statistics loaded from server
  • Anonymous telemetry system - Optional anonymous usage statistics
  • Opt-in telemetry sharing with developers (disabled by default)
  • Sends anonymous data to licenses.voxcloud.nl/api/telemetry/introvox
  • Instance identified by SHA-256 hash (never sends actual URL)
  • Collects: user counts, step counts, wizard usage, NC/PHP versions
  • Does NOT collect: server URL, usernames, personal data, step content
  • Manual "Send now" button for immediate sending
  • Background job runs every 24 hours (with random jitter) when enabled
  • Wizard tracking - Track wizard start, completion, and skip events per user
  • New user preferences: wizard_started, wizard_completed timestamps
  • Aggregated statistics visible in admin dashboard
  • Privacy-friendly: only totals shown, no individual user tracking visible

Changed

  • Admin interface restructured with tabs - Improved organization
  • Tab 1: "Settings" - Global settings (wizard enabled, languages, show to all)
  • Tab 2: "Steps" - Step editor (language selector, drag-drop steps, group visibility)
  • Tab 3: "Statistics" - Usage metrics and telemetry settings
  • Improved admin UI navigation - Clean tab-based interface with visual tab indicators

Technical

  • Added IGroupManager and IUserSession dependencies to ApiController and AdminController
  • Group filtering happens server-side in ApiController::getWizardSteps() for security
  • Steps without visibleToGroups or with empty array are visible to everyone
  • NcSelect component used for group selection with multi-select support
  • Export/import functionality automatically includes group visibility settings
  • New TelemetryService class for collecting and sending anonymous statistics
  • New TelemetryJob background job (extends TimedJob) for scheduled telemetry
  • New API endpoints:
  • GET /admin/statistics - Fetch statistics for admin dashboard
  • POST /admin/telemetry - Enable/disable telemetry
  • POST /admin/telemetry/send - Manual telemetry send
  • POST /api/wizard/start - Track wizard start event
  • POST /api/wizard/complete - Track wizard completion event
  • POST /api/wizard/skip - Track wizard skip event
  • Background job registered in info.xml for automatic execution
  • 35+ new translation keys added to all 6 language files (EN, NL, DE, DA, FR, SV)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignaturerHO4cge2t0bJL36fLvdoJdadc8atcHaTbOClE+dY3c8W0ulBS7045KXs0BPjDDx7UWm1eRzZ3GJIoJkBEmn7CyyKhaC2AxKQjJ0PDJIj9qBeadF7wykz2u7Z+wDp4xkWZqcxp9UHv3xPBdY4wiuJMTrCoswgnr6SVhCkZ81WecltGd2UHSZW4mRKBE2OcYY2mmNIZaFdkUuYyHsjxv/Icxbrv97ucKHru5M92H/IHDG35/rH5RnIXIJCKcQ74Axr5/f8q1uEpALtBGwvuRbffH8M5xASRHpLd8RWVxKBoN1JFglpwugk+R4VZgI2hzoYU2gIOXHNANwe/eVoHZBbD9v7N4zVBO5hyuPDARaeFN/2Ef2L4C2JlJSc5wYJaXcr3dGVXZR+IrsIeFbPY02fEyRccl1OKuYKykOu3wxcAU8cGRm3kmTHFD6GzrbkToLyJlVZtd2WqcVPHVLg8r2Ca2TDeFP3MSqP90795sFS3UfjkK8uWaQRb3BKZeBszMUImkgPpmKKCOiq4aLCpUlwAtN07xlq/Oc+MZayOOtxbb6d7AHLpf+Gi1tW6eLRXxmCgmlgFxLZaDn4HI6lwknUx1EFQ6qsTN9622NEhKK0A9bfmjaTukJe7IoIa8Sss8IwX3hctFHRLFyXeTO1RAb31mzdg3zRjer8KfxotTEDy/g=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
IntroVox 1.1.3
Release Details
UpdatedDec. 4, 2025, 7:05 p.m.
Changelog

Fixed

  • Auto-scroll to new steps - When adding a new step in admin interface, the page now automatically scrolls to show the newly created step
  • Backdrop filter blur removed - Fixed text readability issues on small UI elements (buttons) by removing the backdrop blur effect from the wizard overlay (PR #10)

Documentation

  • Emoji reference link - Added link to Emojipedia in admin manual for users wanting to use emojis in step titles
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignatureCTNYVq+RteslhmsktYxZWArHhas49+iSxyU3/2iNyApo/iYr4Yxg1c0/UyIitHikR3Yl/0LPOYB7piZGSwyoNCKcic5RSDw5tju1LK+s3TUlpv4Y46HdsCZd1c4ClY0S6l1f4ddehf6o/fMN1xnwLj8UWGiq6GRCAJfM+gfN9cbrZZNoY4590YJcTfFmC8oLqkofVeGg7UWRyo2o7w2I72PlHcSFOeVipQ7bg+PO852yJ3gBGOVXK5FzyuqHVrb6Bx14Zy+Rjf9m2e9dkMpa58mj22X8xkrI6Z/9Fi5u12Br02bUXVCjFxZLcWbN85RvNv0QKsZUzyM+jX3ngkj1IYMkPgqzuMRbkkTcB2HffYSfDIhpnZ1nLA3QGQrKhhr3+joINUsf3qRDhR1UH+9l2st0itI2IE1T8X16eM3+Ei/u7fnRtvE5r4G6AAbKDRhyORVTv1fPaqbv4AOExdZA0w80uF/rYYi7o7WQy62qBGRz47LrFiaSrSlllkHt/wmLrmtW6jHQSpka10Z9ivtjE6CQ7kqRv1wngji1g8bmel0HVVGduCCt+LlSrXIRiBnVJ7qOWtboZVA4lNJXTeTEY4tYkEn4iM5EjCPGV/zlfn6CI8jODQWe97z+Fd5zBOrEH341WmlI2ddWdC7y7AZhHZlaV9NUH+vvpHaqJwgOkUo=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
IntroVox 1.1.2
Release Details
UpdatedNov. 16, 2025, 9:23 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignaturetK41snYRmiiOUJ9DxTjJW3ehWpag15Bmiq/340aPDHv7zgefrFtOK+SHRJAF+6WhQr+AUyHkK20FUmqSWQcszFEJ5cl71miBI4wjxC8cQpcsxPHsg/YnlVRM1M9YKBXrK7wB4kme6s//6G6JcF81hAOXghdSlQPp8gcK3aFaj4ZRaAby2VGkkN6603zu8iVP9Eb67ZeO8ZgGschXZNsjsgoXA1v1FPFHKI1XRVmBf4yuQZFZmIsbpanemG95q2lMt0YP/Rz8sdSG2cJoGqDcEWcpuuZ2ucnQ07Y6+zvATXo/RumyFtUjR3PF5uVeicpwBDL+YxZnMLdPokWZkWRi0whwf3gbKKAnftbPKYVa7WyfXaqfKDZb2qS0j6xB04ZYSVKoXnnXlG3buTI60G8poOBbAwtWdLrmIEH+4S2H+kwJheHPp+KpFbBxwj8E39B8caWzpzcDuyo6MRxyB/ikPkZ7LKjcv5AiFY8BL0xNpDq9WxvW9TYy+RxuoRZdFiOZ7ZbISQWqHX4vdWtVLI7yu2/etZkbX55uAv8ZXPVt8IlJ5MUniOnuAqZd5HRbLcR1n+6zsnC5zdVu41SKCcXRo0UOFsdbFGPvSj7TwyEV3+gPV/HkKbxp5Cp8F9qLzDEb5HxqG0amtX6HbSr7KwP+iJ6S2BdMpE2IAro3lHMYIQw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
IntroVox 1.1.1
Release Details
UpdatedNov. 16, 2025, 8:58 a.m.
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignatureGPLqvf6KovfxUFHTpdSboGXfdAg9xQDpdyXF68EsTFk98rEBBwAN0vTYORyt4tlRKsz1AlyI9oH+tVZBpDEHSOqK0pslOTJF26pEsJpvyEwr+VQcuaSNw/vmUSqh5kmXEtU2AHHttCAarnxHHMsBTddUbVqbMG+mP2VcqJYpij6NbuBrYlBLx52wrepIE+P9HpvpkzsvyMhOXNtDwYYvhySDlaoXMUxV8FJzT/xx9q27ZRbVnA6WUuIRUVwfLTWlfwlbzbH0dWv6I59auqN3iDW0myX/kpDR0weWJFSbZqQluczk3OGyhi/Xfao6sePUafeumSI3xw1lvvSRfMIopbzksb7kkXp20II86KIfKWwWofPYf8ZNdgC7+mmCR+Y2/VXp3bQpq1mTKkTizsGYsUYcMaBov+bhMuJRbU1mbBWlojBt3+rucnWrb5ywaRzNzn07d7gCbh8sKjwEqse4ZEKd1FeOmi9j5j8hIj7rjrKjvxGLSpqFbYPXpLTu42ou8vNLMDNNblaHhXR6Zu+IvADEo5r1KRkOnnYtRb6LLU16B1K+p1DTDTCu4CmtsrRmhxZgXibIvLmT7DYe4GAH2DsAk2VMYjfR5+3nqNxkJ1Ovyuz9Xchm1MElQJBTN0lX1LGlAVZ0qldDxL1Jd6FJ9L0JQ+Tz+hazd8Wxb8ds4QQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
IntroVox 1.0.6
Release Details
UpdatedNov. 4, 2025, 5:15 p.m.
Changelog

Changed

  • App icon - Updated to compass design with black color for better visibility in light theme
  • Sidebar settings icons now use dark variant for proper contrast

Added

  • Documentation link - Added link to Administrator Guide in app info.xml for easy access from App Store

Fixed

  • Multi-language wizard support - Wizard now starts for users with any enabled language (not just English)
  • Admin language selection - Admin panel now automatically selects first available language if English is disabled
  • Step visibility bug - Fixed issue where enabled steps were incorrectly hidden after reordering
  • Changed from index-based to ID-based checkbox binding using v-model
  • Improved Sortable.js reactivity by creating new array instead of direct mutation
  • CSS selector improvements - Updated default step selectors to match multiple UI element variations
  • Search step: Added fallback selectors for unified search button
  • Files/Calendar: Added data-id attribute selectors for better element detection
  • Prevents steps from being skipped due to element not found errors

Improved

  • Language detection - Backend now checks if user's language is enabled in admin settings
  • Debug logging - Added console logging for step filtering to help troubleshoot visibility issues
  • Admin panel initialization - Global settings now load before steps to ensure correct language selection
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignatureC5GFElER3Yw1+FVu1kWMbOwV0y45sJs4XpLfYqdPDHIcg5y/Ds6v4Ha2RCfZdtAZPA6ck04IPQz76NeZSV7Fp2+kjb0Na197nNTdJTG8Vic7HAJA8NpFGqqnQU9kVy3BQlc0DCVAfol1rmQjFIO0RLdjpQIwWuJHPoHguN23gAcDa5ryWSdBBO4D/t1HWAJQtuTV/pS6PbkvrjCgQG7yoryJEa0eg0Sh/xGWzagP+755OfNWe2fdjnz140RkmS/bZDexMs80rhV+Vcz54GI2ZAJA3qvp8e54z86QI3vTe7hgQxh6QKFRw9eVkW8MaXXB+oJa3qlGJZ+75CWiAlPl0b/pFUKkSIi9WngXDsbDmaBY156o+uKg4WSrHvJtgcpuEkvfCfb/JWyLjJ4K1VeLIFCWV2p690GNJKggrKjB3jOTPn7z1iXgAtJE4rK5+ExoekVJjLvM2PQz8UCLrAcY5v/Bxi1csV8Ps4zeeV8FYC/AcJHo2wyjQ/yz8XSbBQoMi7rCbZMsipsWZnwLm1JdM+zhyG3WCSWcS94RCFcuRUV7DDHhSLW79+8+9e3sVAZNCAtd1DwPDeADAnYLpPxmzOA0zJz1D4lVhmPmllKv1IPnTY/UptWK40qX4vq4Vy/aQM5SFlyDcUIAGNFtOp4/TzK+BCFFG1ZwjmFi32HDFD0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
IntroVox 1.0.4
Release Details
UpdatedNov. 4, 2025, 2:14 p.m.
Changelog

Changed

  • App Store screenshot - Changed primary screenshot to welcome-step.png to better showcase the wizard experience
  • Reordered screenshots: welcome-step.png (primary), admin-interface.png, personal-settings.png
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignaturexA7T6I2DHmEoK/0QuF36tgTY2Pd9aHamorIHt4OHsFbsvB1FwY87tY2xmzfGC0ZKx8bHdVRdsqQr3a76fC54b0Pty2KydmNzKpN/NIdGUGN1b0iCf2q1GET6TWtPrZC1GJ6DTL2D4RfIEyWIKa+FR5xWFzuX/TubepBzN8jOqJtU6OWaY84mP4PoPImVEQ1TQNyYC5u8VQhjK8fPmEq687ajWJu8+m8jyZjLKdeOkuAk8ob3TVfrWkGiEnKotdxuBIGMj99AZ0Topz+HpbCUsFpgEGWsDfFfqjaY0oFLRs7/14E6JBroHh6PfpC0ChVSoyBK9nCWszHZxos4myfogR9uNrtggZyVFFCfTdgw9hvj0Xax7wl71MzWpjNQmvVo+8Y7VfOnMwdFVhzdjGMVJW1AR4c3LNIkRhG4KEy4W+nxD0R+neTujlVRe9SuKMVfw8cn9AWMXuL0AoNjGTE5CqcBN1xjowfEu02i4sRM+pTp14TQIdIJBWlzIb9xYpHUcWTMaQUNKch5Vd4PBaLUrWkig9EttrHDhnHx9Zx4JgqevaWFNvtw7fZ22nwrRvvA0JSukyCZW1WVqApW0oExq1tZmnDZekPEGEAX1M3jxFD6byz8NSxERzqS3+/yTZlwvnNmJS6PzZHpWYypKIpJmoTzSFFhz7rtpIH2HpU0YD8=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
IntroVox 1.0.2
Release Details
UpdatedNov. 4, 2025, 12:14 p.m.
Changelog

Changed

  • App Store metadata sync - Force refresh of App Store metadata to display correct author information
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignatureF1nPI25DMNGCJsHnkcaoUOKEk8ETdoMUOV/PZb3+qvp0xvBccUFf74vHIb1vD+Ds
lJlnicTS2XkTkiAAhSLWEz0OQzbVqoU7E4Hy6k9QrOVAbwWMpeqB5tzK5KvV67Vx
EsjNySuA5vfSllx1JaWx0bPzPKxtJHi/xl3/mG9esCp0QQFim0LrSFGB9Jv8pN0e
bLUR/OKnxHpSBhuRgwILM5K4iqO5JM1kvHig0rWlU90ENbqL5kszDJaZMSoKWDNZ
cSe9OqDjPRYhu11frUMEmoxQFI4X0lfk9kN6O6vpnfi21KUCgOs8rg7Z1A00NK5M
IpiL0A/TUCK/fpY0h1omf8fNyT65dB7I0JxT62RTrJ01LBlmndCPwKUBoAjsT13N
GkK1hU0cD1mT2ACtp6RGx5o32e7657iyRBLzSGOIuMkh5JzOPw1ZMkbkBLEhlcsa
XjwSXMLZRKveKjFSs83376piggQ5EgGvvqcAxb9jsBkJe4Bh+Bez0miBUH7ULHsB
bL6Pf73Yv9oktqauog/xrXNJ5wPRlJ/ZQ4fg+rXZa+q6vTwqFIZJ12y/WxxovEb1
OsYez/VVlrvoO2PgCivwzQ6u20q4VaAYYWPUJeHVnxlIBXrh2yr4vwwL5b67nfZl
Hz6NkdEGBfcxEnRYOHN61+jxeo4939i0hPvaRRUW0zo=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<33.0.0
Minimum Integer bits32

Nextcloud 31

IntroVox 1.0.2
Release Details
UpdatedNov. 4, 2025, 12:14 p.m.
Changelog

Changed

  • App Store metadata sync - Force refresh of App Store metadata to display correct author information
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignatureF1nPI25DMNGCJsHnkcaoUOKEk8ETdoMUOV/PZb3+qvp0xvBccUFf74vHIb1vD+Ds
lJlnicTS2XkTkiAAhSLWEz0OQzbVqoU7E4Hy6k9QrOVAbwWMpeqB5tzK5KvV67Vx
EsjNySuA5vfSllx1JaWx0bPzPKxtJHi/xl3/mG9esCp0QQFim0LrSFGB9Jv8pN0e
bLUR/OKnxHpSBhuRgwILM5K4iqO5JM1kvHig0rWlU90ENbqL5kszDJaZMSoKWDNZ
cSe9OqDjPRYhu11frUMEmoxQFI4X0lfk9kN6O6vpnfi21KUCgOs8rg7Z1A00NK5M
IpiL0A/TUCK/fpY0h1omf8fNyT65dB7I0JxT62RTrJ01LBlmndCPwKUBoAjsT13N
GkK1hU0cD1mT2ACtp6RGx5o32e7657iyRBLzSGOIuMkh5JzOPw1ZMkbkBLEhlcsa
XjwSXMLZRKveKjFSs83376piggQ5EgGvvqcAxb9jsBkJe4Bh+Bez0miBUH7ULHsB
bL6Pf73Yv9oktqauog/xrXNJ5wPRlJ/ZQ4fg+rXZa+q6vTwqFIZJ12y/WxxovEb1
OsYez/VVlrvoO2PgCivwzQ6u20q4VaAYYWPUJeHVnxlIBXrh2yr4vwwL5b67nfZl
Hz6NkdEGBfcxEnRYOHN61+jxeo4939i0hPvaRRUW0zo=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<33.0.0
Minimum Integer bits32

Nextcloud 30

IntroVox 1.0.2
Release Details
UpdatedNov. 4, 2025, 12:14 p.m.
Changelog

Changed

  • App Store metadata sync - Force refresh of App Store metadata to display correct author information
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLHMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMTAzMTkxNzE0WhcNMzYwMjA5MTkxNzE0WjATMREwDwYD
VQQDDAhpbnRyb3ZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMtM
AMZDlX5HabcqoMolL7vQ9XUZgujUkogQm+/ZuPSnuk0lQD3H1RGFYCl/2M7o+kMy
kBeEJmy/B8S3kbcGZVhBmoNpDlSfLk/zENPaBMJ+OS3iSFPOXRwP+oXUjvSLiUk7
E4a+foTxVraU08gZJQTNbkcAeJV5AJTzy7S78iYS57o9PB5ZwRQamqSQ70VsgQv/
FlhggtQ4D8xVJH7ErVgua0jPcLW7lqthBFuD8OlYkxwksJaqRvONPrYQrkNUxiNE
X2FK6+rdmsEea1NAPU3hDR4EJKRheSlCCrpyK6BZ75rQRl9agm0WfynVjRjWyirE
cQSe6L5QmtanzEacd24w4jMoCe6PCFJZmdM8A5YCsnKPnyJWLeGyZnzzvvP5Qpez
SJg0isItHR+UzEu6TYN6mh0WPMxc1uIINIRXrLdtrZGMMgknBYSFxugn/D0cgugF
eNubz4663X2AnkuS1KgLJcQd9b6tYzVpFzrii0xUUbspKXxD1l19C/YRuPWnTqaQ
oFlieVAfB2rSxn/pdOjC1E2cxAXHHsGanoSSCv0RevgO45QvZZzdbOj6vucp+837
+PV/YyppWI+fNu0SfxRV9fxhMe5u1isW3CVolxHJsq5jyoUdmdvEZsH2Dej3hxdK
/BlCgQMdCdM/sN0NjtJvnVXSOsX4Gf93f9zcBMYlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBADucER0c+mq8wl3cFEwfBu/nSZy059g10Hh1hb1U0vGjop/A30iezfEY
Cde5K85NesN/jRG8wSl7uaUtPcBLgSOQ688SfvY9dOfBrHNAJOXShXA7XF2gf0I8
vn0iO2Cm9Di7v+z5N2jWsD3OO/2VVUsuWLZWJK/QKB37TI1MkyJKW2tt/4p6jIcD
k5IAAk5i1Mv/pqBfFx1h1wWZ/BHjSVH1b5xCIqwIJJizpvA2X9Lwrp+kxFcrWlQ6
Gsx93TGXMQdtGnApX8EZBMF/yIH1BzL8OZ5VZa3D7qAchCXqCokYXb6zmiiRNiEt
S/Uxq9Vhiclcf7p0tzKWYm+9ugq9TaQ=
-----END CERTIFICATE-----
SignatureF1nPI25DMNGCJsHnkcaoUOKEk8ETdoMUOV/PZb3+qvp0xvBccUFf74vHIb1vD+Ds
lJlnicTS2XkTkiAAhSLWEz0OQzbVqoU7E4Hy6k9QrOVAbwWMpeqB5tzK5KvV67Vx
EsjNySuA5vfSllx1JaWx0bPzPKxtJHi/xl3/mG9esCp0QQFim0LrSFGB9Jv8pN0e
bLUR/OKnxHpSBhuRgwILM5K4iqO5JM1kvHig0rWlU90ENbqL5kszDJaZMSoKWDNZ
cSe9OqDjPRYhu11frUMEmoxQFI4X0lfk9kN6O6vpnfi21KUCgOs8rg7Z1A00NK5M
IpiL0A/TUCK/fpY0h1omf8fNyT65dB7I0JxT62RTrJ01LBlmndCPwKUBoAjsT13N
GkK1hU0cD1mT2ACtp6RGx5o32e7657iyRBLzSGOIuMkh5JzOPw1ZMkbkBLEhlcsa
XjwSXMLZRKveKjFSs83376piggQ5EgGvvqcAxb9jsBkJe4Bh+Bez0miBUH7ULHsB
bL6Pf73Yv9oktqauog/xrXNJ5wPRlJ/ZQ4fg+rXZa+q6vTwqFIZJ12y/WxxovEb1
OsYez/VVlrvoO2PgCivwzQ6u20q4VaAYYWPUJeHVnxlIBXrh2yr4vwwL5b67nfZl
Hz6NkdEGBfcxEnRYOHN61+jxeo4939i0hPvaRRUW0zo=
Signature digestsha512
Dependencies
Required Nextcloud versions >=30.0.0,<33.0.0
Minimum Integer bits32