IntraVox - Releases

← App details

Nextcloud 33

IntraVox 1.3.0
Release Details
UpdatedApril 21, 2026, 9:26 a.m.
Changelog

Added

  • Feed widget — New widget type for displaying external content on intranet pages. Supports RSS/Atom feeds and admin-configured connections to external systems (Canvas, Moodle, Brightspace, Jira, Confluence, SharePoint, OpenProject, and custom REST APIs). Features include: list and grid layouts (2-4 columns), configurable display options (image, date, excerpt, source, author), per-user OAuth2 personalization for LMS content, OIDC auto-connect for zero-click SSO, manual token fallback, 15-minute server-side caching, and public share support (FeedWidget.vue, FeedWidgetEditor.vue, FeedReaderService.php, FeedItem.vue)
  • Feed widget: connection presets — Administrators configure connections in Admin Settings using platform presets that auto-fill endpoint paths, auth methods, and response field mapping. Presets available for Canvas, Moodle, Brightspace, Jira, Confluence, SharePoint, OpenProject, AFAS, TOPdesk, and Custom REST API. Each preset supports platform-specific content types (e.g. News/Courses/Deadlines for LMS, Pages/Documents/Lists for SharePoint, Bugs/Recent/Created for Jira)
  • Feed widget: content type selection — Widget editors choose what content to display per connection type. LMS connections offer News/Announcements, My Courses, and Upcoming Deadlines. SharePoint offers Pages/News, Documents, and List items (with library/list selector). Jira offers project filtering and content types (bugs, recent, created). Content type selection happens in the widget editor, not admin settings
  • Feed widget: SharePoint integration — Full Microsoft Graph API integration via OAuth2 client_credentials flow. Automatic token acquisition and caching using tenant ID, client ID, and client secret. Supports SharePoint site ID resolution (hostname:/path: format), page/news listing, document libraries, and list items. Admin configures site URL + Entra ID credentials; editors choose content type and library in the widget
  • Feed widget: image proxy — Secure HMAC-signed image proxy bypasses Nextcloud CSP restrictions for feed images. Supports JPEG, PNG, GIF, WebP, AVIF, SVG (with sanitization via enshrined/svg-sanitize), and ICO. Daily signature rotation with yesterday grace window. All feed images (RSS, LMS, SharePoint, Jira) are proxied automatically (FeedReaderController.php, FeedReaderService.php)
  • Feed widget: OAuth2 account linking — Users can connect their personal LMS account via OAuth2 popup flow (Canvas, Moodle with local_oauth2 plugin, Brightspace). Connected users see personalized content from their own courses. Token refresh is automatic (LmsOAuthService.php, LmsOAuthController.php, LmsTokenService.php, OidcTokenBridge.php)
  • Feed widget: sort and filter — Feed items can be sorted by date or title (ascending/descending) and filtered by keyword. Filter searches in title, excerpt, and author (case-insensitive). Applied server-side after caching for instant response
  • Feed widget: custom request headers — REST API connections support configurable HTTP headers (key-value pairs). Enables Nextcloud OCS API integration (OCS-APIRequest: true) and other systems requiring custom headers
  • Feed widget: design principle — IntraVox focuses on organizational content (news, team updates, external feeds). Personal Nextcloud data (activities, notifications, recent files, Talk, Deck, Mail) belongs on the Nextcloud Dashboard. IntraVox does not duplicate Dashboard functionality. For organizational Nextcloud data from remote instances, use the REST API (custom) source type with OCS API endpoints
  • Calendar widget: external ICS feeds — Editors can add external ICS calendar URLs (e.g. from Moodle, Canvas, Brightspace) directly in the calendar widget. Events from these feeds are visible to all page visitors, including public share viewers. No Nextcloud Calendar subscription required per user. Supports up to 5 ICS feeds per widget with 30-minute caching (ExternalIcsService.php, CalendarWidgetEditor.vue)
  • Calendar widget: LMS event deep links — Clicking an external calendar event opens the event in the source LMS. Supports Canvas (native URL field), Brightspace (URL constructed from UID), and Moodle (URL constructed from UID). Unknown sources link to the feed domain
  • Feed widget: singleflight lock — Prevents thundering herd on cache expiry. When the feed cache expires, only the first request fetches from the external source; concurrent requests wait and read from the freshly populated cache. Uses a distributed lock with unique request ID verification (FeedReaderService.php)
  • Feed widget: circuit breaker — After 3 consecutive failures for a feed source, the circuit breaker opens and returns immediately with "temporarily unavailable". Resets automatically after 5 minutes or on first successful fetch. Prevents cascade failures from unstable external sources
  • Feed widget: background refresh — New FeedRefreshJob background job proactively refreshes configured feed connections every 10 minutes, before cache expiry. Users almost never trigger a cold fetch. Includes its own circuit breaker to skip failing sources
  • Feed widget: rate limitingUserRateThrottle(30/min) on authenticated feed endpoints, AnonRateThrottle(30/min) on public share feed endpoint (FeedReaderController.php)
  • Page metadata database index — New intravox_page_index table stores pre-indexed page metadata (title, uniqueId, path, language, status, modification time). Eliminates O(N) filesystem traversals for page listing, tree, and search operations. Updated automatically on page create/update/delete (PageIndexService.php, Version001300Date20260420000000.php)
  • Nextcloud search: index-first — The unified search provider (Ctrl+K) now queries the page metadata index for fast title-based results (~1ms), with fallback to full-text filesystem search for content matches (PageSearchProvider.php)
  • Distributed page tree cache — Page tree is cached in Redis/APCu (distributed) in addition to the existing in-process static cache. Shared across PHP processes/requests for ~70% reduction in tree response time. Invalidated automatically on page create/update/delete (PageService.php)
  • People widget: scalability guardrails — Hard cap of 5,000 users on the unscoped filter path to prevent OOM/timeout on large Nextcloud instances. Filter results cached in Redis/APCu for 1 hour. Batch status prefetching reduces API calls from N to 1 (UserService.php)
  • Rate limiting on mutating endpointsUserRateThrottle added to page create/delete (10/min), bulk operations (5/min), comments (20/min), reactions (30/min), and analytics tracking (60/min). Covers ApiController, BulkController, CommentController, AnalyticsController
  • GDPR user deletion handlerUserDeletedListener automatically cleans up analytics records, page locks, feed tokens, and LMS OAuth tokens when a Nextcloud user is deleted (UserDeletedListener.php, Application.php)
  • Audit logging — Administrative operations logged with IntraVox Audit: prefix for SIEM integration: bulk delete/move/update (with page IDs and user), license key changes, organization settings, engagement settings (BulkController.php, LicenseController.php, ApiController.php)
  • Health check endpointGET /apps/intravox/api/health returns app status and version for monitoring and orchestration (Kubernetes, uptime monitoring)
  • Scalability documentation — New SCALABILITY.md documenting all performance, caching, resilience, rate limiting, and enterprise features
  • Admin: connection test button — "Test connection" button on each feed connection card verifies credentials and endpoint by fetching a preview from the external API
  • Admin: connection export/import — Export all feed connections as JSON (without tokens/secrets). Import on another instance with duplicate detection and preview dialog
  • Admin: connection active/inactive toggle — Each connection has an NcCheckboxRadioSwitch toggle to temporarily disable it without deleting. Inactive connections show a specific message in widgets ("This connection is currently disabled by an administrator.") and are excluded from the widget editor dropdown. Re-enabling restores all widgets automatically — no reconfiguration needed. Toggle saves immediately
  • Admin: connection status badges — Connection cards show configuration status as text badges: "Configured" (green), "Not configured" (orange), "Token missing" (orange), "Credentials missing" (orange). Replaces the previous green/grey dots for better visibility
  • Admin: connection remove confirmation — Removing a feed connection shows a Nextcloud-style confirmation dialog instead of a browser prompt
  • Admin: Clean Start DELETE confirmation — Destructive "Clean Start" action now requires typing DELETE to confirm
  • Admin: orphaned data banner — Automatically detects orphaned data on admin panel load and shows a warning banner with link to Maintenance tab
  • Admin: advanced options collapse — Endpoint path, response mapping, and custom headers for custom REST API connections are behind an "Advanced options" toggle
  • Admin: column width warning — Shows a warning when the configured number of page columns may be too narrow for the available width, with a recommendation for fewer columns
  • Feed widget: error messages — Specific error messages for inactive connections, 404 (connection not found), 401 (authentication required), 403 (access denied), and 429 (rate limited) instead of generic "Could not load feed"

Changed

  • Feed widget: HTTP timeout reduced — Outbound HTTP timeout reduced from 10s to 5s to prevent PHP worker blocking when external sources are slow (FeedReaderService.php)
  • Bundle splitting — Enabled webpack splitChunks to separate vendor code (~2.9 MB) from application code (~220 KB). Main bundle reduced from 3.7 MB to 220 KB. Vendor chunk is shared between main and admin entry points and cached separately by browsers (webpack.config.js)
  • TipTap lazy-loaded — TipTap editor and all 8 extensions (~240 KB) are loaded dynamically via import() on first editor mount. Pages viewed in read-only mode never download the editor code (InlineTextEditor.vue)
  • Widget components lazy-loaded — All widget components (News, People, Calendar, Feed, Links, InlineTextEditor) loaded via defineAsyncComponent. Pages only download the widget types they actually use (Widget.vue)
  • Widget watchers debounced — Deep watchers on News, People, and Feed widgets debounced with 300ms delay to prevent API call bursts during editor configuration changes (NewsWidget.vue, PeopleWidget.vue, FeedWidget.vue)
  • Widget initial fetch deferred — News and Feed widgets use requestIdleCallback for initial data fetch, improving perceived page load performance
  • Page + lock fetch parallelized — Page content and lock status are now fetched in parallel via Promise.all instead of sequentially, eliminating ~100ms waterfall (App.vue)
  • Engagement settings cached — Engagement settings now use CacheService with 5-minute TTL, consistent with navigation and footer caching (App.vue)
  • News widget: collection limit — Recursive folder scan stops after collecting enough items (default: max(limit * 4, 200)) instead of scanning all folders before applying array_slice (PageService.php)
  • Tree components: progressive rendering — PageTreeItem and PageTreeSelectItem render max 50 children per node initially with a "Show more" button for additional items. Prevents DOM bloat with large page hierarchies (PageTreeItem.vue, PageTreeSelectItem.vue)
  • Navigation/footer HTTP caching — Added Cache-Control: private, max-age=300, must-revalidate and ETag headers to navigation and footer API responses, consistent with the existing feed API pattern (NavigationController.php, FooterController.php)
  • Feed widget: unified connection architecture — Replaced separate source types (Moodle, Canvas, Brightspace, REST API custom) with a single "Connection" concept. Editors choose RSS or Connection; the admin configures connections with presets (Jira, Confluence, SharePoint, OpenProject, AFAS, TOPdesk, Custom, plus LMS types). Presets auto-fill endpoint, auth method, and response mapping. LMS-specific logic (Moodle POST body auth, Canvas context_codes, Brightspace org unit) is preserved internally but hidden from the user. Backwards-compatible with existing connections
  • Calendar widget: IManager refactor — Replaced CalDavBackend with OCP\Calendar\IManager for fetching calendars. This properly handles both regular calendars and ICS subscriptions. Calendar identifiers changed from numeric IDs to string keys (CalendarService.php, CalendarController.php, PageService.php)
  • Calendar widget: hide ICS subscriptions from selector — Nextcloud ICS subscriptions are no longer shown in the calendar selector since external feeds are now managed via the dedicated ICS URL field
  • CSS theming compliance — Replaced non-standard --color-text-light with --color-text-maxcontrast in Feed and News widgets. Replaced hardcoded #fff/white with var(--color-primary-element-text). Replaced hardcoded border-radius values with NC variables. Standardized font-weight to 600 (NC convention). Dark theme backgrounds now use var(--color-primary-element-light) instead of hardcoded rgba values. Affects: FeedItem.vue, NewsItem.vue, CalendarWidget.vue, FeedWidgetEditor.vue

Fixed

  • Calendar widget wrong events shown — When an ICS subscription had the same numeric ID as a regular calendar, the widget showed events from the wrong calendar. Fixed by switching to unique string keys via IManager
  • REST API SSRF hardening — Connection base URL is now re-validated on every fetch request, not just at save time. Prevents SSRF if an admin account is compromised and a malicious URL is injected into stored connection config
  • Version restore not persisting — Restoring a page version appeared to work but reverted after a hard refresh. Root cause: the backend reused a stale file node after IVersionManager::rollback(), and the frontend masked the issue by showing a version preview instead of the actual restored page. Fixed by re-obtaining a fresh file node after rollback and clearing the version preview after restore
  • SSRF hardening: LMS connectors — Added validateUrl() with private IP range blocking to Moodle, Canvas, and Brightspace fetch methods. Previously only the generic REST API connector validated URLs at fetch time
  • SSRF hardening: ICS calendar feeds — Added private/reserved IP range blocking to ExternalIcsService::validateUrl(). Previously only enforced HTTPS without checking for internal network addresses
  • SSRF hardening: SharePoint & Jira — Added validateUrl() to resolveSharePointSiteId() and getJiraProjects() to block requests to private IP ranges
  • SSRF hardening: Confluence API importer — Added URL validation with private IP range blocking to the Confluence REST API importer's base URL
  • XXE hardening: Confluence importer — Added LIBXML_NONET flag to DOMDocument::loadXML() and loadHTML() in the Confluence Storage Format parser to prevent external entity resolution
  • Token handling: Jira project listing — Replaced direct admin token decryption with resolveToken() for consistent token resolution across all connector methods

Security

  • CSP hardened — Removed unsafe-eval from Content Security Policy. The Vue 3 runtime-only build and TipTap editor do not require eval(). This was a historical precaution that is no longer needed (PageController.php)
  • HMAC key hardened — Image proxy signature key now uses hash('sha256', ...) for proper 256-bit key derivation instead of string concatenation (FeedReaderService.php)
  • API response size limit — External API responses larger than 10 MB are rejected before JSON parsing to prevent out-of-memory conditions (FeedReaderService.php)

Accessibility

  • Feed widget aria-live — Loading and content states announced to screen readers via aria-live="polite" and role="status" (FeedWidget.vue)
  • Feed item semantics — Removed conflicting role="article" from feed item <a> tags. Added focus-visible outline for keyboard navigation (FeedItem.vue)
  • Admin loading spinners — All loading spinners in admin settings now have role="status" and aria-label="Loading" for screen reader users (AdminSettings.vue)
  • Connection card keyboard nav — Feed connection expand/collapse headers are keyboard-accessible with tabindex, role="button", aria-expanded, and Enter/Space handlers (AdminSettings.vue)
  • Status dot contrast — Disconnected connection status indicator has a visible border for better contrast on light backgrounds (AdminSettings.vue)

Documentation

  • New SCALABILITY.md — Comprehensive guide to performance, caching, resilience, rate limiting, GDPR, and enterprise features
  • Updated ARCHITECTURE.md with scalability section
  • Updated SECURITY.md with CSP, rate limiting, GDPR, audit logging, and feed widget security sections
  • Updated ADMIN_GUIDE.md with health check and audit log sections
  • Updated ADMIN_SETTINGS.md with connection testing, export/import, enabling/disabling connections, Clean Start confirmation, and advanced options collapse
  • Updated FEED_WIDGET.md with RSS example screenshot, SharePoint setup guide (Entra ID app registration), content type selection, error messages table, and screenshots for all connection types
  • Updated ACCESSIBILITY.md with feed widget and admin panel accessibility improvements
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureLc6iFEUpymkn2oOpihHrtxmTjKYFZWKcuvfBrf1Xr3us6SzOBhArJpj7t5GHUekRY6sJiuf47lqIDbjzf9fby51vse5bF+n1/QHXdApMDmsxo6EhtM5e3VRWje9A+ZuT2W+Xspdu1owszLqJfQw3TMBFmtAF2QNLAxTU6X8BOwc2Px6MUJnD+aNrOaE4117bBqSv27JihzvyHoz21ey+kZK+vrXaZoXrLzKkf69mPYKMEiVuyKaueTLhuRcihJPZAuVC+ClgZVTueZGDmNQA39xfL9Puy5JpbQx6+7MSL6FKhoN4bXD3ve3DloPsIC35KF+gpH/T8hY6f3vWQgX5mGh5mQSJLHTTkYulKiDcXRq82cDg/o2tpw7D6Uu3R/wVafqGrndtl8A5/okhCHGJnwh7FdG3vzoMFMLdEM03Zlk4W5hiVio5fd1Wy0LVM6SaGM81S9+TrOV0S35vuONStfe56e17wDC9DVaznDTQJW7E7qj4eihX/r0sVD0qQzYoIQ7PvnJ5XNAobWh28TA0eXwOnTwlOSsFhHxBLyt/DJE2CYoEz8YYBNnBgTGthYVKPp/grlWfFGNrRygNOYYMbMSmVqZQ/8liz1OrMcFwC0DoW/IVtmaB8PIGYs7XO8D8IBYRVpklTlQpgFrEf8PpD/8rfnp04VGlWCb/E9tR9x4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 1.2.0
Release Details
UpdatedApril 16, 2026, 10:48 a.m.
Changelog

Fixed

  • People widget filter persistence — Filters using the "does not contain" operator were silently converted to "equals" on save because not_contains was missing from the backend operator whitelist. After a page refresh the filter showed different results. The operator is now correctly preserved
  • People widget filter value encoding — Filter values containing special characters (&, <, >, quotes) were HTML-encoded on save via htmlspecialchars(), causing them to no longer match user profile data (e.g., "R&D" became "R&D"). Filter values now use a dedicated sanitizeFilterValue() that strips tags and control characters without HTML-encoding. Existing corrupted values are automatically decoded on read
  • Editor contrast on colored rows — Column labels, placeholder text ("Enter text..."), column borders, and "Add Widget" buttons now adapt to dark row backgrounds (Primary color). Previously these elements were nearly invisible on dark backgrounds

Added

  • Skip-to-content link — Keyboard users can skip past the navigation to reach the main content directly (App.vue, PublicPageView.vue)
  • Semantic landmarks<header>, <main> elements replace generic <div> wrappers for better screen reader navigation
  • ARIA tab patterns — Proper role="tablist/tab/tabpanel" with aria-selected on NewPageModal and MediaPicker tab interfaces
  • ARIA combobox pattern — PageTreeSelect now announces as a combobox with aria-expanded and role="listbox" on the dropdown
  • Carousel accessibility — News carousel has role="region", aria-roledescription, aria-label, aria-live="polite" for slide announcements, and respects prefers-reduced-motion
  • Live regions — Loading states use role="status" with aria-live="polite", error states use role="alert" (App.vue, PublicPageView.vue, CalendarWidget.vue)
  • Focus-visible styles — Global *:focus-visible outline for keyboard navigation visibility
  • Reduced motion support — Global prefers-reduced-motion media query disables all CSS animations and transitions. Carousel autoplay is skipped when the user prefers reduced motion
  • Visually-hidden utility class.visually-hidden CSS class for screen reader-only content
  • Breadcrumb current pagearia-current="page" marks the active page in breadcrumb navigation
  • Accessibility documentation — New ACCESSIBILITY.md documenting WCAG 2.1 AA compliance status, legal framework (Wet Digitale Overheid), and implemented measures

Changed

  • Form labels associated with inputs — All form inputs across 15+ components now have programmatically associated labels via for/id pairs or aria-label attributes (WidgetEditor, NewPageModal, PageTreeSelect, CommentSection, MediaPicker, AdminSettings, PageEditor, NewsWidgetEditor, PeopleWidgetEditor, CalendarWidgetEditor, LinksEditor, NavigationEditor, PublicPageView)
  • Icon buttons accessible — All icon-only buttons in InlineTextEditor toolbar, carousel navigation, MediaPicker, and AdminSettings now have aria-label attributes
  • Draft badge contrast improved — Fallback text color darkened from #856404 to #6d5003 for a 5.5:1 contrast ratio (WCAG AA requires 4.5:1)
  • Dropdown accessibility — Navigation dropdowns have aria-haspopup and aria-expanded attributes
  • WelcomeScreen heading — Changed from <h1> to <h2> to prevent duplicate h1 on the page
  • Password error announced — Public page password error message has role="alert" for screen reader announcement
  • MediaPicker strings translated — All hardcoded English strings wrapped in t() translation function

Fixed

  • Focus anti-pattern removed — Removed event.target.blur() in Navigation.vue that was stripping keyboard focus after clicking the page structure button

Documentation

  • Added ACCESSIBILITY.md with full WCAG 2.1 AA compliance matrix
  • Added accessibility link to README documentation section
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureWi2Kezb67KRxkFi/zRvjUrCCpNNRc2DBOWtuhOITpNScggVnaSiP+zLGO3s+/fPnKmgGrFoPeSuTSQifpEA37aQrwWx1comrLRq6k9SG+4+VhgAxVjvYdha0fqhah0HDjsgfC1cLhOBExqudxnijKEf+NCGgZqf1tHFnLtUbM1Z+x5o0CjAjv47c8Qrz/LD5NTvDcmU2vkkePA4nNjMheGuxC70rmwceaXaoA2CRf9BZ2XQsI8AgE9yoTEFvdWVdpN/BR+DKoAQya6XBZitrAp1jvH3okVMMap+XDBJrhD8mfBC/9eEn4Q/UW1Xc/m3WnCMVy5MiuY3Jv0b9pl+BghH8elxTjsZZRQJ7riGX1k9e/I3hjl4GZKO96USxGi5tDoWWtq/dKLddmrzy00o0cBMuKaAJ/sFal+OyZg++OWO7Zi0sxeL12T2OaojmJ4u22sZmgaZi+Tl5naidjOE9cz3Tv41C7IIAKpW4j1Xrj7L2D9vA5C7rKH/7vIbY/iLWnIY0df5BDs7NsccnftNNLXGA24PjtN7C21SoLbSHA2hDk81Lq3QohMyCod13UkcCO4/OjKFH523IEmLnzxujA+YXNxnfEvaEW66AQn56pDKgBN0tmLKjMBd8hIAEBzpBP67buSytYIj3XjoRtR9rMHq1W125eljViPQlVVd0vTM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 1.1.2
Release Details
UpdatedApril 10, 2026, 10:41 a.m.
Changelog

Fixed

  • Telemetry error feedback: The "Send report now" button now shows the actual server error message (e.g., rate limit, connectivity issue) instead of silently failing
  • MetaVox icon dynamic loaded — MetaVox sidebar tab icon is no longer a hardcoded SVG copy. Now loads dynamically from the MetaVox app via imagePath('metavox', 'app.svg'), so logo changes in MetaVox are automatically reflected in IntraVox. Dark mode handled by Nextcloud's automatic app-dark.svg serving

Changed

  • App Store description rewritten — Expanded from ~150 to ~250 words, structured in 6 sections: page editor, widgets, collaboration, content management, enterprise, and requirements
  • App Store summary — Changed to "SharePoint-style intranet pages for Nextcloud — no code required"
  • Author updated to VoxCloud — Author name, email (info@voxcloud.nl), and homepage (voxcloud.nl) now reflect VoxCloud branding
  • Screenshots expanded from 3 to 7 — Added calendar widget, people widget, news carousel, templates, and engagement screenshots
  • Category social added — Reflects engagement features (reactions, comments, people widget)

Added

  • Documentation links in App Store — Editor Guide, Admin Guide, and API Development Guide now linked from the app listing

Security

  • axios upgraded to 1.15.0+ — Fixes critical SSRF vulnerability via NO_PROXY hostname normalization bypass (GHSA-3p68-rc4w-qgx5)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignaturedEPa13irIrVkzszfHig0ZkpEhHIKNvbSxRdMHeALc3YGKW3H/pXgEyzlSiOgTRlYG9JwD6bAo8ANVhK9tBaIMr5nzOO0JrgExrnHniBe4LtGgJ2xbE1TeVVKEnlgcmwi8SG60ueKvIJU/x/Vy2yIJJGe/ShTntep5qiwGJBe8QksUTojfPiDaqDXzcgVRyYhbvIuT44/TF5oohBzbLLHvXm5bhcbUP6WyWz2KsTF7sgMtkKmClOiY/vZYVG2QaK87+QbwBwnW5icirect8ZzPzxSHqsg3LJdP4InayQhs21ZSm6rdrmBhT8Z36OJv9Mu2Dzdvl5cbqalUJbLs5ILHh/i4LKcIgt5fd9yvPHrtH7DNKQHeYMdH6x9saOq6zDC/g71N2zb1klXypSNpnkb/Ki9ZniJd0AQq2vxj4i0rguZZSM2HyMgnQnmAUU/HHbZGExGVQ6qqZl2xdVp3PZMZiQKJvIoVFqev4CbHr1Mite0cy2aYcb8iGnAdGYBL8Q2YahPyL3+dgHmi6/ywY3pmo9w+4O+JDggH3O7Mt2rlgbEQAaR0qLafrRU0yTB54Xyk7CNQE4kV1oGzl+wIO0LBBpDnuQAqenvuh7ac4W3kil3fbjVs9lk3JiH9q0Wb9gQ50ZE9T00RM/VhSDacfnmghY1udXhgAThMrNXeOjQ3m0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 1.1.1
Release Details
UpdatedApril 8, 2026, 11:53 a.m.
Changelog

Added

  • Support contact settings — New admin settings section for configuring organization name and support contact details. Contact information is included in telemetry for easier support identification
  • App Store screenshots — Added calendar widget screenshots (layout, editor, primary, sidebar) and updated admin demo data and edit mode screenshots

Changed

  • Contact info updated — Author email changed to info@voxcloud.nl and website URL to voxcloud.nl
  • Admin settings refactored — Extracted support/contact settings into dedicated SupportSettings component for cleaner code organization

Security

  • serialize-javascript upgraded to 7.0.5 — Fixes excessive CPU usage vulnerability in array-like object serialization during webpack build process (#42)
  • brace-expansion upgraded to 5.0.5 — Fixes bracket handling vulnerability (#40)

Fixed

  • Demo data imports all languages — Demo data setup now detects the single active language and imports only that language's content, instead of importing all available languages regardless of configuration
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureaKR0xRRjvews2FOdXJ446XMnOvUrRh3oPx3N7dR/TGujbDnjFFXwF8qC7wXo9CrwLD164arXII26lxxH509xmimeAfARht3+m5iFU8X2UdeWfszCJtuf2TilPEp+3ZDcgKOpN3o9dkcas6hV7rYfsqVJTkLAPqvAhOA3lRQOM70SKV8P5Jo3wSKHiXocbdsk094u2jd640LIR3EFfkdCrzxQJ9KetiH3w+h135bz1qwU8/eceKTH+O9aHYtphsbfFqRvZzMqnZ3qEABfWzSdOMgkvSIrpYZDWy20aPi1vagdi9VtLBzuzVNvmzjLKcCu3HNdJ2mrITGFykR1JM+EKG5AmdoIovqjunLgwpoCQCmLYnvhLegYfsIz1MbG0mgfJ1ZeHwW/DI/9usLGtlNOwRqJjaL9WIgT2zk4wPkG0P0N8f+i/S4limsWXHilNlqj7nZJWQftBm+UoecxZ4hewwGbQZZIGdBDIFkbKV3JPsnN8y6OXohEIAWXfgy66SXM5n2KdYVlFAiMyAcIPWkab+ZjB/o+jrpkGuC/9+eJ0fTd8LAwSKzupt4hTCqmmru5t2Or/6YSEZxl3LlghWtC3ivSefxvqLuKy95vPVmT+ylOPohgmzUxPzlOHHcOp/N9YIP3YSWwMZ2cDbvAI4PeZD3UjHpnhm3t9q8lHOrygyk=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 1.1.0
Release Details
UpdatedMarch 29, 2026, 7:49 a.m.
Changelog

Added

  • Calendar widget — New widget that displays upcoming events from shared Nextcloud calendars. Supports multi-calendar selection (merged view), configurable date range, event limit, and show/hide time and location. Events are shown with colored date badges matching the calendar color. Recurring events (RRULE) are correctly expanded into individual occurrences
  • Responsive calendar layout — Calendar widget automatically adapts to available space: 1 column in side columns, 2 columns in medium containers, 3 columns in wide content areas (via CSS container queries)

Fixed

  • People widget users lost on reload — User IDs containing dots, @ signs, or spaces (common in LDAP/SAML/OIDC environments) were silently stripped during save, causing selected users to disappear after page reload (#41)
  • Deploy script OPcache — Added Apache/PHP-FPM restart to deploy script to clear OPcache after deploying new PHP controllers

Security

  • Rate limiting on public People API — Added AnonRateThrottle to the public share endpoint for the People widget to prevent user enumeration

Documentation

  • Language & demo data — Added guidance that Nextcloud language setting must match the imported demo data language. Added troubleshooting entry for "Admin sees empty Welcome page after demo import" (#37)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureZBIZ5aIC0Jf+cgyuNd3xYfy7lZbE7fbg38Xem2/zEuWkI5PWOSY/WmCebThcm9NHRdFJIL74zHRIUbfE2XaicmcqwgSZozNcUeUG8kpK5elRhLYJXPdPZMAN1LpKiPlrz3951koLc2f0LNpTvOBvsXgk0Fjlsj/NRmYcn6Oy224uzlYrkwpwBn8UDRA6CBC8qJLG+TYF4/VnIfJLEomG01HV9Ar2TGb+dDUobWPWAgfXfkdNtrc7gfLPipGlAs8enaBWbEhLQi/qRVfU2W1azSTYzFgl1rwBMnFG5V9g8ymkZpakbioOnL074u9JUYwBIcXGSq+7w9oKo5LFmzidPmSALp8B12aM+lAElH/vBKlHBYSoDv3A/KoqWfXW5BZvXQXmtFa043vK0kHD5M0PARFfvPN7xkVXUYoQX5o9Ptre/I+UkINXO6FX7X4KepWM57WFVidCOMwwCl9e6b5UQdt6aeYSl1qoAnBNQgAxtYm2QgRJa9FyDEl4+yup+bBwrYU8URBCQJk6GTbAFaA5397wE12N3OLpwoiIx3g7ZBP+ppRmO1eb1SDGN9tJWa5AKgEg7CBnBaV5YNtWRlmoUfsgfCt1b039Dca7fEVcL523m5zgmxqkiCbO70fwlTdhoe00hQpcZomfmEP6wB7FftWIqMR63Ndw+7WmoGIouhM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 1.0.1
Release Details
UpdatedMarch 9, 2026, 3:12 p.m.
Changelog

Added

  • IntraVox Editors group — A third permission group (IntraVox Editors) is now automatically created during setup with Read + Write + Create permissions. This provides a three-tier permission model out of the box: Users (read), Editors (read/write/create), Admins (full access)
  • Scenarios documentation — New SCENARIOS.md guide with step-by-step recipes for content approval workflows (using the Nextcloud Approval app and MetaVox) and department-based intranets

Documentation

  • Updated ADMIN_GUIDE, AUTHORIZATION, EDITOR_GUIDE, and README to reflect the new three-group permission model
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureQuql4/Qdcw6lDxelq5UHCLVmlFf7+6YjcNPpfIDS+ynsrL+9QbyGsGQyx8fZdisovKtKJODYvfEou6EmcdD8l14mvBc4P6v6PZwzRmgP3qGMG4fYX0lFfniULGs8YGtKVGtgqilJ1gLnHQrO4qIxQqvvNGtTKmr8N3GehbHprT/tTzgPTlhmIHPIjKrw6q5m380WyUBhq9Hw9o16MekCX5obAshT2pwQuQvkmEYuprV4wr3dFOqKC5vM04yd1x6s2y72ZLcCC4YDPRoMP75vClpQaaScIYwVoulnFlLqOZUw/qlywWttwMAalDJkRPmC3E08xlOup4RwZkGSdu9jv5ESDemPoxvtV4alDMkf/qECW8KZkjTEX89MuYfFLK7POiH68qJllpAooquc71PAdN/YmTtKPplKBKqiJwWReAgDK4dZdls1komf17vcn+usYsJhzVT5Jarp8jjT0aQpBFAUDIuEJmeF0nzI/Q0xV1bMeCs/j2yjDdSIJPLHr27uk68Tb+gBQbhYdpPR6sYxLT2DT3xbbvq9z3RPlowcO3/kvN71ojGEx6xPGOsISJbRDpg4v3ixzVaKa9nUurb44Hsp7E1GsF19ARAlEquCuJxkCXONHc4jjW0pPGUxyBAt5V4kvWqRhS9Whl1JjSWOd7X30GvShRSWwWu59BiaTpI=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 1.0.0
Release Details
UpdatedMarch 8, 2026, 10:37 a.m.
Changelog

IntraVox 1.0 marks the first stable release. After 19 iterative releases, the app offers a complete intranet platform: a full page builder with 10+ widget types, page versioning, templates, public sharing, RSS feeds, engagement (reactions & comments), draft/published workflow, concurrent edit protection, and multi-language support. The JSON page format and REST API are considered stable from this version onward.

Added

  • Page locking — Pessimistic locking prevents concurrent edits. When a user starts editing a page, other users see who is editing and the Edit button is disabled. Locks auto-expire after 15 minutes of inactivity, with a 60-second heartbeat to keep active sessions alive. Locks are released on save, cancel, navigation, and tab close
  • Lock safety net in API — Backend updatePage() rejects saves with HTTP 409 if the page is locked by another user, preventing data loss even if the frontend check is bypassed
  • Force unlock for admins — IntraVox Admins can force-release a page lock held by another user (e.g. after a browser crash). Includes confirmation dialog to warn about potential unsaved changes
  • Draft pages (#32) — Pages can be saved as "Draft" or "Published". Draft pages are only visible to users with write permission and are hidden from read-only users, public shares, search results, RSS feeds, and the page tree. Editors see a clickable status badge in edit mode to toggle between Draft and Published, and a "Draft" indicator in view mode. Backward compatible: existing pages without a status field default to Published
  • Duplicate row (#32) — Editors can duplicate a complete row (including all columns and widgets) with a single click. The duplicate button appears in the row controls next to the delete button
  • Sticky edit toolbar (#32) — The header toolbar with Save/Cancel buttons stays fixed at the top of the viewport when scrolling, making it accessible on long pages

Changed

  • Page lock translations — Lock-related UI strings translated to English, Dutch, German, and French
  • Draft/duplicate translations — Draft, Published, and Duplicate row strings translated to English, Dutch, German, and French
  • New pages default to Draft — Newly created pages (both blank and from template) start as Draft and automatically open in edit mode so editors can begin working immediately

Fixed

  • Links widget tile overflow — Tiles in narrow containers (sidebar, small columns) no longer shrink to unreadable vertical text. Tiles auto-wrap to the next row when there isn't enough horizontal space, while respecting the configured column count when space allows

Documentation

  • Editor guide — Added sections for sticky toolbar, page locking, draft/published status with visibility table, duplicate rows, and updated creating new pages workflow
  • Admin guide — Added page locking and draft pages sections, updated security considerations
  • README — Added page editor features (duplicate rows, sticky toolbar, page locking, draft/published), new feature sections with screenshots, updated security section
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureiNaCstuvlWhKDNWHxOI3UH2urSyZ8OZCmlMAvQHWW8FDbfo3gBmHCD7ofk/6G78se/+9K8bLaSPMd0f3n3enR62K0ZG0jj5TP4eVvIsVYpVlLdzZlV64fJRcFSUotMFaluWlflLPKhuJbPJTCLivaYwzxX8QhfG7f9SUgZcsb/YZrCU0exRzekrFevLtHNsVE5aj7UWGg3lQh/zYZ28tlpsoWUPCJ2dT4qQ56kFO6IYvc4Wmf2diEzLLye1XaVpLaBbldRfDt2b4siu3uUMPePJHij6EDYL1dQAPuYAa12slvrh9TTRlffbtU1ny3b+1t9yLAVBiE6NEFccX7S/P5pmEPNmoeCECIv8lTyw8GJUeRNT+VdmlOZporvVXn4CWhW4aaQW+qVMLUrKrQ4Ond/ZYmVyVR4TjKiGZr04hr/xIdj0FDPffqe3SiLS5DJ4g3P+q3CCI7vktKlIdOrgpyHFavOfTq9IT2MT94UfJFob8L34g+yDsfdyQdYC2hQTXZsQUJ9TS72pzUC4c52Y4gomtLyUh4E7xOv8hAiGiKvaCDlcQJD7jE95LKw+EEwMvXrDMfhgn8hHMg9JxzSapRggu59B5Butz83jVNRnTWht9gaGu3nlpvMnNoE0YdFyU2c1yj0w5DoB7VmKd+4+1S32aO97qba7DCBpqrdQYc8o=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 0.9.18
Release Details
UpdatedMarch 7, 2026, 11:51 a.m.
Changelog

Added

  • Spacer widget rendering - Spacer widget now renders correctly in view mode with configurable height (10-200px). Previously fell through to "Unknown Widget Type" error display
  • Links widget tiles layout - Links widget now supports a tiles layout alongside the existing list layout. Tiles display a larger icon (36px) with a separate title and subtitle on two lines, creating a card-style presentation. Editors can switch between layouts and set title/subtitle per link in tile mode
  • 30+ extra link icons - Added icons for common intranet use cases: folders, chat, dashboard, contacts, forms, code, support, security, organization, news, and more
  • 5 unique demo showcases with rich, diverse layouts demonstrating all widget types:
  • de-linden (Universiteit) — 4 photos, 1/2/3/4-column rows, video, people grid, SURF services, right sidebar
  • van-der-berg (Advocatenkantoor) — 3 photos, header row, news grid, file widgets, no sidebars
  • gemeente-duin (Gemeente) — 3 photos, 1/2/3/5-column rows, left sidebar, news list
  • de-bron (Zorggroep) — 3 photos, 4-column department overview, people cards, video, file widgets, right sidebar
  • horizon-labs (Tech startup) — 2 photos, news carousel, culture row, right sidebar

Documentation

  • Showcases guide (SHOWCASES.md) — Complete documentation of all 5 showcases: widget coverage matrix, technical structure, background color guidelines, image handling, and people widget portability
  • Editor guide updated — Added documentation for file, spacer, news, and people widgets; updated column support from 1-3 to 1-5; documented collapsible rows, header rows, and side columns
  • Export/import updated — Widget types list expanded from 6 to 10 (added links, file, news, people)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureCnOojEkcaYY3IrqfW3cj9gDhgOnlVkTd+sZpTFow4jh1pH+IrZ1NgXRjGgIKZiQtdvlh3AqgHdEE7kWidNvVTps4SL79TTLcQlO+aT223Sf9OOMC+GQsGkxUVKVY1d456mupVrZyslUCopbxr4Rf2aYxfsm3GFdMxPFGByXWE4VkJztuo8UI4krp2rfVRcBbv2m8RWd2w+1mAlkOiRK7176eS+d4jHn0h6Kslde5E/E4DfGML8uUyyu5yACJ/MMkUcJ+wxLvu2esOM5oPkbMrAHpWCa5TRzqVtbpoplcmDq4pYVw84AXc/+V91HduZOVLHgzWXhkV6O0qXjsWgsDfAPiZ1t9EWFuUMuV0EY2WbIxdo5eBSQsDaG4R60JKVlUvbx07OXecWG80VRslsngbXbTtvWV/AwHGWN60MufTQbEU8+cw3tIBD5RAlXwcnIVDHawBvasxQ7wlWU5/B8BZZkEDGdQMBlXTQE45+FVEbwXOaaQPD8s7cde2zCGk7Ze4MfIqZDyD5cBuszuVf5ljCpm8BQvt4oBGRPX9C0K8TB+l3vp6XzuMOvxixdIES9E20e9LYn1Yve0tTf3PzBQgUvPM4eYjXHD3U24w/0PNPNrBtLzg0uePqmm01dHBkVTqQC4CdmLD/cRG7GIH8bVBey+9XsftagMXH2LGuz8NS8=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 0.9.16
Release Details
UpdatedFeb. 25, 2026, 1:50 p.m.
Changelog

Added

  • RSS feed - Personal RSS feed for each user with token-based authentication, feed media endpoint, conditional requests (ETag/Last-Modified), and brute force protection
  • RSS feed settings UI - Generate, regenerate, and revoke feed tokens with configurable scope (my language / all languages) and item limit
  • RSS feed sharing policy - Feed respects Nextcloud's "Allow users to share via link" admin setting; shows clear error when disabled
  • RSS feed cross-language links - Feed items link via #page-{uniqueId} format, automatically resolving pages across language folders

Changed

  • Dummy text generator - Removed =dad() alias, only =dadjokes() and =lorem() are now supported
  • =lorem() rich formatting - Now generates richly formatted content showcasing all text widget capabilities: headings, blockquotes, bullet lists, tables, ordered lists, and mixed inline marks (bold, italic, code, underline, strikethrough)
  • Dummy text multilingual labels - =lorem() section headings, table columns, and status labels are now localized for EN, NL, DE, and FR
  • Documentation - Added RSS feed admin setup guide with GroupFolder permission requirements (Read + Share), ACL examples, and troubleshooting

Fixed

  • People widget "Invalid Date" - Birthdate now correctly displayed regardless of Nextcloud locale settings. Added backend normalization of locale-specific date formats (DD-MM-YYYY, DD/MM/YYYY, DD.MM.YYYY) to ISO 8601 before sending to frontend, with additional frontend fallback for edge cases
  • RSS feed empty for ACL users - Documented that GroupFolders requires both Read and Share permissions for public feed endpoints; updated all permission tables and recommendations
  • Webpack build failure - Added string_decoder and buffer to webpack resolve.fallback to fix build error caused by @nextcloud/dialogs 7.3.0 pulling in Node.js core modules via sax/is-svg
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureLkqXT+TE7U884io7bEDmL/gZLvaShUTg97nU7qIjNMBXEkd4nqo9nooA8+Y8qLUQEIjP1wFkw2p/TMduDHbWgZcPe+SIDuvfyQhqSlO5aeD8Q+pW+KmGAy0XbbQlVX6neiqaNGhD8TpCdnIStIHuPkjRngBSOuXf4JjeV3DNM2QKlck2at1svnElJOWujwLerTqWVGWQEaXSBvn0YGAHiLorgKXVitgZRMOxviUeSTxdWtwNsJ3vVIZ+mr+4UllElQh1jLgnePi2xa3DXs3b+r9CqebhIIQ2Brt8r0U2l3W5LIsjZJtf+/PHf9ytfAag51+XHLb/xMEZx9NDxakeGZlDPdQ652np7z7jgUxwE/wASSpVJ4LePTzwoBrdg4EDocI114Gtz0vqJGoTOJBHxZEovydDEXjOZSJcnLvzpfs1nkQBQYUvQGzSVti+0W64vSCh/I53o/U7GRYmCL03pYbNYZ9S2nk32usjfFizVbpGvKFrA5crLqxBns5Yb6bYY5QNtZtqHJiobkijwP19esHX6eCNLIKvI6aozaMtpawOQ/IDCDdJFI7N1+QFcoMgUsbbpfBXhImJ1I3LjWOjbzl+ZQ4d6CrHC1Gmd/KohKuvx5ER7RmgvLIhpgEEAKvdpFxgBc2gnQeVwTLUOBlzjJhS+I+7ggkrmX7+5HarwP0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 0.9.15
Release Details
UpdatedFeb. 19, 2026, 6:35 a.m.
Changelog

Fixed

  • MetaVox sidebar on NC33 - MetaVox metadata tab now works in IntraVox on Nextcloud 33, where MetaVox registers via the new scoped globals API instead of the legacy OCA.Files.Sidebar API
  • MetaVox mock Node object now passes correct mountType and mountPoint attributes (camelCase) so groupfolder detection works properly
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
Signatured13CndlYRWziam4mAOeDoHdjExboNyPiyFqfTRdrqRtcJkWVhRE0vN7wCEpWqUZaAni+r5JOpmwhpD7ePTFB8j77sIMq2K2ahdeGOVhnRrhQ3Qk055iXrnxzm3lvwaaerShVPa9D5fga3auYwpcuJxW4NDj36QvCwybkhwzJx381shlVjGyuZKQFJJWn3d3ZAzC2u1El8OlLIeBEDeszJizpa3EBEGdftZ7sfqkem+UMU9jWOGrXMwkYsauDhp+0mW6TNb7lDV84gZUKoE9lAYYLTPzFU5VWDA2mtvV6h09kwtZrXfkMxoh+S/qAcFkP9gwXFHKZKCDs3Z/HGTqeDxrbW6EM5sboYLOS7+VQapwes/UsGRO3XO9jzo5cfe4+c6fy32mjgwyhskSBm5UYdpYANsRgvOj0D9GQFNLYSuktoHaV0lq7BAtroDDk7B09k/422Eia0taM9PuoTmbMZ97yhgYZpEyJMLVx4nTMu30zXXkw0fkF3KfF0vZMnsOaAgYfQWXzChqpOlvemmz7bx/Ew7Murqz5ytaXfZvQ09WtWEV4l1b4AdCaf1ow/+w+V5BtXM/tCvaUmjQtdK+mf70ptdCr/+crxjhytihIm+NFMZSB/FMNlOKGcM3J0wz/kcBJ6tCLAcCIjzaf9p+42yUo8bgi+WzJTNp0r6EZSLA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 0.9.14
Release Details
UpdatedFeb. 18, 2026, 2:07 p.m.
Changelog

Added

  • Nextcloud 33 support - App now supports Nextcloud 32 and 33 (PHP 8.2+ required)
  • Page nesting depth increased from 3 to 5 levels for deeper page hierarchies
  • Dummy text generator (easter egg) - Type =dad(), =dadjokes(3,5), or =lorem(2,4) in a text widget and press Enter to generate dummy content (inspired by MS Word's =rand())
  • Birthdate field support in People widget - display, filter (is_today, within_next_days)
  • Bluesky social link support in People widget
  • Date filter operators for People widget: is today, within next X days

Fixed

  • People widget display options now correctly control rendered fields in grid layout
  • Removed gridShowFields override that forced fields off
  • Removed hardcoded layout !== 'grid' template restrictions
  • Removed CSS rule that hid headline in grid layout
  • showFields is now the single source of truth across all layouts
  • All display option checkboxes now always visible in editor (no longer hidden per layout)
  • showFields whitelist expanded in backend (PageService.php) to support all 15 field types
  • Legacy title field synced with role for backwards compatibility
  • Heading widget bottom spacing increased
  • Comment cascade delete now properly deletes replies and updates count
  • Security: markdown-it updated to 14.1.1 (ReDoS fix in linkify inline rule)
  • Security: ajv updated to 8.18.0 (CVE-2025-69873 ReDoS fix)

Changed

  • Twitter links now point to x.com instead of twitter.com
  • Dependency updates: axios 1.13.5, qs 6.14.2, webpack 5.105.0, ajv 8.18.0
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureKx4wBbCHSaA+wD5HWQ0/arQjdIOdtmxLwRYyh1GhcBKDiUVrfNUoFlOreUrs/FPv6heMXFD8XdJcVn6XXxPZzSOAYVCnKaIGGYea4RfsTlCbrShkasX2TxQ/1Kn1vH2QM+qe0aNdZstYv1QxhFgQyb82tWreFTuhisKgndvWqE5LouHSIDzamgr+iKmEoxf/LvCbPt4UvWc8nQdCc+XdnDa7WzMrjAB1xu5tHXE3coFmEqAWUwdMpp+vR9YanFLjC8CKfJEl+S4qL0DhDviXXUzjlOmIEttrXwRI1nv5rLg+Ucy1fBdZPUmMLXqgh7eUTWCSAlTVsTPYMvdhNQAZMWpioKf7X7pZcbp9JvcmbTZ6+VJVIT8tGGJROwpx/Z8v1fN3e5Gcv+pSq0yHpKM43v2S8LSa+Z5HB7BIV5GeUCmSIGfrWYEJvXYhpHtyHJrdVYfH2YuYbqkAH5bKuURwKQdJ0Y6A9v/gpEdwso44dNpPh0CY2uaGk/FwrJs1IYYmCI59OqF6l1/ffo9l/jR+PA5Jh3nns9lUR+hhfTJ25hF3+xhYdQV818Acbnl24c59rugq7+hX++cVn/b8VXen5WIUdVK4nl8eHNSYYVJoRLoz0PqhEVitwSF9k6zU+6/kSWIe2UiEwiOALXTSS89q+TVRT1J1oX1L//SPTg0b988=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0

Nextcloud 32

IntraVox 1.3.0
Release Details
UpdatedApril 21, 2026, 9:26 a.m.
Changelog

Added

  • Feed widget — New widget type for displaying external content on intranet pages. Supports RSS/Atom feeds and admin-configured connections to external systems (Canvas, Moodle, Brightspace, Jira, Confluence, SharePoint, OpenProject, and custom REST APIs). Features include: list and grid layouts (2-4 columns), configurable display options (image, date, excerpt, source, author), per-user OAuth2 personalization for LMS content, OIDC auto-connect for zero-click SSO, manual token fallback, 15-minute server-side caching, and public share support (FeedWidget.vue, FeedWidgetEditor.vue, FeedReaderService.php, FeedItem.vue)
  • Feed widget: connection presets — Administrators configure connections in Admin Settings using platform presets that auto-fill endpoint paths, auth methods, and response field mapping. Presets available for Canvas, Moodle, Brightspace, Jira, Confluence, SharePoint, OpenProject, AFAS, TOPdesk, and Custom REST API. Each preset supports platform-specific content types (e.g. News/Courses/Deadlines for LMS, Pages/Documents/Lists for SharePoint, Bugs/Recent/Created for Jira)
  • Feed widget: content type selection — Widget editors choose what content to display per connection type. LMS connections offer News/Announcements, My Courses, and Upcoming Deadlines. SharePoint offers Pages/News, Documents, and List items (with library/list selector). Jira offers project filtering and content types (bugs, recent, created). Content type selection happens in the widget editor, not admin settings
  • Feed widget: SharePoint integration — Full Microsoft Graph API integration via OAuth2 client_credentials flow. Automatic token acquisition and caching using tenant ID, client ID, and client secret. Supports SharePoint site ID resolution (hostname:/path: format), page/news listing, document libraries, and list items. Admin configures site URL + Entra ID credentials; editors choose content type and library in the widget
  • Feed widget: image proxy — Secure HMAC-signed image proxy bypasses Nextcloud CSP restrictions for feed images. Supports JPEG, PNG, GIF, WebP, AVIF, SVG (with sanitization via enshrined/svg-sanitize), and ICO. Daily signature rotation with yesterday grace window. All feed images (RSS, LMS, SharePoint, Jira) are proxied automatically (FeedReaderController.php, FeedReaderService.php)
  • Feed widget: OAuth2 account linking — Users can connect their personal LMS account via OAuth2 popup flow (Canvas, Moodle with local_oauth2 plugin, Brightspace). Connected users see personalized content from their own courses. Token refresh is automatic (LmsOAuthService.php, LmsOAuthController.php, LmsTokenService.php, OidcTokenBridge.php)
  • Feed widget: sort and filter — Feed items can be sorted by date or title (ascending/descending) and filtered by keyword. Filter searches in title, excerpt, and author (case-insensitive). Applied server-side after caching for instant response
  • Feed widget: custom request headers — REST API connections support configurable HTTP headers (key-value pairs). Enables Nextcloud OCS API integration (OCS-APIRequest: true) and other systems requiring custom headers
  • Feed widget: design principle — IntraVox focuses on organizational content (news, team updates, external feeds). Personal Nextcloud data (activities, notifications, recent files, Talk, Deck, Mail) belongs on the Nextcloud Dashboard. IntraVox does not duplicate Dashboard functionality. For organizational Nextcloud data from remote instances, use the REST API (custom) source type with OCS API endpoints
  • Calendar widget: external ICS feeds — Editors can add external ICS calendar URLs (e.g. from Moodle, Canvas, Brightspace) directly in the calendar widget. Events from these feeds are visible to all page visitors, including public share viewers. No Nextcloud Calendar subscription required per user. Supports up to 5 ICS feeds per widget with 30-minute caching (ExternalIcsService.php, CalendarWidgetEditor.vue)
  • Calendar widget: LMS event deep links — Clicking an external calendar event opens the event in the source LMS. Supports Canvas (native URL field), Brightspace (URL constructed from UID), and Moodle (URL constructed from UID). Unknown sources link to the feed domain
  • Feed widget: singleflight lock — Prevents thundering herd on cache expiry. When the feed cache expires, only the first request fetches from the external source; concurrent requests wait and read from the freshly populated cache. Uses a distributed lock with unique request ID verification (FeedReaderService.php)
  • Feed widget: circuit breaker — After 3 consecutive failures for a feed source, the circuit breaker opens and returns immediately with "temporarily unavailable". Resets automatically after 5 minutes or on first successful fetch. Prevents cascade failures from unstable external sources
  • Feed widget: background refresh — New FeedRefreshJob background job proactively refreshes configured feed connections every 10 minutes, before cache expiry. Users almost never trigger a cold fetch. Includes its own circuit breaker to skip failing sources
  • Feed widget: rate limitingUserRateThrottle(30/min) on authenticated feed endpoints, AnonRateThrottle(30/min) on public share feed endpoint (FeedReaderController.php)
  • Page metadata database index — New intravox_page_index table stores pre-indexed page metadata (title, uniqueId, path, language, status, modification time). Eliminates O(N) filesystem traversals for page listing, tree, and search operations. Updated automatically on page create/update/delete (PageIndexService.php, Version001300Date20260420000000.php)
  • Nextcloud search: index-first — The unified search provider (Ctrl+K) now queries the page metadata index for fast title-based results (~1ms), with fallback to full-text filesystem search for content matches (PageSearchProvider.php)
  • Distributed page tree cache — Page tree is cached in Redis/APCu (distributed) in addition to the existing in-process static cache. Shared across PHP processes/requests for ~70% reduction in tree response time. Invalidated automatically on page create/update/delete (PageService.php)
  • People widget: scalability guardrails — Hard cap of 5,000 users on the unscoped filter path to prevent OOM/timeout on large Nextcloud instances. Filter results cached in Redis/APCu for 1 hour. Batch status prefetching reduces API calls from N to 1 (UserService.php)
  • Rate limiting on mutating endpointsUserRateThrottle added to page create/delete (10/min), bulk operations (5/min), comments (20/min), reactions (30/min), and analytics tracking (60/min). Covers ApiController, BulkController, CommentController, AnalyticsController
  • GDPR user deletion handlerUserDeletedListener automatically cleans up analytics records, page locks, feed tokens, and LMS OAuth tokens when a Nextcloud user is deleted (UserDeletedListener.php, Application.php)
  • Audit logging — Administrative operations logged with IntraVox Audit: prefix for SIEM integration: bulk delete/move/update (with page IDs and user), license key changes, organization settings, engagement settings (BulkController.php, LicenseController.php, ApiController.php)
  • Health check endpointGET /apps/intravox/api/health returns app status and version for monitoring and orchestration (Kubernetes, uptime monitoring)
  • Scalability documentation — New SCALABILITY.md documenting all performance, caching, resilience, rate limiting, and enterprise features
  • Admin: connection test button — "Test connection" button on each feed connection card verifies credentials and endpoint by fetching a preview from the external API
  • Admin: connection export/import — Export all feed connections as JSON (without tokens/secrets). Import on another instance with duplicate detection and preview dialog
  • Admin: connection active/inactive toggle — Each connection has an NcCheckboxRadioSwitch toggle to temporarily disable it without deleting. Inactive connections show a specific message in widgets ("This connection is currently disabled by an administrator.") and are excluded from the widget editor dropdown. Re-enabling restores all widgets automatically — no reconfiguration needed. Toggle saves immediately
  • Admin: connection status badges — Connection cards show configuration status as text badges: "Configured" (green), "Not configured" (orange), "Token missing" (orange), "Credentials missing" (orange). Replaces the previous green/grey dots for better visibility
  • Admin: connection remove confirmation — Removing a feed connection shows a Nextcloud-style confirmation dialog instead of a browser prompt
  • Admin: Clean Start DELETE confirmation — Destructive "Clean Start" action now requires typing DELETE to confirm
  • Admin: orphaned data banner — Automatically detects orphaned data on admin panel load and shows a warning banner with link to Maintenance tab
  • Admin: advanced options collapse — Endpoint path, response mapping, and custom headers for custom REST API connections are behind an "Advanced options" toggle
  • Admin: column width warning — Shows a warning when the configured number of page columns may be too narrow for the available width, with a recommendation for fewer columns
  • Feed widget: error messages — Specific error messages for inactive connections, 404 (connection not found), 401 (authentication required), 403 (access denied), and 429 (rate limited) instead of generic "Could not load feed"

Changed

  • Feed widget: HTTP timeout reduced — Outbound HTTP timeout reduced from 10s to 5s to prevent PHP worker blocking when external sources are slow (FeedReaderService.php)
  • Bundle splitting — Enabled webpack splitChunks to separate vendor code (~2.9 MB) from application code (~220 KB). Main bundle reduced from 3.7 MB to 220 KB. Vendor chunk is shared between main and admin entry points and cached separately by browsers (webpack.config.js)
  • TipTap lazy-loaded — TipTap editor and all 8 extensions (~240 KB) are loaded dynamically via import() on first editor mount. Pages viewed in read-only mode never download the editor code (InlineTextEditor.vue)
  • Widget components lazy-loaded — All widget components (News, People, Calendar, Feed, Links, InlineTextEditor) loaded via defineAsyncComponent. Pages only download the widget types they actually use (Widget.vue)
  • Widget watchers debounced — Deep watchers on News, People, and Feed widgets debounced with 300ms delay to prevent API call bursts during editor configuration changes (NewsWidget.vue, PeopleWidget.vue, FeedWidget.vue)
  • Widget initial fetch deferred — News and Feed widgets use requestIdleCallback for initial data fetch, improving perceived page load performance
  • Page + lock fetch parallelized — Page content and lock status are now fetched in parallel via Promise.all instead of sequentially, eliminating ~100ms waterfall (App.vue)
  • Engagement settings cached — Engagement settings now use CacheService with 5-minute TTL, consistent with navigation and footer caching (App.vue)
  • News widget: collection limit — Recursive folder scan stops after collecting enough items (default: max(limit * 4, 200)) instead of scanning all folders before applying array_slice (PageService.php)
  • Tree components: progressive rendering — PageTreeItem and PageTreeSelectItem render max 50 children per node initially with a "Show more" button for additional items. Prevents DOM bloat with large page hierarchies (PageTreeItem.vue, PageTreeSelectItem.vue)
  • Navigation/footer HTTP caching — Added Cache-Control: private, max-age=300, must-revalidate and ETag headers to navigation and footer API responses, consistent with the existing feed API pattern (NavigationController.php, FooterController.php)
  • Feed widget: unified connection architecture — Replaced separate source types (Moodle, Canvas, Brightspace, REST API custom) with a single "Connection" concept. Editors choose RSS or Connection; the admin configures connections with presets (Jira, Confluence, SharePoint, OpenProject, AFAS, TOPdesk, Custom, plus LMS types). Presets auto-fill endpoint, auth method, and response mapping. LMS-specific logic (Moodle POST body auth, Canvas context_codes, Brightspace org unit) is preserved internally but hidden from the user. Backwards-compatible with existing connections
  • Calendar widget: IManager refactor — Replaced CalDavBackend with OCP\Calendar\IManager for fetching calendars. This properly handles both regular calendars and ICS subscriptions. Calendar identifiers changed from numeric IDs to string keys (CalendarService.php, CalendarController.php, PageService.php)
  • Calendar widget: hide ICS subscriptions from selector — Nextcloud ICS subscriptions are no longer shown in the calendar selector since external feeds are now managed via the dedicated ICS URL field
  • CSS theming compliance — Replaced non-standard --color-text-light with --color-text-maxcontrast in Feed and News widgets. Replaced hardcoded #fff/white with var(--color-primary-element-text). Replaced hardcoded border-radius values with NC variables. Standardized font-weight to 600 (NC convention). Dark theme backgrounds now use var(--color-primary-element-light) instead of hardcoded rgba values. Affects: FeedItem.vue, NewsItem.vue, CalendarWidget.vue, FeedWidgetEditor.vue

Fixed

  • Calendar widget wrong events shown — When an ICS subscription had the same numeric ID as a regular calendar, the widget showed events from the wrong calendar. Fixed by switching to unique string keys via IManager
  • REST API SSRF hardening — Connection base URL is now re-validated on every fetch request, not just at save time. Prevents SSRF if an admin account is compromised and a malicious URL is injected into stored connection config
  • Version restore not persisting — Restoring a page version appeared to work but reverted after a hard refresh. Root cause: the backend reused a stale file node after IVersionManager::rollback(), and the frontend masked the issue by showing a version preview instead of the actual restored page. Fixed by re-obtaining a fresh file node after rollback and clearing the version preview after restore
  • SSRF hardening: LMS connectors — Added validateUrl() with private IP range blocking to Moodle, Canvas, and Brightspace fetch methods. Previously only the generic REST API connector validated URLs at fetch time
  • SSRF hardening: ICS calendar feeds — Added private/reserved IP range blocking to ExternalIcsService::validateUrl(). Previously only enforced HTTPS without checking for internal network addresses
  • SSRF hardening: SharePoint & Jira — Added validateUrl() to resolveSharePointSiteId() and getJiraProjects() to block requests to private IP ranges
  • SSRF hardening: Confluence API importer — Added URL validation with private IP range blocking to the Confluence REST API importer's base URL
  • XXE hardening: Confluence importer — Added LIBXML_NONET flag to DOMDocument::loadXML() and loadHTML() in the Confluence Storage Format parser to prevent external entity resolution
  • Token handling: Jira project listing — Replaced direct admin token decryption with resolveToken() for consistent token resolution across all connector methods

Security

  • CSP hardened — Removed unsafe-eval from Content Security Policy. The Vue 3 runtime-only build and TipTap editor do not require eval(). This was a historical precaution that is no longer needed (PageController.php)
  • HMAC key hardened — Image proxy signature key now uses hash('sha256', ...) for proper 256-bit key derivation instead of string concatenation (FeedReaderService.php)
  • API response size limit — External API responses larger than 10 MB are rejected before JSON parsing to prevent out-of-memory conditions (FeedReaderService.php)

Accessibility

  • Feed widget aria-live — Loading and content states announced to screen readers via aria-live="polite" and role="status" (FeedWidget.vue)
  • Feed item semantics — Removed conflicting role="article" from feed item <a> tags. Added focus-visible outline for keyboard navigation (FeedItem.vue)
  • Admin loading spinners — All loading spinners in admin settings now have role="status" and aria-label="Loading" for screen reader users (AdminSettings.vue)
  • Connection card keyboard nav — Feed connection expand/collapse headers are keyboard-accessible with tabindex, role="button", aria-expanded, and Enter/Space handlers (AdminSettings.vue)
  • Status dot contrast — Disconnected connection status indicator has a visible border for better contrast on light backgrounds (AdminSettings.vue)

Documentation

  • New SCALABILITY.md — Comprehensive guide to performance, caching, resilience, rate limiting, GDPR, and enterprise features
  • Updated ARCHITECTURE.md with scalability section
  • Updated SECURITY.md with CSP, rate limiting, GDPR, audit logging, and feed widget security sections
  • Updated ADMIN_GUIDE.md with health check and audit log sections
  • Updated ADMIN_SETTINGS.md with connection testing, export/import, enabling/disabling connections, Clean Start confirmation, and advanced options collapse
  • Updated FEED_WIDGET.md with RSS example screenshot, SharePoint setup guide (Entra ID app registration), content type selection, error messages table, and screenshots for all connection types
  • Updated ACCESSIBILITY.md with feed widget and admin panel accessibility improvements
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureLc6iFEUpymkn2oOpihHrtxmTjKYFZWKcuvfBrf1Xr3us6SzOBhArJpj7t5GHUekRY6sJiuf47lqIDbjzf9fby51vse5bF+n1/QHXdApMDmsxo6EhtM5e3VRWje9A+ZuT2W+Xspdu1owszLqJfQw3TMBFmtAF2QNLAxTU6X8BOwc2Px6MUJnD+aNrOaE4117bBqSv27JihzvyHoz21ey+kZK+vrXaZoXrLzKkf69mPYKMEiVuyKaueTLhuRcihJPZAuVC+ClgZVTueZGDmNQA39xfL9Puy5JpbQx6+7MSL6FKhoN4bXD3ve3DloPsIC35KF+gpH/T8hY6f3vWQgX5mGh5mQSJLHTTkYulKiDcXRq82cDg/o2tpw7D6Uu3R/wVafqGrndtl8A5/okhCHGJnwh7FdG3vzoMFMLdEM03Zlk4W5hiVio5fd1Wy0LVM6SaGM81S9+TrOV0S35vuONStfe56e17wDC9DVaznDTQJW7E7qj4eihX/r0sVD0qQzYoIQ7PvnJ5XNAobWh28TA0eXwOnTwlOSsFhHxBLyt/DJE2CYoEz8YYBNnBgTGthYVKPp/grlWfFGNrRygNOYYMbMSmVqZQ/8liz1OrMcFwC0DoW/IVtmaB8PIGYs7XO8D8IBYRVpklTlQpgFrEf8PpD/8rfnp04VGlWCb/E9tR9x4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 1.2.0
Release Details
UpdatedApril 16, 2026, 10:48 a.m.
Changelog

Fixed

  • People widget filter persistence — Filters using the "does not contain" operator were silently converted to "equals" on save because not_contains was missing from the backend operator whitelist. After a page refresh the filter showed different results. The operator is now correctly preserved
  • People widget filter value encoding — Filter values containing special characters (&, <, >, quotes) were HTML-encoded on save via htmlspecialchars(), causing them to no longer match user profile data (e.g., "R&D" became "R&D"). Filter values now use a dedicated sanitizeFilterValue() that strips tags and control characters without HTML-encoding. Existing corrupted values are automatically decoded on read
  • Editor contrast on colored rows — Column labels, placeholder text ("Enter text..."), column borders, and "Add Widget" buttons now adapt to dark row backgrounds (Primary color). Previously these elements were nearly invisible on dark backgrounds

Added

  • Skip-to-content link — Keyboard users can skip past the navigation to reach the main content directly (App.vue, PublicPageView.vue)
  • Semantic landmarks<header>, <main> elements replace generic <div> wrappers for better screen reader navigation
  • ARIA tab patterns — Proper role="tablist/tab/tabpanel" with aria-selected on NewPageModal and MediaPicker tab interfaces
  • ARIA combobox pattern — PageTreeSelect now announces as a combobox with aria-expanded and role="listbox" on the dropdown
  • Carousel accessibility — News carousel has role="region", aria-roledescription, aria-label, aria-live="polite" for slide announcements, and respects prefers-reduced-motion
  • Live regions — Loading states use role="status" with aria-live="polite", error states use role="alert" (App.vue, PublicPageView.vue, CalendarWidget.vue)
  • Focus-visible styles — Global *:focus-visible outline for keyboard navigation visibility
  • Reduced motion support — Global prefers-reduced-motion media query disables all CSS animations and transitions. Carousel autoplay is skipped when the user prefers reduced motion
  • Visually-hidden utility class.visually-hidden CSS class for screen reader-only content
  • Breadcrumb current pagearia-current="page" marks the active page in breadcrumb navigation
  • Accessibility documentation — New ACCESSIBILITY.md documenting WCAG 2.1 AA compliance status, legal framework (Wet Digitale Overheid), and implemented measures

Changed

  • Form labels associated with inputs — All form inputs across 15+ components now have programmatically associated labels via for/id pairs or aria-label attributes (WidgetEditor, NewPageModal, PageTreeSelect, CommentSection, MediaPicker, AdminSettings, PageEditor, NewsWidgetEditor, PeopleWidgetEditor, CalendarWidgetEditor, LinksEditor, NavigationEditor, PublicPageView)
  • Icon buttons accessible — All icon-only buttons in InlineTextEditor toolbar, carousel navigation, MediaPicker, and AdminSettings now have aria-label attributes
  • Draft badge contrast improved — Fallback text color darkened from #856404 to #6d5003 for a 5.5:1 contrast ratio (WCAG AA requires 4.5:1)
  • Dropdown accessibility — Navigation dropdowns have aria-haspopup and aria-expanded attributes
  • WelcomeScreen heading — Changed from <h1> to <h2> to prevent duplicate h1 on the page
  • Password error announced — Public page password error message has role="alert" for screen reader announcement
  • MediaPicker strings translated — All hardcoded English strings wrapped in t() translation function

Fixed

  • Focus anti-pattern removed — Removed event.target.blur() in Navigation.vue that was stripping keyboard focus after clicking the page structure button

Documentation

  • Added ACCESSIBILITY.md with full WCAG 2.1 AA compliance matrix
  • Added accessibility link to README documentation section
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureWi2Kezb67KRxkFi/zRvjUrCCpNNRc2DBOWtuhOITpNScggVnaSiP+zLGO3s+/fPnKmgGrFoPeSuTSQifpEA37aQrwWx1comrLRq6k9SG+4+VhgAxVjvYdha0fqhah0HDjsgfC1cLhOBExqudxnijKEf+NCGgZqf1tHFnLtUbM1Z+x5o0CjAjv47c8Qrz/LD5NTvDcmU2vkkePA4nNjMheGuxC70rmwceaXaoA2CRf9BZ2XQsI8AgE9yoTEFvdWVdpN/BR+DKoAQya6XBZitrAp1jvH3okVMMap+XDBJrhD8mfBC/9eEn4Q/UW1Xc/m3WnCMVy5MiuY3Jv0b9pl+BghH8elxTjsZZRQJ7riGX1k9e/I3hjl4GZKO96USxGi5tDoWWtq/dKLddmrzy00o0cBMuKaAJ/sFal+OyZg++OWO7Zi0sxeL12T2OaojmJ4u22sZmgaZi+Tl5naidjOE9cz3Tv41C7IIAKpW4j1Xrj7L2D9vA5C7rKH/7vIbY/iLWnIY0df5BDs7NsccnftNNLXGA24PjtN7C21SoLbSHA2hDk81Lq3QohMyCod13UkcCO4/OjKFH523IEmLnzxujA+YXNxnfEvaEW66AQn56pDKgBN0tmLKjMBd8hIAEBzpBP67buSytYIj3XjoRtR9rMHq1W125eljViPQlVVd0vTM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 1.1.2
Release Details
UpdatedApril 10, 2026, 10:41 a.m.
Changelog

Fixed

  • Telemetry error feedback: The "Send report now" button now shows the actual server error message (e.g., rate limit, connectivity issue) instead of silently failing
  • MetaVox icon dynamic loaded — MetaVox sidebar tab icon is no longer a hardcoded SVG copy. Now loads dynamically from the MetaVox app via imagePath('metavox', 'app.svg'), so logo changes in MetaVox are automatically reflected in IntraVox. Dark mode handled by Nextcloud's automatic app-dark.svg serving

Changed

  • App Store description rewritten — Expanded from ~150 to ~250 words, structured in 6 sections: page editor, widgets, collaboration, content management, enterprise, and requirements
  • App Store summary — Changed to "SharePoint-style intranet pages for Nextcloud — no code required"
  • Author updated to VoxCloud — Author name, email (info@voxcloud.nl), and homepage (voxcloud.nl) now reflect VoxCloud branding
  • Screenshots expanded from 3 to 7 — Added calendar widget, people widget, news carousel, templates, and engagement screenshots
  • Category social added — Reflects engagement features (reactions, comments, people widget)

Added

  • Documentation links in App Store — Editor Guide, Admin Guide, and API Development Guide now linked from the app listing

Security

  • axios upgraded to 1.15.0+ — Fixes critical SSRF vulnerability via NO_PROXY hostname normalization bypass (GHSA-3p68-rc4w-qgx5)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignaturedEPa13irIrVkzszfHig0ZkpEhHIKNvbSxRdMHeALc3YGKW3H/pXgEyzlSiOgTRlYG9JwD6bAo8ANVhK9tBaIMr5nzOO0JrgExrnHniBe4LtGgJ2xbE1TeVVKEnlgcmwi8SG60ueKvIJU/x/Vy2yIJJGe/ShTntep5qiwGJBe8QksUTojfPiDaqDXzcgVRyYhbvIuT44/TF5oohBzbLLHvXm5bhcbUP6WyWz2KsTF7sgMtkKmClOiY/vZYVG2QaK87+QbwBwnW5icirect8ZzPzxSHqsg3LJdP4InayQhs21ZSm6rdrmBhT8Z36OJv9Mu2Dzdvl5cbqalUJbLs5ILHh/i4LKcIgt5fd9yvPHrtH7DNKQHeYMdH6x9saOq6zDC/g71N2zb1klXypSNpnkb/Ki9ZniJd0AQq2vxj4i0rguZZSM2HyMgnQnmAUU/HHbZGExGVQ6qqZl2xdVp3PZMZiQKJvIoVFqev4CbHr1Mite0cy2aYcb8iGnAdGYBL8Q2YahPyL3+dgHmi6/ywY3pmo9w+4O+JDggH3O7Mt2rlgbEQAaR0qLafrRU0yTB54Xyk7CNQE4kV1oGzl+wIO0LBBpDnuQAqenvuh7ac4W3kil3fbjVs9lk3JiH9q0Wb9gQ50ZE9T00RM/VhSDacfnmghY1udXhgAThMrNXeOjQ3m0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 1.1.1
Release Details
UpdatedApril 8, 2026, 11:53 a.m.
Changelog

Added

  • Support contact settings — New admin settings section for configuring organization name and support contact details. Contact information is included in telemetry for easier support identification
  • App Store screenshots — Added calendar widget screenshots (layout, editor, primary, sidebar) and updated admin demo data and edit mode screenshots

Changed

  • Contact info updated — Author email changed to info@voxcloud.nl and website URL to voxcloud.nl
  • Admin settings refactored — Extracted support/contact settings into dedicated SupportSettings component for cleaner code organization

Security

  • serialize-javascript upgraded to 7.0.5 — Fixes excessive CPU usage vulnerability in array-like object serialization during webpack build process (#42)
  • brace-expansion upgraded to 5.0.5 — Fixes bracket handling vulnerability (#40)

Fixed

  • Demo data imports all languages — Demo data setup now detects the single active language and imports only that language's content, instead of importing all available languages regardless of configuration
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureaKR0xRRjvews2FOdXJ446XMnOvUrRh3oPx3N7dR/TGujbDnjFFXwF8qC7wXo9CrwLD164arXII26lxxH509xmimeAfARht3+m5iFU8X2UdeWfszCJtuf2TilPEp+3ZDcgKOpN3o9dkcas6hV7rYfsqVJTkLAPqvAhOA3lRQOM70SKV8P5Jo3wSKHiXocbdsk094u2jd640LIR3EFfkdCrzxQJ9KetiH3w+h135bz1qwU8/eceKTH+O9aHYtphsbfFqRvZzMqnZ3qEABfWzSdOMgkvSIrpYZDWy20aPi1vagdi9VtLBzuzVNvmzjLKcCu3HNdJ2mrITGFykR1JM+EKG5AmdoIovqjunLgwpoCQCmLYnvhLegYfsIz1MbG0mgfJ1ZeHwW/DI/9usLGtlNOwRqJjaL9WIgT2zk4wPkG0P0N8f+i/S4limsWXHilNlqj7nZJWQftBm+UoecxZ4hewwGbQZZIGdBDIFkbKV3JPsnN8y6OXohEIAWXfgy66SXM5n2KdYVlFAiMyAcIPWkab+ZjB/o+jrpkGuC/9+eJ0fTd8LAwSKzupt4hTCqmmru5t2Or/6YSEZxl3LlghWtC3ivSefxvqLuKy95vPVmT+ylOPohgmzUxPzlOHHcOp/N9YIP3YSWwMZ2cDbvAI4PeZD3UjHpnhm3t9q8lHOrygyk=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 1.1.0
Release Details
UpdatedMarch 29, 2026, 7:49 a.m.
Changelog

Added

  • Calendar widget — New widget that displays upcoming events from shared Nextcloud calendars. Supports multi-calendar selection (merged view), configurable date range, event limit, and show/hide time and location. Events are shown with colored date badges matching the calendar color. Recurring events (RRULE) are correctly expanded into individual occurrences
  • Responsive calendar layout — Calendar widget automatically adapts to available space: 1 column in side columns, 2 columns in medium containers, 3 columns in wide content areas (via CSS container queries)

Fixed

  • People widget users lost on reload — User IDs containing dots, @ signs, or spaces (common in LDAP/SAML/OIDC environments) were silently stripped during save, causing selected users to disappear after page reload (#41)
  • Deploy script OPcache — Added Apache/PHP-FPM restart to deploy script to clear OPcache after deploying new PHP controllers

Security

  • Rate limiting on public People API — Added AnonRateThrottle to the public share endpoint for the People widget to prevent user enumeration

Documentation

  • Language & demo data — Added guidance that Nextcloud language setting must match the imported demo data language. Added troubleshooting entry for "Admin sees empty Welcome page after demo import" (#37)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureZBIZ5aIC0Jf+cgyuNd3xYfy7lZbE7fbg38Xem2/zEuWkI5PWOSY/WmCebThcm9NHRdFJIL74zHRIUbfE2XaicmcqwgSZozNcUeUG8kpK5elRhLYJXPdPZMAN1LpKiPlrz3951koLc2f0LNpTvOBvsXgk0Fjlsj/NRmYcn6Oy224uzlYrkwpwBn8UDRA6CBC8qJLG+TYF4/VnIfJLEomG01HV9Ar2TGb+dDUobWPWAgfXfkdNtrc7gfLPipGlAs8enaBWbEhLQi/qRVfU2W1azSTYzFgl1rwBMnFG5V9g8ymkZpakbioOnL074u9JUYwBIcXGSq+7w9oKo5LFmzidPmSALp8B12aM+lAElH/vBKlHBYSoDv3A/KoqWfXW5BZvXQXmtFa043vK0kHD5M0PARFfvPN7xkVXUYoQX5o9Ptre/I+UkINXO6FX7X4KepWM57WFVidCOMwwCl9e6b5UQdt6aeYSl1qoAnBNQgAxtYm2QgRJa9FyDEl4+yup+bBwrYU8URBCQJk6GTbAFaA5397wE12N3OLpwoiIx3g7ZBP+ppRmO1eb1SDGN9tJWa5AKgEg7CBnBaV5YNtWRlmoUfsgfCt1b039Dca7fEVcL523m5zgmxqkiCbO70fwlTdhoe00hQpcZomfmEP6wB7FftWIqMR63Ndw+7WmoGIouhM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 1.0.1
Release Details
UpdatedMarch 9, 2026, 3:12 p.m.
Changelog

Added

  • IntraVox Editors group — A third permission group (IntraVox Editors) is now automatically created during setup with Read + Write + Create permissions. This provides a three-tier permission model out of the box: Users (read), Editors (read/write/create), Admins (full access)
  • Scenarios documentation — New SCENARIOS.md guide with step-by-step recipes for content approval workflows (using the Nextcloud Approval app and MetaVox) and department-based intranets

Documentation

  • Updated ADMIN_GUIDE, AUTHORIZATION, EDITOR_GUIDE, and README to reflect the new three-group permission model
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureQuql4/Qdcw6lDxelq5UHCLVmlFf7+6YjcNPpfIDS+ynsrL+9QbyGsGQyx8fZdisovKtKJODYvfEou6EmcdD8l14mvBc4P6v6PZwzRmgP3qGMG4fYX0lFfniULGs8YGtKVGtgqilJ1gLnHQrO4qIxQqvvNGtTKmr8N3GehbHprT/tTzgPTlhmIHPIjKrw6q5m380WyUBhq9Hw9o16MekCX5obAshT2pwQuQvkmEYuprV4wr3dFOqKC5vM04yd1x6s2y72ZLcCC4YDPRoMP75vClpQaaScIYwVoulnFlLqOZUw/qlywWttwMAalDJkRPmC3E08xlOup4RwZkGSdu9jv5ESDemPoxvtV4alDMkf/qECW8KZkjTEX89MuYfFLK7POiH68qJllpAooquc71PAdN/YmTtKPplKBKqiJwWReAgDK4dZdls1komf17vcn+usYsJhzVT5Jarp8jjT0aQpBFAUDIuEJmeF0nzI/Q0xV1bMeCs/j2yjDdSIJPLHr27uk68Tb+gBQbhYdpPR6sYxLT2DT3xbbvq9z3RPlowcO3/kvN71ojGEx6xPGOsISJbRDpg4v3ixzVaKa9nUurb44Hsp7E1GsF19ARAlEquCuJxkCXONHc4jjW0pPGUxyBAt5V4kvWqRhS9Whl1JjSWOd7X30GvShRSWwWu59BiaTpI=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 1.0.0
Release Details
UpdatedMarch 8, 2026, 10:37 a.m.
Changelog

IntraVox 1.0 marks the first stable release. After 19 iterative releases, the app offers a complete intranet platform: a full page builder with 10+ widget types, page versioning, templates, public sharing, RSS feeds, engagement (reactions & comments), draft/published workflow, concurrent edit protection, and multi-language support. The JSON page format and REST API are considered stable from this version onward.

Added

  • Page locking — Pessimistic locking prevents concurrent edits. When a user starts editing a page, other users see who is editing and the Edit button is disabled. Locks auto-expire after 15 minutes of inactivity, with a 60-second heartbeat to keep active sessions alive. Locks are released on save, cancel, navigation, and tab close
  • Lock safety net in API — Backend updatePage() rejects saves with HTTP 409 if the page is locked by another user, preventing data loss even if the frontend check is bypassed
  • Force unlock for admins — IntraVox Admins can force-release a page lock held by another user (e.g. after a browser crash). Includes confirmation dialog to warn about potential unsaved changes
  • Draft pages (#32) — Pages can be saved as "Draft" or "Published". Draft pages are only visible to users with write permission and are hidden from read-only users, public shares, search results, RSS feeds, and the page tree. Editors see a clickable status badge in edit mode to toggle between Draft and Published, and a "Draft" indicator in view mode. Backward compatible: existing pages without a status field default to Published
  • Duplicate row (#32) — Editors can duplicate a complete row (including all columns and widgets) with a single click. The duplicate button appears in the row controls next to the delete button
  • Sticky edit toolbar (#32) — The header toolbar with Save/Cancel buttons stays fixed at the top of the viewport when scrolling, making it accessible on long pages

Changed

  • Page lock translations — Lock-related UI strings translated to English, Dutch, German, and French
  • Draft/duplicate translations — Draft, Published, and Duplicate row strings translated to English, Dutch, German, and French
  • New pages default to Draft — Newly created pages (both blank and from template) start as Draft and automatically open in edit mode so editors can begin working immediately

Fixed

  • Links widget tile overflow — Tiles in narrow containers (sidebar, small columns) no longer shrink to unreadable vertical text. Tiles auto-wrap to the next row when there isn't enough horizontal space, while respecting the configured column count when space allows

Documentation

  • Editor guide — Added sections for sticky toolbar, page locking, draft/published status with visibility table, duplicate rows, and updated creating new pages workflow
  • Admin guide — Added page locking and draft pages sections, updated security considerations
  • README — Added page editor features (duplicate rows, sticky toolbar, page locking, draft/published), new feature sections with screenshots, updated security section
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureiNaCstuvlWhKDNWHxOI3UH2urSyZ8OZCmlMAvQHWW8FDbfo3gBmHCD7ofk/6G78se/+9K8bLaSPMd0f3n3enR62K0ZG0jj5TP4eVvIsVYpVlLdzZlV64fJRcFSUotMFaluWlflLPKhuJbPJTCLivaYwzxX8QhfG7f9SUgZcsb/YZrCU0exRzekrFevLtHNsVE5aj7UWGg3lQh/zYZ28tlpsoWUPCJ2dT4qQ56kFO6IYvc4Wmf2diEzLLye1XaVpLaBbldRfDt2b4siu3uUMPePJHij6EDYL1dQAPuYAa12slvrh9TTRlffbtU1ny3b+1t9yLAVBiE6NEFccX7S/P5pmEPNmoeCECIv8lTyw8GJUeRNT+VdmlOZporvVXn4CWhW4aaQW+qVMLUrKrQ4Ond/ZYmVyVR4TjKiGZr04hr/xIdj0FDPffqe3SiLS5DJ4g3P+q3CCI7vktKlIdOrgpyHFavOfTq9IT2MT94UfJFob8L34g+yDsfdyQdYC2hQTXZsQUJ9TS72pzUC4c52Y4gomtLyUh4E7xOv8hAiGiKvaCDlcQJD7jE95LKw+EEwMvXrDMfhgn8hHMg9JxzSapRggu59B5Butz83jVNRnTWht9gaGu3nlpvMnNoE0YdFyU2c1yj0w5DoB7VmKd+4+1S32aO97qba7DCBpqrdQYc8o=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 0.9.18
Release Details
UpdatedMarch 7, 2026, 11:51 a.m.
Changelog

Added

  • Spacer widget rendering - Spacer widget now renders correctly in view mode with configurable height (10-200px). Previously fell through to "Unknown Widget Type" error display
  • Links widget tiles layout - Links widget now supports a tiles layout alongside the existing list layout. Tiles display a larger icon (36px) with a separate title and subtitle on two lines, creating a card-style presentation. Editors can switch between layouts and set title/subtitle per link in tile mode
  • 30+ extra link icons - Added icons for common intranet use cases: folders, chat, dashboard, contacts, forms, code, support, security, organization, news, and more
  • 5 unique demo showcases with rich, diverse layouts demonstrating all widget types:
  • de-linden (Universiteit) — 4 photos, 1/2/3/4-column rows, video, people grid, SURF services, right sidebar
  • van-der-berg (Advocatenkantoor) — 3 photos, header row, news grid, file widgets, no sidebars
  • gemeente-duin (Gemeente) — 3 photos, 1/2/3/5-column rows, left sidebar, news list
  • de-bron (Zorggroep) — 3 photos, 4-column department overview, people cards, video, file widgets, right sidebar
  • horizon-labs (Tech startup) — 2 photos, news carousel, culture row, right sidebar

Documentation

  • Showcases guide (SHOWCASES.md) — Complete documentation of all 5 showcases: widget coverage matrix, technical structure, background color guidelines, image handling, and people widget portability
  • Editor guide updated — Added documentation for file, spacer, news, and people widgets; updated column support from 1-3 to 1-5; documented collapsible rows, header rows, and side columns
  • Export/import updated — Widget types list expanded from 6 to 10 (added links, file, news, people)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureCnOojEkcaYY3IrqfW3cj9gDhgOnlVkTd+sZpTFow4jh1pH+IrZ1NgXRjGgIKZiQtdvlh3AqgHdEE7kWidNvVTps4SL79TTLcQlO+aT223Sf9OOMC+GQsGkxUVKVY1d456mupVrZyslUCopbxr4Rf2aYxfsm3GFdMxPFGByXWE4VkJztuo8UI4krp2rfVRcBbv2m8RWd2w+1mAlkOiRK7176eS+d4jHn0h6Kslde5E/E4DfGML8uUyyu5yACJ/MMkUcJ+wxLvu2esOM5oPkbMrAHpWCa5TRzqVtbpoplcmDq4pYVw84AXc/+V91HduZOVLHgzWXhkV6O0qXjsWgsDfAPiZ1t9EWFuUMuV0EY2WbIxdo5eBSQsDaG4R60JKVlUvbx07OXecWG80VRslsngbXbTtvWV/AwHGWN60MufTQbEU8+cw3tIBD5RAlXwcnIVDHawBvasxQ7wlWU5/B8BZZkEDGdQMBlXTQE45+FVEbwXOaaQPD8s7cde2zCGk7Ze4MfIqZDyD5cBuszuVf5ljCpm8BQvt4oBGRPX9C0K8TB+l3vp6XzuMOvxixdIES9E20e9LYn1Yve0tTf3PzBQgUvPM4eYjXHD3U24w/0PNPNrBtLzg0uePqmm01dHBkVTqQC4CdmLD/cRG7GIH8bVBey+9XsftagMXH2LGuz8NS8=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 0.9.16
Release Details
UpdatedFeb. 25, 2026, 1:50 p.m.
Changelog

Added

  • RSS feed - Personal RSS feed for each user with token-based authentication, feed media endpoint, conditional requests (ETag/Last-Modified), and brute force protection
  • RSS feed settings UI - Generate, regenerate, and revoke feed tokens with configurable scope (my language / all languages) and item limit
  • RSS feed sharing policy - Feed respects Nextcloud's "Allow users to share via link" admin setting; shows clear error when disabled
  • RSS feed cross-language links - Feed items link via #page-{uniqueId} format, automatically resolving pages across language folders

Changed

  • Dummy text generator - Removed =dad() alias, only =dadjokes() and =lorem() are now supported
  • =lorem() rich formatting - Now generates richly formatted content showcasing all text widget capabilities: headings, blockquotes, bullet lists, tables, ordered lists, and mixed inline marks (bold, italic, code, underline, strikethrough)
  • Dummy text multilingual labels - =lorem() section headings, table columns, and status labels are now localized for EN, NL, DE, and FR
  • Documentation - Added RSS feed admin setup guide with GroupFolder permission requirements (Read + Share), ACL examples, and troubleshooting

Fixed

  • People widget "Invalid Date" - Birthdate now correctly displayed regardless of Nextcloud locale settings. Added backend normalization of locale-specific date formats (DD-MM-YYYY, DD/MM/YYYY, DD.MM.YYYY) to ISO 8601 before sending to frontend, with additional frontend fallback for edge cases
  • RSS feed empty for ACL users - Documented that GroupFolders requires both Read and Share permissions for public feed endpoints; updated all permission tables and recommendations
  • Webpack build failure - Added string_decoder and buffer to webpack resolve.fallback to fix build error caused by @nextcloud/dialogs 7.3.0 pulling in Node.js core modules via sax/is-svg
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureLkqXT+TE7U884io7bEDmL/gZLvaShUTg97nU7qIjNMBXEkd4nqo9nooA8+Y8qLUQEIjP1wFkw2p/TMduDHbWgZcPe+SIDuvfyQhqSlO5aeD8Q+pW+KmGAy0XbbQlVX6neiqaNGhD8TpCdnIStIHuPkjRngBSOuXf4JjeV3DNM2QKlck2at1svnElJOWujwLerTqWVGWQEaXSBvn0YGAHiLorgKXVitgZRMOxviUeSTxdWtwNsJ3vVIZ+mr+4UllElQh1jLgnePi2xa3DXs3b+r9CqebhIIQ2Brt8r0U2l3W5LIsjZJtf+/PHf9ytfAag51+XHLb/xMEZx9NDxakeGZlDPdQ652np7z7jgUxwE/wASSpVJ4LePTzwoBrdg4EDocI114Gtz0vqJGoTOJBHxZEovydDEXjOZSJcnLvzpfs1nkQBQYUvQGzSVti+0W64vSCh/I53o/U7GRYmCL03pYbNYZ9S2nk32usjfFizVbpGvKFrA5crLqxBns5Yb6bYY5QNtZtqHJiobkijwP19esHX6eCNLIKvI6aozaMtpawOQ/IDCDdJFI7N1+QFcoMgUsbbpfBXhImJ1I3LjWOjbzl+ZQ4d6CrHC1Gmd/KohKuvx5ER7RmgvLIhpgEEAKvdpFxgBc2gnQeVwTLUOBlzjJhS+I+7ggkrmX7+5HarwP0=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 0.9.15
Release Details
UpdatedFeb. 19, 2026, 6:35 a.m.
Changelog

Fixed

  • MetaVox sidebar on NC33 - MetaVox metadata tab now works in IntraVox on Nextcloud 33, where MetaVox registers via the new scoped globals API instead of the legacy OCA.Files.Sidebar API
  • MetaVox mock Node object now passes correct mountType and mountPoint attributes (camelCase) so groupfolder detection works properly
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
Signatured13CndlYRWziam4mAOeDoHdjExboNyPiyFqfTRdrqRtcJkWVhRE0vN7wCEpWqUZaAni+r5JOpmwhpD7ePTFB8j77sIMq2K2ahdeGOVhnRrhQ3Qk055iXrnxzm3lvwaaerShVPa9D5fga3auYwpcuJxW4NDj36QvCwybkhwzJx381shlVjGyuZKQFJJWn3d3ZAzC2u1El8OlLIeBEDeszJizpa3EBEGdftZ7sfqkem+UMU9jWOGrXMwkYsauDhp+0mW6TNb7lDV84gZUKoE9lAYYLTPzFU5VWDA2mtvV6h09kwtZrXfkMxoh+S/qAcFkP9gwXFHKZKCDs3Z/HGTqeDxrbW6EM5sboYLOS7+VQapwes/UsGRO3XO9jzo5cfe4+c6fy32mjgwyhskSBm5UYdpYANsRgvOj0D9GQFNLYSuktoHaV0lq7BAtroDDk7B09k/422Eia0taM9PuoTmbMZ97yhgYZpEyJMLVx4nTMu30zXXkw0fkF3KfF0vZMnsOaAgYfQWXzChqpOlvemmz7bx/Ew7Murqz5ytaXfZvQ09WtWEV4l1b4AdCaf1ow/+w+V5BtXM/tCvaUmjQtdK+mf70ptdCr/+crxjhytihIm+NFMZSB/FMNlOKGcM3J0wz/kcBJ6tCLAcCIjzaf9p+42yUo8bgi+WzJTNp0r6EZSLA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 0.9.14
Release Details
UpdatedFeb. 18, 2026, 2:07 p.m.
Changelog

Added

  • Nextcloud 33 support - App now supports Nextcloud 32 and 33 (PHP 8.2+ required)
  • Page nesting depth increased from 3 to 5 levels for deeper page hierarchies
  • Dummy text generator (easter egg) - Type =dad(), =dadjokes(3,5), or =lorem(2,4) in a text widget and press Enter to generate dummy content (inspired by MS Word's =rand())
  • Birthdate field support in People widget - display, filter (is_today, within_next_days)
  • Bluesky social link support in People widget
  • Date filter operators for People widget: is today, within next X days

Fixed

  • People widget display options now correctly control rendered fields in grid layout
  • Removed gridShowFields override that forced fields off
  • Removed hardcoded layout !== 'grid' template restrictions
  • Removed CSS rule that hid headline in grid layout
  • showFields is now the single source of truth across all layouts
  • All display option checkboxes now always visible in editor (no longer hidden per layout)
  • showFields whitelist expanded in backend (PageService.php) to support all 15 field types
  • Legacy title field synced with role for backwards compatibility
  • Heading widget bottom spacing increased
  • Comment cascade delete now properly deletes replies and updates count
  • Security: markdown-it updated to 14.1.1 (ReDoS fix in linkify inline rule)
  • Security: ajv updated to 8.18.0 (CVE-2025-69873 ReDoS fix)

Changed

  • Twitter links now point to x.com instead of twitter.com
  • Dependency updates: axios 1.13.5, qs 6.14.2, webpack 5.105.0, ajv 8.18.0
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureKx4wBbCHSaA+wD5HWQ0/arQjdIOdtmxLwRYyh1GhcBKDiUVrfNUoFlOreUrs/FPv6heMXFD8XdJcVn6XXxPZzSOAYVCnKaIGGYea4RfsTlCbrShkasX2TxQ/1Kn1vH2QM+qe0aNdZstYv1QxhFgQyb82tWreFTuhisKgndvWqE5LouHSIDzamgr+iKmEoxf/LvCbPt4UvWc8nQdCc+XdnDa7WzMrjAB1xu5tHXE3coFmEqAWUwdMpp+vR9YanFLjC8CKfJEl+S4qL0DhDviXXUzjlOmIEttrXwRI1nv5rLg+Ucy1fBdZPUmMLXqgh7eUTWCSAlTVsTPYMvdhNQAZMWpioKf7X7pZcbp9JvcmbTZ6+VJVIT8tGGJROwpx/Z8v1fN3e5Gcv+pSq0yHpKM43v2S8LSa+Z5HB7BIV5GeUCmSIGfrWYEJvXYhpHtyHJrdVYfH2YuYbqkAH5bKuURwKQdJ0Y6A9v/gpEdwso44dNpPh0CY2uaGk/FwrJs1IYYmCI59OqF6l1/ffo9l/jR+PA5Jh3nns9lUR+hhfTJ25hF3+xhYdQV818Acbnl24c59rugq7+hX++cVn/b8VXen5WIUdVK4nl8eHNSYYVJoRLoz0PqhEVitwSF9k6zU+6/kSWIe2UiEwiOALXTSS89q+TVRT1J1oX1L//SPTg0b988=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<34.0.0
Minimum Integer bits32
PHP>=8.2.0
IntraVox 0.9.13
Release Details
UpdatedFeb. 12, 2026, 8:31 a.m.
Changelog

Added

  • People Widget: New widget to display Nextcloud user profiles on pages
  • Three layouts: Card (detailed with contact info), List (compact rows), Grid (avatar gallery)
  • Two selection modes: Manual user selection or filter-based (by group, role, department, etc.)
  • Group filtering: Show all users from specific Nextcloud groups automatically
  • Field filtering: Filter users by any profile field with operators (equals, contains, does not contain, is one of, etc.)
  • Customizable display: Toggle which fields to show (avatar, name, email, phone, role, headline, department, biography, social links)
  • Display options grouped: Basic Information, Contact, and Extended categories for easier configuration
  • Role and Headline fields: Separate fields for official job title (Role) and personal tagline (Headline)
  • LDAP/OIDC support: Custom fields from LDAP or OIDC are automatically detected and can be displayed
  • Nextcloud integration: Clicking avatars opens Nextcloud's contact menu (view profile, send email, check availability)
  • Privacy-first defaults: Phone numbers and addresses are hidden by default
  • Sorting options: Sort by name or email, ascending or descending
  • Column configuration: 2, 3, or 4 columns for Card and Grid layouts
  • Pagination: "Show more" button when there are more people than the configured limit
  • Dark background support: Proper text contrast on colored widget backgrounds
  • People Widget Guide: Comprehensive documentation at docs/PEOPLE_WIDGET.md

Changed

  • Filter field order: Filter fields now match the Display Options order (Group, Name, Pronouns, Role, Headline, Organisation, Email, Phone, Address, Website, Biography, Twitter/X, Fediverse)
  • Filter operators: Added "does not contain" operator for text fields
  • Column alignment: Fixed page columns aligning to different heights (now uses align-items: start)

Fixed

  • Dark background text contrast: Pagination footer text now readable on dark widget backgrounds
  • Widget title alignment: Widgets with background color now align with widgets without background
  • profileEnabled filter: Internal Nextcloud field no longer appears as a filter option
  • Avatar filter: Avatar field removed from filter options (not useful as a filter)

Documentation

  • README Updated: Added People widget to features list and documentation links
  • Internal Docs: Updated Additions.md roadmap to reflect People widget completion
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignaturehV3i13h8ckL9hELKxdaQ8Uyr/kUJCtjteUUgczGkj0i4AUY1qmxOQpr7h3SZSYG/5V7cOWG0VcT6eofmd2tM2zTY21oQjMEs+vlojzYwU0TgjXUQJlwkremsvgKJJsa28o6Np3w43G7RDk3/xVWl8Rcp+McTwCw3jIYGHJLnOTshQgmWIahWCynsLDUVGxidb5kwUoDGMZKii7tS9oM5l/1H5RnNGtlD7fvquDNemQ6wBVJ2u2ijvPXCdFzn20gfwfWk3T2O7Hwjz50fnkrdvd5vO7OzaxjbIhBKy7mZanIEHuRNHA7xjzCvB+Cd6yPk6SRHR/5vY3igFgSTdpF8pJCopnnNr8Tid+lWeprqIl51wwgjb1Gz2Z+OQQ84zVj2bmpV9i36aY/r3TuWw551KhqTFSMnMUQmk2vYw91wP5iPQGX6kxu0h99Qmt9Zs8HjFoikwLWtDb7iAGHa77pC+SBTdrV5fP7BCD//AD5owXapaFJT2NXrGcMoFJBQes6CR9dBVHZ04WU9lMINnqh3G/EzigknzoMwheQ/dqD7mH2PVuIMFNm/FIEWXUPbIwgYvjrX/pkeFVtU4U7O2Tt7jbBYD2kwSMFEM4loiC7wNEzCUJ+UAwBj3ajE5PL3o11UHademWD2HzCTabzlQg0K3seX4M+aig2MzmEugamVGhw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0
IntraVox 0.9.12
Release Details
UpdatedFeb. 9, 2026, 5:01 p.m.
Changelog

Changed

  • Automatic Template Installation: Default templates are now automatically installed during app install/update
  • No longer requires manual occ intravox:setup command for templates
  • Existing templates are preserved (idempotent installation)
  • Templates are installed after demo data import completes
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignaturerVvT4H+yHmCH6KJhXQzLiyYtLlPHVtbrH3egQgcFN1xupxG4LNuGDzHOx097ODYQew0KOYcfb388+/V1Y7XxTiqXUeFRxX6hANfZo3TWoMP2YUW37X8IYiGFbpWsBxSbxP2qgrgsjbegXDNDmXOzPA264ee7O5yIPHyWtm5ZLD49RFOMItOB5phR8h7+4digwmdfAwtg9HR9OkBXJZI0mUmFUuJ/CWpDhFVTi/RUbNQ40D8Vyl8PWgiYN/00SmzFq4IwMRKpaGcSTeD7xU4exMKi06Rn/IO8zdpjSJJXN2gS2YUm9+c+cOxJ4p22QR6oPO7buPS9R5hN3AiwoW3Y7W9mu15NsRIOAHlgSiGpPiqAUfd02iKUHllL/ZH3cWYK39xynRoyqAOz64vKUiGo7O6thbOfrsua501HN6Xu9EkPMjTOeljcu1ZgErJCJr/W+XbvXbj62L8DnxiJW6fwTTUZQiFTpPeBBwgzKjX29qj4f/c+w9RJH8r4etu4YWj+kgVvBVU9tmn1ZOoDO4O8e5LiudB+kG0Rt0+hwxy1xyU/zybjiVtTeIjRIaIqXtbXMRfTO8lDcQjoLdGxkuOLN8f96VmIPSTzPUp9+DC67c7SCAQEO0mmR1iYu5o7UsiCZKg26kFdmU8sJIxJcjM3D2DSIvs1/HRvZqdRjBBAtyQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0
IntraVox 0.9.11
Release Details
UpdatedFeb. 9, 2026, 4:20 p.m.
Changelog

Added

  • Default Page Templates: 7 professional page templates installed automatically during setup
  • Department: Team info, services, and resources layout
  • Event: Program schedule, speakers, and registration sections
  • Knowledge Base: Documentation hub with categories, FAQ, and popular articles
  • Landing Page: Visual homepage with hero, features, sidebar, and call-to-action
  • News Article: Single article layout with hero image and related links
  • News Hub: Central news page with carousel, featured articles, and categories
  • Project: Project management page with status, milestones, team, and documents
  • Template Preview Cards: Visual layout previews when creating pages from templates
  • SVG-based schematic showing column layout, header rows, sidebars, and collapsible sections
  • Widget type badges showing which components are used (heading, text, image, video, news, links, divider)
  • Complexity indicator (Simple/Medium/Advanced) based on layout structure
  • Column count and widget count statistics
  • Enlarged Template Modal: Larger "Create new page" dialog with improved template gallery
  • Grid layout with 220px minimum card width
  • Scrollable gallery area (450px max height)
  • Template Translations: All template titles and descriptions translated
  • Dutch, English, German, and French translations
  • Automatic fallback to original text for custom user templates
  • Template Stock Images: Professional placeholder images included with each template
  • Hero images, feature images, team photos, speaker portraits
  • Images automatically copied when creating pages from templates

Changed

  • Template installation now runs automatically during occ intravox:setup
  • Templates are installed to {lang}/_templates/ for each language folder
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
Signaturef4SDWLwiEFHMcQ9i+1jUrkEJL3RcJA3/36FDPoI6nVf5uS3h8kmnF/tnNLGzj7gr5SKdvn9AglqkSTF9L6a/uz28LTgVq+9QaLPlBUDdjhuIDMIJwPbN1Z+kiWIcCVpz0gjNkhbyCQJ4ZQNv/ViYQHFG74Xk2GCIuRfXeopAyklSJcL2cZHfTQhoJDv42nLS4aJ7Umgx7XXiQgi9aAX5u911NTer++UU32Tu9ywlCx/XmI7IRLB/yv/Lufgzm44PiNpejcnCYsCuXTGemqUZhO44LcNN6299uwiz0X7A72r4KblNo1HDBjCeBTrut0EdguRCOeZuRIrW1xBC5nLK0ETn8C03BAomGvqHVcdxehgZ7V3dstxE82DwQ0/CGok3DiWg3k9xlQItM/Hej/Ztss6YJmgZafrN8yx8hrvu21yCnPUYzBurL4Xz3odQOa3+NqIWx9YPB10nsmHti2mnxm36wKxIl7Lcw53prdUhWrVMateZyOUXHJhIlHOUjAs2IkkSrWAcr6r9gqCasTYADMNGb3SK2q7ne8Xc07A9KHJR+gxen4HYVINqCNZXtEgKc3c6e9yTFoVp05d4NkVHT4eEjzAjr5q6fyzLDYtZnRqznFTtMdlIeutKI+a6s0Np9iMt6XU8E0hvB8x+i6uTsNN4ebCRu7DmJma7GZripmA=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0
IntraVox 0.9.10
Release Details
UpdatedFeb. 5, 2026, 6:29 a.m.
Changelog

Fixed

  • Text Editor Table Spacing: Fixed blank lines between tables doubling on each save cycle
  • TipTap inserts phantom <p> elements between block-level nodes, causing newline growth
  • cleanMarkdown() now caps consecutive newlines at 3 (one visual blank line max)
  • Preserves user-added blank lines while preventing accumulation
  • Text Editor Asterisks: Fixed * and ** appearing in text after saving bold/italic combined with underline
  • Mixed markdown + HTML (**text<u>underlined</u>**) now correctly serialized as pure HTML tags
  • Error fallback now escapes content instead of returning raw markdown
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureRb0bxVoFDn0onuvt08cN9KDhGJKkZ7Ywexlj2Gc1E67YHFQLxeR+6iSbf2/p+vRuIi6rOBpSzlycylZNcgtyMLbD5/Qr5YFTyX+QxVPyu4l8HtySuCpyzBk0roO2gJZMYOC/iBvFVqmRojoURC5x4wwNhmoQtK1l8vM4rDVVX/IA3bn2kj5TD14EzAyG8nWkTogmwmDmNDiRu0Ut+uPOTznHSb3NbeoTQb55q88uljKHc52dqLeR/C/zxyxZdmNJ3jnHkLdqfr01SMFw2cXh8VnVa7fEy0kwvbY/JOXX/5puMGDu61ViuNDhrldm+tw+fPpswuwiSE/fax4JuJHw2Xpt3le47BQ0ulWVXoPABervbAK40QFxAtQAQwa6KB7AgSQS2/mArmBS+lmJWhWxduYnrWLmrmP2os4n/8Z6hS4CCjpqhbUKYJTmyGh3ZILw3ILvuqGXW8q63f6D0uccAwM9hkRYAQtdtJWf0/MoI8q2gzxe6k6n8TH+UOor8GzwqIq2QrR02xBGak+M8QyQ939BeZGzki6ZLX9K3eJ0pPeuf998szkZWDqm0NR40b9CCTepv6VzpwQK99C2YgDDW8TynbZQlz1FKHZouiUDFlct7PC7Jt530foYbSuO+j4gP+5Orz2AaFD/JJjT69UkaZ/NskvxawLKF8ypfXLjCT4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0
IntraVox 0.9.9
Release Details
UpdatedFeb. 4, 2026, 5:04 p.m.
Changelog

Added

  • Orphaned GroupFolder Data Management: New "Maintenance" tab in admin settings
  • Scan for orphaned groupfolder data (from reinstalled Team Folders app)
  • Recover content by migrating to the active IntraVox groupfolder
  • Delete orphaned data permanently
  • Useful for production environments recovering from Team Folders reinstallation

Improved

  • Team Folders Error Messages: Renamed "GroupFolders" to "Team Folders" to match Nextcloud App Store naming
  • More specific error messages when the Team Folders app is not installed or enabled
  • Separate error messages for different failure scenarios (app not installed, folder creation failed, access denied, unexpected error)
  • Full translations in Dutch, German, and French

Fixed

  • Public Share Page Tree: Fixed current page not being highlighted in page structure popup when viewing via public share link
  • Public Share Page Tree URL: Fixed 404 error on page structure in public share view (was calling /pagetree instead of /tree)
  • Password-Protected Share Navigation: Fixed "page not found" error after entering password on public share links
  • Generic "Could not create IntraVox GroupFolder" error now shows specific guidance based on the actual problem
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureCLK9mZDM5DTV0G98PiLFat4vI+clsiUTK4u6rci3QZo3gGoEfdS9scFLnDFufZAX38L1jetr0rM7ox0+DJz4xLXmZ+dTEjPT+ACNuja3PIGIkp/qO2+4E8nZfKU5xmSWT8oIPylplzgJ9xJ3BkbeRmz+V63g7yRa4AD/OSg2j9sXudoSBci2+qmIyKm0WML6erw+rUw4NY7bOLo2GCe1UrVFel92VJ73bm6ASSMPgg1un6880sSu+Hoc+Y/3HXQYUftfkv9fWWLvcIv2lDcsDQqC8+2i+F5DjLgS7EC7u+nLJKCxDyeAinA+oC67q2Q3ztXb66OcvDDe1C73tgp/4K4d1a5hNwzBs26LrkvnTf95hT1IiVWdIIxSMJ9mFCDtzAlyThKm6IQub8De8bcpGocMN5jkNiZgt6eAj4oTbCvB3P1m0oRHa7+FWvTkLC8n81NLQg7JteoR4BzSM7IpmWs6X3AFv6TfHfTmRTOQgwHtLietzq4WFlD927LtTYwHJwuyb8/JAbsDGvzhKO40V+Jw25FuolqF808s64TWjrjz9ejta5yuk1eg44FlrqVXICwUvOZ1Qcx/kIaOUgpG0N1zvPmiU6Z0sB3bCkVyujYFmP7ouL3pOrkh1LsCEGFMxtrnx6x0O/fCfpqr8TLA1p/nSGRddchhwRhc/DKz8DE=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0
IntraVox 0.9.8
Release Details
UpdatedFeb. 1, 2026, 1:57 p.m.
Changelog

Added

  • Public Share Links: Full anonymous access to IntraVox pages via Nextcloud share links
  • Share any folder scope (language root or subfolder) as a public link
  • Anonymous users see pages, navigation, footer, page tree, and breadcrumbs without login
  • Share scope enforced: only pages within the shared folder are accessible
  • Rate limiting on all public endpoints to prevent abuse
  • Public Page Viewer: Dedicated read-only view for anonymous visitors
  • Full page rendering with all widget types (text, images, video, links, news)
  • Navigation menu with mega-menu support
  • Page tree sidebar for browsing available pages
  • Breadcrumb navigation
  • Footer display
  • Responsive layout for mobile and desktop
  • Password-Protected Shares: Full support for Nextcloud share link passwords
  • Server-side password challenge screen (rendered before JavaScript loads)
  • Session-based authentication — enter password once, navigate freely within scope
  • Brute force protection (10 attempts/min per IP) with random timing delays
  • Password verified via Nextcloud's IHasher (bcrypt) — plain text never stored
  • API endpoints return 401 with passwordRequired flag for expired sessions
  • Vue.js fallback password form for session expiry during navigation
  • Share Dialog: Redesigned public link modal with full share context
  • Scope indicator shows whether link shares a page, folder, or language root
  • "Password protected" badge with lock icon when share has a password
  • Navigation tree showing shared pages structure
  • Clickable "Manage share in Files" link opens Nextcloud Files sharing sidebar
  • Copy public link button
  • Share Button: Always visible in page toolbar with two states
  • Active state (theme color): share link exists — click to open share dialog
  • Inactive state (muted): no share link — click for guidance on creating one
  • Detects existing Nextcloud share links for the current scope
  • Admin Shares Overview: New "Sharing" tab in IntraVox admin settings
  • Lists all active Nextcloud share links on IntraVox content
  • Shows scope, file path, creation date, and expiration
  • Direct link to manage each share in the Files app
  • Useful for auditing public access
  • Sharing Disabled Warning: Clear feedback when NC link sharing is disabled
  • Warning dialog with link to Nextcloud Sharing settings
  • Explains the prerequisite for public sharing
  • Public News Widget: News widget works in anonymous share view
  • New API endpoint /api/share/{token}/news for fetching news without authentication
  • Supports both sourcePageId and legacy sourcePath filtering
  • Share-aware image URLs for media in news items
  • Only shows pages within the share scope
  • Public Media Access: Images and resources accessible via share token
  • Page media: /api/share/{token}/page/{uniqueId}/media/{filename}
  • Shared resources: /api/share/{token}/resources/media/{filename}
  • Resource subfolders: /api/share/{token}/resources/media/{folder}/{filename}
  • Links Widget Color System: Redesigned color options for intuitive background control
  • Container background: 4 options — None, Light, Accent, Primary (with visual color swatches)
  • Individual link background: 3 options — Default, Light, Primary (with visual color swatches)
  • Default links blend transparently into their container/row background
  • Automatic contrast detection: white text/icons on dark backgrounds, dark text on light
  • Telemetry expansion: Added 7 new server configuration fields to anonymous usage statistics
  • Country code, database type, default language, timezone, OS family, web server, Docker detection
  • Send report now button: Manual telemetry report trigger in admin Statistics tab
  • Breadcrumb Home label from navigation.json: Home breadcrumb now reads its label from the first item in navigation.json instead of hardcoded "Home"
  • Public sharing documentation: Comprehensive guide covering setup, scope, password protection, security, and admin overview

Changed

  • SystemFileService: Extended with news page retrieval for public context
  • getNewsPagesForShare() uses system-level GroupFolder access (no user session)
  • Recursive page discovery with share scope filtering
  • Excerpt extraction from first text widget
  • First image detection with share-aware URL rewriting
  • Color Utilities Refactored: Separated DARK_BACKGROUNDS and LIGHT_BACKGROUNDS arrays in colorUtils.js
  • New isLightBackground() function for accurate contrast detection
  • --color-primary-element-light correctly classified as light background (was incorrectly dark)
  • News widget layouts (List, Grid) updated to use new light background detection

Fixed

  • Public Share Page Tree: Fixed page tree only showing homepage when sharing a language root folder
  • extractSubtreeByScope() now correctly returns the full tree for language-root shares
  • All subfolders and pages are visible in the sidebar navigation
  • Links Widget Contrast: Fixed white text/icons on light backgrounds (Accent, Light)
  • Links without explicit background now blend transparently into their container
  • Correct contrast for all container/link background combinations
  • Webpack Chunk Caching: Fixed TypeError: n[e] is undefined when opening page editor after rebuild
  • Added content hash to chunk filenames ([contenthash:8]) to prevent stale cached chunks
  • Telemetry countryCode and timezone: Country code now derived from default_phone_region instead of default_language. Timezone uses smarter fallback: Nextcloud config → php.ini → UTC
  • Telemetry sending to wrong URL: Fixed telemetry using deprecated endpoint. Now correctly uses TelemetryService::sendReport()
  • Homepage breadcrumb label: Fixed breadcrumb showing page title instead of navigation label on the homepage itself
  • Files URL in Share Dialog: Fixed file ID using internal GroupFolder storage ID instead of user-mounted ID, and corrected URL format to include index.php prefix

Removed

  • HMAC token system: Removed unused PublicPageService, PublicPageController, and templates/public.php — dead code from an earlier public sharing approach that was never used

Security

  • All public endpoints use #[PublicPage] and #[NoCSRFRequired] attributes
  • Share token validation before any data access
  • Share scope path enforcement prevents access to pages outside the shared folder
  • Anonymous rate throttling (60 requests/minute) on all public endpoints
  • Password brute force protection (10 attempts/minute per IP) with random delays (100–300ms)
  • Session-based password auth — password never sent to browser or exposed in API responses
  • Nextcloud share link settings respected (shareapi_allow_links)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
Signaturem52gHbT8mXTWqFH4iSNkuu5vB+wlx9soo59UPs31A7tFoHe9ipoUyemUw94tnosKwj12P217nOwEQEFnSr059Bmndx8PbO4OGgALv3MkZppE6KJoglXIt2oLYwh48ALSlGDRkNU3ciWDTruxcO2KF541cglphiykpfqrp0nTBwz9KDiseor0Ts9qE9aXjYmxPQGKTmb1XEYg0L0h01T0+QTS0pyl4mozMspZY6wok7y6hMe7/GAv/tE2EOBlUudKN/l8cG6T8I4p6Qce4ChxHQXrFEOJy4nTnGaL9HAt91iIYl6Pc42qjdzv4gTAYlmHYreAXkxf2duLBapfAhS3mcuoArtf4V0e+IEOji3+yZNR9c9zE0UkeTqBSXSqZ0hyFAUcDMO5VRbHh4CtOYW3yY5skaSNrl6quM881IHN9ipvlFkIimm/gxttYI8Kh+9/kg7QZiEnx59JPkc8jPy7yoeATW/iFLmFNvgGh05j+Gm2EG81SlkgUmkEWxXVOjWKi8g/s0IQlZjzP/0ZwrsbnclXAkzxXR66jx0K9ajZbu9hLkCDDlJ71lYk5WnSYiZgqdllraAhc7kaPRQDIPW/PqH+CxVV+KB68TW/3wUwJvPewuMpTDxXN6uuZC2IymxXib9wn59TiXGpxRJDk6R9K4hqPmnwBV99NW9Oj8J6q1I=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0
IntraVox 0.9.7
Release Details
UpdatedJan. 26, 2026, 9:51 p.m.
Changelog

Fixed

  • Code Block Rendering: Fixed code blocks corrupting after editing (#15)
  • Backticks no longer accumulate when saving and re-editing code blocks
  • Fixed double-processing of nested <code> tags inside <pre> elements
  • Code block content now correctly preserved through save/load cycles
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignaturefR/S9LkpLomqMbPE9qRCN51jLKAOMSBBCKWk1nyzwc5cK5N6NGBgTR5N2dcU038O2He96+BawNXePcpw4tUMoKYjLAt6DLr8iGq4+CSfGoFCYaGpoRm9RZS3hd0iVIgGeh81hXnEkWGII3bTaS0I2Mb4HWb2zxhViJESD8AiFYGtkdO4lIhwa0Sw1r5yQMxn2G+rNJM2XB+ySqeH5krhF6DnPMAsED9dK6R/LVXFfrgTpc2EFUoFPlXIqzwRM8bFAWbpNkRBb88n2wnKFYiE3bYJALPDXeUa7nw72NV15VK6K2JVpc5fZvcy8/Xz6M61aTPA6JtTMczbpzhzlwYeMk0W0/7PWbNdvtAXn6OYNuqkGHacCZcGMzf01Qb0HrQQm7kGGngfwK/avoPiz3oclnB75vQeH4wKMZojhoggxCzWwnfRPCF10UDh0AY/ofN2JOkMFLbpKUjI7suVty3r+vWKGZk5qbfbZ4w3E2YGBYnFZYVlceRa86EEBJuhCIvbXPWQDriyCWoAvgUksmuB/Nhhdbp1btDoqzGK9l2W44W4EAyOk2JX32cAKdzAjBcQlqvuvQoGuIhn8E0pORBH/w1T1J5tj8VPZl76lVopDOq400BQg0eaJQhURnlCCa/XAt5NY+AbBLXfaYFhYJiZGDLfg5QWenLgLNdjfaQd/3M=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0
IntraVox 0.9.6
Release Details
UpdatedJan. 20, 2026, 10:05 p.m.
Changelog

Changed

  • Database Exception Handling: Use OCP\DB\Exception instead of Doctrine exceptions
  • Follows Nextcloud coding standards for database-agnostic error handling
  • Cleaner code without string-based error detection

Security

  • svg-sanitize: Updated from ^0.20 to ^0.22 to fix medium severity vulnerability (GHSA bypass)
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureFKbWtadpIkxyQORuyKmtdyhKihh+TnOpv5TLpiInVKZE91KqljyU+oxQEOMEghDVY//reBY+zgArAWYOGB+c77eMdrpeblpFleaLPEPME9VjGxXK81ehLDtM3hPpnI10nNueL/wg+WPeWqNYG/IiyC1oJH5ks1yeiF91k6vunuDs7nHGw8luQQc6KNoLRwFJba2uQsC9s9eY4nwRSZ8YAlPrTGzU1JqQB0vQVDynOZio3tEvLUW22JPWTbrLOTkB95okcwV1t1h7kdrxb1E3XDYXZ/gkJq0FXUVg+FsKTQQnknZoOz1ZFUOaymknqb+MEQs1pgaufd+5NfcHIFw228GmVCNtGiAd+OCJdIlkWnKG45uL5z+fywTOEroY+liiYCmSCZq6bYDLnk4YP0PvVc02AyktC/0C/UYx5w8G3lh5xq7T4k6BpVvGyohUSr+GbnDybwJw5wfDpL1BRUSo9uWtBMa7/4ZOFFlBCuFe6/R50Vc1F28d5GYYRtRwB0+c58lacFeEluC1QJZBQvv5j+ktOi2FmWch9b8+0mKNdBTjt7XVU2SClcAJrA13+SzPsBJSE1LWeHEWg/10mAxz9P4kjDYfHAJs7SzUAh5E+MORwYKrybx4hLgh6Ufv9qgcXZeRwt0rTPIE3xYCymSUG3guNzsa4dFar/mpb64qy9U=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0
IntraVox 0.9.5
Release Details
UpdatedJan. 20, 2026, 2:52 p.m.
Changelog

Fixed

  • PostgreSQL Support: Fixed database compatibility issues for PostgreSQL users
  • SetupService: Now correctly handles PostgreSQL duplicate key errors (SQLSTATE 23505)
  • LicenseService: Added null check for shared folder to prevent crashes during setup
  • AnalyticsService: Improved exception handling for unique constraint violations
  • Installation on PostgreSQL: Setup no longer fails when re-running or retrying installation
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureCMaJ3B5mnvM6amFSYgSIl1zMz427DUBNfZLUlQ3gkTIaJIqwtTe0GVFB667GBiMomYz9rLe3pUDzGtp1zzd84PfFmXPEvwGftcfAmeawzTphAWlNAdC91KRdQaTWas73h6jEm/ShFCaVTjxE8aDRgjZIZzjrs95mSQFkeRTpN0nML+xqH28AkR2HIJL++3oWN7e1jpWd2HCyOLaMpbRDU+GJ6rGnBvBTj4MsoTVzFMs9cyKXWuaa0R9eCUDCumxAxnWL9aqdkf2A/GxpTGuzR2QktWHEnatZFVAf3LlVSw9YxG/hem9M/FBQ825ErXlsh7LUxBRW9gFpeeDfTn9M06E3Gqcy+BmbjTUn3lmfYjx2TZxU6idCfjr6mgCz2kaTG3vv7myuvyalVdaydrQpzLJ1BpWpEpGJ7tU6jytr/AU4THlvr76j+EvgNgtAor0bvzHgFc8oXbBOLwi5MI9oNC033F4zYKFajqiUuwUVtEtsSYz425NxKh6jSqikaN3F1yG3p2+ZlSBRyUJKsfu5fJraoPKlbqPnoOKnK5K6fv7HQOlCGbD+FYNlVDjN/PhSLFdnypOzP3rq0SUVrjvibzKqASjP6E/FkBrbCwCf+yWHxKE0rLSYPAL6GOFKxtKib1jQ9iJlK1zlQMH7EyyF3maT9cVaBk42M+a4a3JFlkQ=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0
IntraVox 0.9.4
Release Details
UpdatedJan. 20, 2026, 6:43 a.m.
Changelog

Fixed

  • App Store Cache: New version to bypass cached signature data in Nextcloud App Store
  • No functional changes from 0.9.3
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignatureGfWF48G9tm/QACyvvgQbDVriO6sYowvPNvLlP2sDX5bsPsh137Ttl0OtdKKS8z5SRmJ2FhyXUlBDgKyD895MIIjXtlc7QINL/fvk784n/7dm/kvEPIKsVVKAYlUSLt7aTUib0s824ahT0VilV9JZSH4934R8KkDVE3B9Ksk1J/EA37o5Ojmk4WsFCKfMnz0Yaq1dZIpEQ1jLSIdYTfdlVsqEL6Sam3+m1A1uBYqZQqnIczeqh2xoSh8n9QnlBQmDC3hzBW5gybKbXpufSwxaSJgxcfXDbQQBT1P6oOstHbchAeGt84Fb6wDlgVD8I/C2NUE7kwt/wWfojCWtGbiejxPFiz1A/fAgKvt3RpFdW7QhsQLqja0LHmvAb/FLgBNqaqUh4Pv3r+OSDlxXzMvZ/0imvqpp2XmhhpmAgW9CF/T64Pg2nNjwy/Nb+2e7el2sGfmDbYSSE77+P508rcGfexP0D98dfo7bAgsHdXmiK+82PFPc/Vo8cXwLkdChHunk660tIraABOukG4ytJCjNgiqWPMa9gIhJ/2d9/PZyB0b3UFvNkVgRiQxaG39fLzR5zbBCeEbQf2mbVARX080Q+jhkj9EK9ybKvdBJ3whjpeJsFiHsRxlmCXJubj6YMBA9Ilm7LaXDxob6lcLa1cnav/evH7uWX+NExN3GuFHq+Z4=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0
IntraVox 0.9.3
Release Details
UpdatedJan. 20, 2026, 6:24 a.m.
Changelog

Fixed

  • App Store Certificate Sync: Re-registered app with new certificate (serial 4824) to sync with App Store database
  • Previous releases were signed correctly but App Store database had outdated certificate reference
  • Resolves "Certificate 4822 has been revoked" error for all users
  • No functional changes from 0.9.2

Documentation

  • Added certificate verification section to RELEASE_CHECKLIST.md
  • Added warnings about certificate management best practices
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIEAzCCAusCAhLYMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjUxMjExMTAwNjEzWhcNMzYwMzE4MTAwNjEzWjATMREwDwYD
VQQDDAhpbnRyYXZveDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQN
YNfXarB7ojw5TU/UgymTbNrz7ciF0CESRsSMzXEUHdmgXQtB7uy6TBfptRkaA4T9
LJ3Vu5JQvQq4LAXWcQq3NYjY5KyhNGsg8pXl1Kbg1LxecKDgRTgEP/aWzsz0bpPf
vp3pzbhKuagA7v7hZGtihkAu7dY9ddNE5F2pTrTe+AhZhAwfYl1bOAEl/EDJ8DW/
iD3JZpA2kL6AuvciyszTkUuFz9PKBh1049jmK3YvWMmYyGcacExV0X/InAMyryt+
inle8X+0I+3Fbq+V3ErTnDeAYV98HdPbAmIstrPXrKmg8qDlKT7huu5H4t6eRBL1
DuoQhdBAx3nUq/KTueWe77U4d62j4QjkG46/AjAdE6qHEMpDL4mpjoxMs5uE3jG7
D5GvIkuugO9dFphV2pTmMTPwmzwa5X2hIR89LL1MxvoEz9lOFZJvspWcBeT041OS
BFI8pDNJmhca0q9XRvnSPXNiSYiqB0NztBDV5D8rNG4SfSSOWmxaJdMK5MWjDVfX
P94RbjrtPiKAx7Za18XZVkJImUJKM8L3iTgBFfi39y3um+Ni8u7quc9/7i95mJWA
8dF8vg1S6ncnrM+rHf7//cwDT+MH53RPWqo7e04BZgMwbZR5lD1cTWxTPY1YTW/Q
YoC7WC4ojeXJle/5tchQmhmkL3EtKGudyAhu+0vlAgMBAAEwDQYJKoZIhvcNAQEL
BQADggEBABhIXx8zpg18WiN2cAvEY/UeArKCfMe219a9ThTC8R9ChZHdfJ+QSrso
9Ut22V+9ByKKlbL1AEr6FG3sc8k35ceMdBVbcO9ZfPw3JWj+dbZIsEHoHUl4c2H9
rmGfOKMX8cqi6BMarVS9prn9ooGKCsiK7qyUm30nGaq6d6tNxp09ZY0Tr3PcOV8p
sGki2uPuoW3COGlSStV+VXiGD1HfUWGv/WKmTF4cS2Uqs8cy2eWjZeXvjYfmyV/J
BP3dUfHDC6/aSUdgo7AeBcGaqht4dxkvO3QGAY4nUZOgTaWxtr+65Lh5dRWm18h9
H6ufHVEsUE5+REYBGF1ngVctIzrgcdU=
-----END CERTIFICATE-----
SignaturepiCaGChVVrjsXiKqs1rnsOLZQkqXg3euTL07Lmz8dM/3wvfWDDNczY3NFuwxcvuDJ7ebhaybka6uEsVgQgiTXI48nnNLMoFj7yFYc+NcHNTIpQ8f0wSXvy4K3GaeHYvjAlc30fLegAAcRHLfAVvmNBi6Y7t2xwRfsMCThqTgOrblKRTncOxVsGg7VJ1AeDdTvETLyUT6MWrqYHF/9amV4+M6D9enJ8XNRUI5P+IYDAW84q65EpSiykK3TCfHVQ2GGJJHMblZvGPgS2xVS0tih4N24KRdIPjetD0YDrA25Mj9XJhtIEc1tKvI2T2Cn/C7ErIC3cSW6HjS0oFLNKU4QmjJRhXYSlOJ4k6YaxjPn0pR9tZYLj51EIptOrb8SnAlvUpDnC1v+ExxPwxctomncAVRfXKcRuPE5hCtNBfiElcqGMTtG5G5FwntNaog5yBo3PwibNe5Wb671AwzJ2DnxKseiKxtcgPfEpgNlZnU+BHiam/GXYI29CVHo61QOEGUdrJS59Ey0eXlXdTEisT3LaTi77AMVF2WxG0v0y1yI8uhOWOxzDviLheiRk5/7tLmWK6v7uDLu8IhUzH49jmRNABdCaHALKd5eu+ON5TZ2ZK5YfnxbTDHILzbt+BP/2lToTNh6S+2QgVxx195hk4dCVfGZwfV5B3OAni4VcEfqmk=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<33.0.0
Minimum Integer bits32
PHP>=8.1.0