API gateway and integration hub for Nextcloud — connect, transform, and synchronize data between systems
OpenConnector brings enterprise service bus (ESB) capabilities natively into Nextcloud. Define external API connections as sources, expose your own API endpoints, transform data with flexible mappings, and keep systems in sync through scheduled or event-driven synchronizations — all from within your Nextcloud instance. It supports REST, SOAP, and XML APIs with OAuth, JWT, and API key authentication out of the box.
OpenConnector is a fully standalone app. It does not require OpenRegister or any other Conduction app to function, though it integrates seamlessly with OpenRegister when both are installed.
![]() |
![]() |
![]() |
| Dashboard | Sources | Mappings |
- Multiple API Types — Connect to REST, SOAP, and XML-based APIs with a unified configuration model
- Authentication — Built-in support for OAuth 2.0 (client credentials and password grants), JWT Bearer tokens, API keys, and HTTP Basic authentication
- Dynamic Credentials — Twig-based token rendering with automatic refresh for OAuth and JWT flows
- Request Configuration — Full control over headers, query parameters, pagination, and request options via Guzzle
- Microsoft Integration — Custom JWT assertion support for Azure AD / Microsoft Graph authentication
- Reverse Proxy — Expose external APIs through Nextcloud-hosted endpoint paths
- Per-Method Definitions — Separate endpoint configurations for GET, POST, PUT, DELETE on the same path
- Path Parameters — Dynamic URL segments with placeholder support for single-item and nested resource access
- Rule Chaining — Attach ordered rules to endpoints for authentication, mapping, synchronization, and file handling
- Public or Secured — Endpoints can be publicly accessible or protected with JWT, OAuth, API key, or Basic authentication
- Field Mapping — Direct one-to-one, renaming, type conversion, and format adjustment between source and target schemas
- Twig Templating — Use Twig expressions for complex transformations including loops, conditionals, and string manipulation
- Type Casting — Built-in casts such as jsonToArray for converting embedded JSON strings to structured objects
- Nested Object Mapping — Handle deeply nested data structures with dot-notation paths
- Conditional Mapping — Apply transformations based on JSON Logic conditions
- Source-to-Target Sync — Define complete synchronization flows with source configuration, target configuration, and data mapping
- Change Detection — Hash-based comparison to skip unchanged objects and avoid unnecessary API calls
- Synchronization Contracts — Per-object state tracking with origin ID, target ID, and hash storage for reliable incremental sync
- Pagination Handling — Automatic pagination traversal with configurable query parameters and result position detection
- Sub-Object Support — Synchronize related and nested objects without duplication, with contract-level tracking
- Force and Test Modes — Override change detection or run in test mode for validation before production sync
- XML Support — Automatic XML-to-JSON parsing with attribute preservation for XML-based data sources
- Authentication Rules — Enforce Basic, JWT, ZGW-JWT, OAuth, or API key authentication on any endpoint
- Synchronization Rules — Trigger a synchronization run when an endpoint is called
- Download and Upload Rules — Handle file access, retrieval, uploads, partial/chunked uploads with size and type restrictions
- Locking Rules — Exclusive access control with configurable timeout for resource locking
- Audit Trail Rules — Access and expose object change history through endpoints
- JSON Logic Conditions — Conditionally execute rules based on request body, parameters, headers, path, and method
- Scheduled Execution — Cron-based job scheduling for automated synchronization runs
- Job Logging — Full execution history with status tracking and error details
- Log Cleanup — Automatic cleanup of old log entries to manage storage
- Cloud Events — Emit and consume CloudEvents for real-time, event-driven data flows
- Event Subscriptions — Subscribe to events with configurable handlers
- Consumers — Define event consumers that process incoming webhook payloads
- Call Logging — Complete HTTP request/response logging for all source interactions
- Synchronization Logging — Per-sync and per-contract log entries with error tracking
- Rate Limit Detection — Automatic detection of rate limiting with backoff handling
- Configuration Groups — Bundle related sources, endpoints, mappings, rules, jobs, and synchronizations into named configurations
- Import/Export — Export configurations as OpenAPI-structured JSON for backup, sharing, and environment migration
- Slug-Based References — URL-friendly identifiers for all entities
graph TD
A[Vue 2 Frontend] -->|REST API| B[OpenConnector PHP Backend]
B --> C[(PostgreSQL / MySQL / SQLite)]
B -->|Guzzle HTTP| D[External REST APIs]
B -->|SOAP Client| E[External SOAP Services]
B -->|Twig Mapping| F[Data Transformation Engine]
B <-->|Optional| G[OpenRegister]
B --> H[Nextcloud Cron]
B --> I[CloudEvents Bus]
| Entity | Description | Purpose |
|---|---|---|
| Source | External API connection | Stores base URL, authentication, headers, and request configuration |
| Endpoint | Exposed API path | Reverse-proxy route with method, target type, and attached rules |
| Mapping | Data transformation | Field mapping with Twig templates and type casts |
| Synchronization | Sync flow definition | Links source, target, and mapping with pagination and conditions |
| SynchronizationContract | Per-object sync state | Tracks origin/target IDs, hashes, and last-checked timestamps |
| Rule | Endpoint logic | Authentication, sync triggers, file handling, locking, and audit rules |
| Job | Scheduled task | Cron-based execution of synchronizations with logging |
| Consumer | Event handler | Processes incoming webhook and event payloads |
| Event | Event definition | Cloud event configuration for event-driven processing |
| EventSubscription | Event listener | Subscribes to specific events with handler configuration |
| CallLog | HTTP log | Records request/response details for source interactions |
openconnector/
├── appinfo/ # Nextcloud app manifest, routes, navigation
├── lib/ # PHP backend
│ ├── Action/ # Action handlers
│ ├── Controller/ # REST API controllers (sources, endpoints, mappings, etc.)
│ ├── Cron/ # Background jobs (sync scheduling, log cleanup)
│ ├── Db/ # ORM entities and mappers
│ ├── EventListener/ # Nextcloud event listeners
│ ├── Http/ # HTTP utilities
│ ├── Migration/ # Database migrations
│ ├── Service/ # Business logic (call, mapping, sync, auth, SOAP, etc.)
│ ├── Settings/ # Admin settings panel
│ └── Twig/ # Twig template extensions
├── src/ # Vue 2 frontend
│ ├── Consumer/ # Consumer management views
│ ├── Endpoint/ # Endpoint configuration views
│ ├── Mapping/ # Mapping editor views
│ ├── Source/ # Source connection views
│ ├── Synchronization/ # Sync management views
│ ├── Job/ # Job scheduling views
│ ├── Webhook/ # Webhook configuration views
│ ├── dashboard/ # Dashboard overview
│ ├── event/ # Event management views
│ ├── rule/ # Rule configuration views
│ └── settings/ # Settings views
├── docs/ # Feature documentation and diagrams
├── docusaurus/ # Documentation website source (Docusaurus)
├── img/ # App icons and screenshots
└── l10n/ # Translations
| Dependency | Version |
|---|---|
| Nextcloud | 28 -- 33 |
| PHP | 8.1+ |
| Database | PostgreSQL, MySQL 8.0+, or SQLite |
No additional Nextcloud apps are required. OpenConnector works as a standalone application.
- Go to Apps in your Nextcloud instance
- Search for OpenConnector
- Click Download and enable
cd /var/www/html/custom_apps
git clone https://github.com/ConductionNL/openconnector.git
cd openconnector
composer install --no-dev
npm install
npm run build
php occ app:enable openconnectordocker compose -f openregister/docker-compose.yml up -dcd openconnector
npm install
npm run dev # Development build
npm run watch # Watch mode with live reload
npm run build # Production build# PHP
composer phpcs # Check coding standards
composer cs:fix # Auto-fix PHPCS issues
composer phpmd # Mess detection
composer phpmetrics # HTML metrics report
composer psalm # Static analysis
composer phpstan # PHPStan analysis
composer check:strict # Run all checks (lint, phpcs, phpmd, psalm, phpstan, tests)
# Frontend
npm run lint # ESLint
npm run stylelint # CSS/SCSS linting
npm run test # Jest unit tests| Layer | Technology |
|---|---|
| Frontend | Vue 2.7, Pinia, @nextcloud/vue, CodeMirror 6 |
| Build | Webpack 5, @nextcloud/webpack-vue-config |
| Backend | PHP 8.1+, Nextcloud App Framework |
| HTTP Client | Guzzle 7 |
| Templating | Twig 3 (data mapping expressions) |
| SOAP | php-soap/ext-soap-engine, php-soap/psr18-transport |
| Authentication | web-token/jwt-framework (JWT/JWE/JWK) |
| Logic | jwadhams/json-logic-php (conditional rules) |
| Async | ReactPHP (parallel page fetching) |
| Data | PostgreSQL, MySQL 8.0+, or SQLite |
| Quality | PHPCS, PHPMD, phpmetrics, Psalm, PHPStan, ESLint, Stylelint, Jest |
Full documentation is available at conductionnl.github.io/openconnector
| Page | Description |
|---|---|
| Introduction | Overview of OpenConnector and its components |
| Sources | Configuring external API connections and authentication |
| Synchronization | Setting up data sync flows with contracts and change detection |
| Mappings | Data transformation with field mapping and Twig templates |
| Endpoints | Exposing APIs through Nextcloud with rules and authentication |
| Rules | Endpoint logic: auth, sync triggers, file handling, locking |
| Configurations | Grouping and exporting entity configurations |
| Security | Security best practices and authentication patterns |
| User API | User management and authentication API reference |
- API standard: OpenAPI Specification (OAS) for configuration export
- Event standard: CloudEvents for event-driven integration
- Authentication: OAuth 2.0, JWT (RFC 7519), ZGW JWT, API keys
- Dutch interoperability: ZGW APIs (Zaakgericht Werken), Common Ground
- Accessibility: WCAG AA (Dutch government requirement)
- Localization: English and Dutch
- OpenRegister -- Object storage layer (optional; used as sync target when installed)
- OpenCatalogi -- Publication and catalog management
- DocuDesk -- Document generation
- NL Design -- Design token theming for government compliance
EUPL-1.2
Built by Conduction -- open-source software for Dutch government and public sector organizations.


