README.md
May 29, 2026 Β· View on GitHub
Important
π This repository has moved to Codeberg
Active development now happens at https://codeberg.org/Conduction/openregister.
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/openregister
OpenRegister
Flexible object storage for Nextcloud β schema-driven registers with REST APIs, multi-tenancy, and audit trails
OpenRegister provides a way to quickly build and deploy standardized data registers in Nextcloud. Define your data models with JSON Schema, store objects in high-performance registers, and expose them through REST APIs that follow NLGov API Design Rules and Common Ground principles.
It is the shared data backbone for apps like OpenCatalogi, Procest, Pipelinq, and Software Catalogus.
Screenshots
![]() |
![]() |
![]() |
| Dashboard | Registers | Objects |
Features
Core
- Schema-driven Registers β Define data structures with JSON Schema and organize them into registers
- Full CRUD API β Create, read, update, and delete objects through a standards-compliant REST API
- Multi-tenancy β Complete organization-based data isolation with user management
- Role-based Access Control β Fine-grained permissions at register, schema, and object level
- Audit Trails β Full history of all object changes with user attribution
- Time Travel β View and restore previous object states at any point in time
- Soft Deletes β Safely remove objects with configurable retention and recovery
- Object Relations β Create and manage typed connections between objects across registers
- File Attachments β Manage files with text extraction, OCR, and version control
- Schema Validation β Validate objects against JSON Schema with enhanced error messages
- Object Locking β Prevent concurrent modifications for data integrity
- Bulk Operations β Perform batch create, update, and delete operations
- Events and Webhooks β React to data changes with events for integrations and automation
- Data Filtering β Select specific properties to return for data minimization and GDPR compliance
Search and AI
- Full-text Search β Search across registers with PostgreSQL pg_trgm, no external engine required
- Automatic Faceting β Dynamic filtering based on object properties with UUID resolution
- Semantic Search β AI-powered search using PostgreSQL pgvector for meaning-based discovery
- Vector Embeddings β Automatic vectorization of objects and files stored natively in PostgreSQL
- File Vectorization β Chunk and vectorize documents (PDF, DOCX, images with OCR) for semantic search
- Content Generation β AI-powered text generation, summarization, translation, and classification
- LLM Providers β Supports OpenAI, Ollama (local), Fireworks AI, and Azure OpenAI
Integrations
- SOLR Integration β Optional Apache Solr for advanced search scenarios
- Source Synchronization β Keep registers in sync with external data sources
- Schema Import β Import schemas from Schema.org, OpenAPI, and GGM standards
- CalDAV Tasks β Attach Nextcloud tasks and comments directly to data objects
- JSON-LD and Linked Data β Standards-compliant output for the open data ecosystem
Architecture
graph TD
A[Vue 2 Frontend] -->|REST API| B[PHP Controllers]
B --> C[ObjectService / SchemaService]
C --> D[MagicMapper β typed columns]
C --> E[ObjectEntityMapper β blob storage]
D --> F[(PostgreSQL + pgvector)]
E --> F
C --> G[Solr β optional]
B --> H[RBAC + Multi-tenancy]
B --> I[Event System + Webhooks]
C --> J[AI / LLM Provider]
Data Model
| Entity | Description |
|---|---|
| Register | Collection of schemas with shared configuration and access rules |
| Schema | JSON Schema definition that validates and types objects |
| Object | Data record validated against a schema, stored in a register |
| AuditTrail | Immutable change log entry for an object |
| ObjectRelation | Typed link between two objects (within or across registers) |
| File | Attachment with text extraction, chunking, and vector embeddings |
Directory Structure
openregister/
βββ appinfo/ # Nextcloud app manifest, routes, navigation
βββ lib/ # PHP backend β controllers, services, mappers, events
β βββ Controller/ # API and page controllers
β βββ Service/ # Business logic (ObjectService, SchemaService, SearchServiceβ¦)
β βββ Db/ # Database entities and mappers (MagicMapper, ObjectEntityMapper)
β βββ Handlers/ # RBAC, faceting, search, multi-tenancy handlers
βββ src/ # Vue 2 frontend β components, Pinia stores, views
β βββ components/ # Reusable UI components
β βββ store/ # Pinia stores per entity
β βββ views/ # Route-level views
βββ img/ # App icons and screenshots
βββ l10n/ # Translations (en, nl)
βββ tests/ # Integration tests (Newman/Postman)
βββ docusaurus/ # Documentation site (openregisters.app)
Requirements
| Dependency | Version |
|---|---|
| Nextcloud | 28 β 33 |
| PHP | 8.1+ |
| PostgreSQL | 12+ (recommended, with pgvector and pg_trgm) |
| MySQL | 8.0+ (alternative, no vector search) |
Installation
From the Nextcloud App Store
- Go to Apps in your Nextcloud instance
- Search for OpenRegister
- Click Download and enable
From Source
cd /var/www/html/custom_apps
git clone https://github.com/ConductionNL/openregister.git
cd openregister
composer install --no-dev
npm install
npm run build
php occ app:enable openregister
Development
Start the environment
docker compose -f openregister/docker-compose.yml up -d
# Nextcloud available at http://localhost:8080 (admin/admin)
Frontend development
cd openregister
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 |
| Database | PostgreSQL 16 with pgvector + pg_trgm |
| Search | Magic tables (SQL), Solr (optional) |
| AI | Ollama, OpenAI, Fireworks AI, Azure OpenAI |
| UX | @conduction/nextcloud-vue |
| Quality | PHPCS, PHPMD, phpmetrics, Psalm, ESLint, Stylelint |
Documentation
Full documentation is available at openregisters.app
| Page | Description |
|---|---|
| Installation | Complete installation and configuration guide |
| Features | Feature documentation (objects, schemas, registers, search, AI) |
| Developer Guide | Development setup, Docker profiles, PostgreSQL search |
| API Reference | REST API endpoints and bulk operations |
| Testing | Integration test suite (Newman/Postman) |
Standards & Compliance
- Data standard: JSON Schema, JSON-LD, Schema.org
- API standard: NLGov REST API Design Rules (Logius)
- Dutch interoperability: Common Ground principles, VNG standards
- Accessibility: WCAG AA (Dutch government requirement)
- Authorization: RBAC with organization-level multi-tenancy
- Audit trail: Full immutable change history on all objects
- Localization: English and Dutch
Related Apps
- OpenCatalogi β Publication and catalog management (uses OpenRegister as data layer)
- Procest β Case and process management (uses OpenRegister as data layer)
- Pipelinq β CRM with lead pipelines (uses OpenRegister as data layer)
- Software Catalogus β GEMMA software catalog (uses OpenRegister as data layer)
- NL Design β Design token theming for government standards
- DocuDesk β Document generation
License
EUPL-1.2 β see LICENSE for details.
Authors
Built by Conduction β open-source software for Dutch government and public sector organizations.


