README.md
May 29, 2026 Β· View on GitHub
Important
π This repository has moved to Codeberg
Active development now happens at https://codeberg.org/Conduction/softwarecatalog.
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/softwarecatalog
Software Catalogus
GEMMA-compliant software catalog for Nextcloud β applications, modules, and integration management
Software Catalogus brings structured software portfolio management to Nextcloud. Register the applications, modules, and connections (koppelingen) that make up your organization's IT landscape, manage contacts and organizations, and synchronize catalog data across a federated open data network β all aligned with Dutch GEMMA standards.
It integrates with OpenRegister for data storage and automatic user provisioning, turning register contacts into Nextcloud accounts with role-based group membership.
Requires: OpenRegister β all data is stored as OpenRegister objects (no own database tables).
Screenshots
![]() |
![]() |
![]() |
| Dashboard | Applications | Connections |
Features
Application Management
- Software Landscape β Register and maintain all applications (voorzieningen) in your organization
- Module Tracking β Break applications into modules and track their versions, suppliers, and dependencies
- Connection Mapping β Define koppelingen (integrations) between applications and modules to visualize data flows
- Contract Administration β Link contracts to applications and track license agreements
Organization Management
- Organization Registry β Manage organizations and their contact persons within the catalog
- Automatic User Provisioning β Create Nextcloud accounts from contactpersoon objects in OpenRegister
- Role-Based Groups β Automatic group assignment based on user roles (beheerder, inkoper, ambtenaar)
- Organizational Hierarchy β First user in an organization becomes beheerder; manager relationships maintained automatically
Synchronization
- Federated Sync β Share and synchronize catalog data with other organizations over a federated network
- Open Data Publishing β Automatically publish your software catalog for transparency and reuse
- Event-Driven Processing β Real-time user and group updates via OpenRegister event listeners
- Background Jobs β Scheduled organization-contact synchronization via Nextcloud cron
Integrations
- OpenRegister β All data stored as JSON objects in OpenRegister schemas
- Nextcloud Groups β Automatic group creation and membership management per organization and role
- Manager Relationships β Beheerders become Nextcloud managers for their organization's users
Architecture
graph TD
A[Vue 2 Frontend] -->|REST API| B[OpenRegister API]
B --> C[(PostgreSQL JSON store)]
A --> D[Nextcloud Groups]
B -->|events| E[User Provisioning Service]
E --> F[Nextcloud User Manager]
G[Cron] -->|background job| H[Organization Sync]
H --> B
Data Model
| Object | Description | GEMMA Mapping |
|---|---|---|
| Voorziening | Application in the software landscape | Applicatie |
| Module | Component within an application | Module / Component |
| Koppeling | Integration between modules or applications | Koppeling |
| Organisatie | Organization that uses or supplies software | Organisatie |
| Contactpersoon | Individual linked to an organization | Contactpersoon |
| Contract | License or service agreement | Contract |
Data standard: GEMMA Softwarecatalogus with Schema.org compatibility.
Directory Structure
softwarecatalog/
βββ appinfo/ # Nextcloud app manifest, routes, navigation
βββ lib/ # PHP backend β controllers, services, event listeners
β βββ Controller/ # API and page controllers
β βββ Service/ # Business logic (user provisioning, sync, groups)
β βββ Listener/ # OpenRegister event listeners
βββ src/ # Vue 2 frontend β components, Pinia stores, views
β βββ views/ # Route-level views (dashboard, voorzieningen, organisatiesβ¦)
β βββ store/ # Pinia stores per entity
βββ docs/ # Technical documentation
βββ img/ # App icons and screenshots
βββ l10n/ # Translations (en, nl)
βββ docusaurus/ # Product documentation site (softwarecatalog.app)
Requirements
| Dependency | Version |
|---|---|
| Nextcloud | 28 -- 33 |
| PHP | 8.0+ |
| OpenRegister | latest |
Installation
From the Nextcloud App Store
- Go to Apps in your Nextcloud instance
- Search for Software Catalogus
- 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/softwarecatalog.git
cd softwarecatalog
npm install
npm run build
php occ app:enable softwarecatalog
Development
Start the environment
docker compose -f openregister/docker-compose.yml up -d
Frontend development
cd softwarecatalog
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.0+, Nextcloud App Framework |
| Data | OpenRegister (PostgreSQL JSON objects) |
| UX | @conduction/nextcloud-vue |
| Quality | PHPCS, PHPMD, phpmetrics, ESLint, Stylelint |
Documentation
Full documentation is available at softwarecatalog.app
| Page | Description |
|---|---|
| Features | Complete feature specification |
| Architecture | Technical architecture and design decisions |
| User Guide | End-user and administrator guide |
| Configuration | Setup instructions and troubleshooting |
Standards & Compliance
- Data standard: GEMMA Softwarecatalogus (VNG)
- Architecture: Common Ground principles β layered, API-first, open source
- 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 β Publication and catalog management
- NL Design β Design token theming for Dutch government standards
License
EUPL-1.2
Authors
Built by Conduction β open-source software for Dutch government and public sector organizations.


