README.md
May 29, 2026 ยท View on GitHub
Important
๐ This repository has moved to Codeberg
Active development now happens at https://codeberg.org/Conduction/docudesk.
This GitHub mirror is read-only โ issues, pull requests, and new commits should go to Codeberg.
Update your remote with: git remote set-url origin https://codeberg.org/Conduction/docudesk
DocuDesk
GDPR-compliant document anonymization, consent management, and metadata enrichment for Nextcloud
DocuDesk adds GDPR-safe document processing to Nextcloud. It anonymizes sensitive documents using AI-powered PII detection, tracks publication consent periods under the Dutch Wet Open Overheid (WOO), generates PDF documents from Twig templates, and automatically enriches document metadata โ all without sending data to external cloud services.
Requires: OpenRegister โ all data is stored as OpenRegister objects (no own database tables).
Screenshots
![]() |
![]() |
![]() |
| Dashboard | Anonymization | Consent Management |
Features
Document Anonymization
- Local Processing Pipeline โ All text extraction, entity recognition, and anonymization runs on your own instance; no data leaves your premises
- 3-Step Workflow โ Upload, review detected entities, anonymize; inspect identified PII before committing
- Named Entity Recognition โ Detect names, addresses, BSN numbers, and other sensitive data via Presidio / OpenAnonymiser
- Risk Level Assessment โ Automatic risk classification per document using configurable thresholds
- Batch Processing โ Process multiple documents in a single operation
Consent Management
- Objection Period Tracking โ Enforce the minimum 4-week publication objection period required by the Wet Open Overheid
- Consent Lifecycle โ Track each document through intake, objection period, consent decision, and publication
- Consent Dashboard โ At-a-glance statistics on pending objection periods, decisions, and recent activity
- Audit Trail โ Full history of every consent decision and status change
Document Generation
- PDF Generation โ Create PDF documents from structured data using mPDF
- Twig Templates โ Define reusable document templates with Twig syntax
- Metadata Enrichment โ Automatic language detection, keyword extraction, and topic classification on upload
Integrations
- OpenRegister Events โ Listens to
ObjectCreated,ObjectUpdated, andObjectDeletedevents for automated enrichment - Nextcloud Dashboard Widgets โ
AnonymizationWidgetandFileEntitiesWidgetfor quick overviews - Admin Settings โ Configure register/schema bindings, consent period duration, and enrichment toggles
Architecture
graph TD
A[Vue 2 Frontend] -->|REST API| B[PHP Controllers]
B --> C[AnonymizationService]
B --> D[ConsentService]
B --> E[MetadataService]
C --> F[OpenRegister TextExtractionService]
C --> G[Presidio / OpenAnonymiser]
D --> H[OpenRegister ObjectService]
E --> F
I[OpenRegister Events] -->|ObjectCreated/Updated| E
J[Nextcloud Files] --> C
Data Model
| Object | Description |
|---|---|
| PublicationConsent | Consent record with objection period, notification, and decision |
| File | Nextcloud file with extracted metadata (language, keywords, entities, risk level) |
| Entity | Detected sensitive data point (person name, address, BSN, etc.) |
Directory Structure
docudesk/
โโโ appinfo/ # Nextcloud app manifest, routes, navigation
โโโ lib/ # PHP backend โ controllers, services, event listeners, widgets
โ โโโ Controller/ # Anonymization, Consent, Metadata, Settings, Dashboard
โ โโโ Service/ # AnonymizationService, ConsentService, MetadataService
โ โโโ EventListener/ # OpenRegister object event integration
โ โโโ Dashboard/ # Nextcloud Dashboard widget definitions
โโโ src/ # Vue 2 frontend โ components, Pinia stores, views
โ โโโ views/ # Dashboard, anonymization, consent, settings
โ โโโ store/ # Pinia stores (consent, anonymization)
โโโ docs/ # Feature specs, architecture, API documentation
โโโ img/ # App icons and screenshots
โโโ l10n/ # Translations (en, nl)
โโโ website/ # Docusaurus documentation site (docudesk.app)
Requirements
| Dependency | Version |
|---|---|
| Nextcloud | 28 โ 33 |
| PHP | 8.1+ |
| OpenRegister | latest |
| Presidio / OpenAnonymiser | optional โ for AI-powered entity recognition |
Installation
From the Nextcloud App Store
- Go to Apps in your Nextcloud instance
- Search for DocuDesk
- Click Download and enable
OpenRegister must be installed first. Install OpenRegister
From Source
cd /var/www/html/custom_apps
git clone https://github.com/ConductionNL/docudesk.git
cd docudesk
npm install
npm run build
composer install
php occ app:enable docudesk
Development
Start the environment
docker compose -f openregister/docker-compose.yml up -d
# With AI services (Presidio, OpenAnonymiser):
docker compose -f openregister/docker-compose.yml --profile ai up -d
Frontend development
cd docudesk
npm install
npm run dev # Watch mode
npm run build # Production build
Code quality
# PHP
composer phpcs # Check coding standards
composer cs:fix # Auto-fix issues
composer phpmd # Mess detection
composer phpmetrics # HTML metrics report
# Frontend
npm run lint # ESLint
npm run stylelint # CSS linting
Tech Stack
| Layer | Technology |
|---|---|
| Frontend | Vue 2.7, Pinia, @nextcloud/vue |
| Build | Webpack 5, @nextcloud/webpack-vue-config |
| Backend | PHP 8.1+, Nextcloud App Framework |
| Data | OpenRegister (PostgreSQL JSON objects) |
| mPDF 8 | |
| Templates | Twig 3 |
| NLP | Presidio, OpenAnonymiser (optional) |
| Quality | PHPCS, PHPMD, phpmetrics, ESLint, Stylelint |
Documentation
Full documentation is available at docudesk.app
| Page | Description |
|---|---|
| Architecture | Technical architecture and design decisions |
| Features | Per-feature specification documents |
| API | REST API and integration documentation |
Standards & Compliance
- GDPR / AVG: Privacy-by-design; all processing happens locally, no external cloud
- Wet Open Overheid (WOO): Enforces the mandatory 4-week publication objection period
- Rijksoverheid Data Sovereignty: 100% local processing โ sensitive documents never leave your instance
- Accessibility: WCAG AA (Dutch government requirement)
- Authorization: RBAC via OpenRegister
- Audit trail: Full change history on all objects
- Localization: English and Dutch
Related Apps
- OpenRegister โ Object storage layer (required dependency)
- OpenCatalogi โ Publish anonymized documents in open catalogs
- Procest โ Case management for document-related processes
License
EUPL-1.2
Authors
Built by Conduction โ open-source software for Dutch government and public sector organizations.


