Moodle Deck Sync connects course-driven learning in Moodle with agile, visual task management in Nextcloud Deck. It is the Nextcloud companion app for Collaborative Learning Spaces that receives signed Moodle webhook events, provisions Nextcloud Deck boards for Moodle course groups and assignments, manages board membership, and exposes health/configuration endpoints for administrators.
The companion Moodle plugin (local_nextclouddeck) is supplied directly by
Brain Station 23 rather than through the Moodle plugins directory. Both halves
are required: Moodle sends the signed course/group events, and this Nextcloud
app turns those events into Deck boards and membership changes.
- Moodle Product Page: https://elearning23.com/nextcloud-deck-sync-for-moodle/
- Nextcloud App Store: https://apps.nextcloud.com/apps/moodle_deck_sync
- Support & Enquiries: elearning@brainstation-23.com
- Receives HMAC-signed webhooks from Moodle for course group, assignment, and membership changes.
- Provisions one Nextcloud Deck board per eligible Moodle assignment/group sync context and creates the expected project stacks.
- Resolves Moodle participants to Nextcloud users by email and can provision accounts according to the configured mode.
- Keeps persistent sync mappings so repeated Moodle events are idempotent and board/member updates can be reconciled safely.
- Archives Deck boards when Moodle groups are deleted, with optional background purge controlled by administrator configuration.
- Exposes admin settings and a health endpoint for validating Moodle, Deck, and bot-account connectivity.
- Nextcloud 34
- Deck 1.18.2 enabled in Nextcloud
- PHP 8.3
- Node 22 and npm 10 for frontend builds
- A dedicated Nextcloud bot user with an app password for Deck API calls
- The matching Moodle integration that signs webhook requests with the shared HMAC secret
The app is intentionally pinned to Nextcloud 34. Expanding compatibility needs a fresh Deck/API readiness pass before release.
Navigate to Apps → Integration → Moodle Deck Sync in your Nextcloud instance and click Download and enable.
For development, place this app at apps-extra/moodle_deck_sync or another enabled Nextcloud app path, then run:
composer install
npm ci
npm run build
php /var/www/html/occ app:enable moodle_deck_syncRun occ inside a real Nextcloud installation or container. It cannot run as a standalone host command.
Ensure the Nextcloud Deck app is enabled and create a dedicated Nextcloud bot user with an app password. Then configure Moodle Deck Sync from the Nextcloud administration settings page (Administration settings → Moodle Deck Sync):
- Allowed Moodle instance URLs
- Shared HMAC secret
- Bot username
- Bot app password
- User provisioning mode
- Optional purge policy for archived boards
Never log or share bot passwords, shared secrets, full signatures, raw webhook bodies, or unnecessary personally identifiable information.
Use the OCS health endpoint after configuration:
curl -s https://cloud.example.org/ocs/v2.php/apps/moodle_deck_sync/api/v1/health \
-H 'OCS-APIRequest: true'The response should report whether the app is configured, Deck is reachable, and the bot account is authenticated.
Install local dependencies and run the full quality gate:
make install
make qualityThe quality target runs:
- PHPUnit
- Psalm
- PHP-CS-Fixer dry run
- ESLint
- Webpack production build
- Shared integration fixture verification
Generated frontend assets under js/ are release artifacts and must be
committed before signing a release.
Report issues through:
https://github.com/eLearning-BS23/moodle_deck_sync/issues
Do not include secrets, app passwords, raw signed payloads, or full signatures in public reports.
AGPL-3.0-or-later. See COPYING.
