Why Build a Custom Connector?
While Omni includes connectors for popular platforms (Google Workspace, Slack, Atlassian, HubSpot), you may need to integrate:- Internal systems — Databases, wikis, or custom applications
- Niche SaaS tools — Industry-specific platforms not yet supported
- Proprietary data sources — File formats or APIs unique to your organization
- Legacy systems — Older systems with custom APIs
SDK Features
Both SDKs provide the same core capabilities:| Feature | Description |
|---|---|
| Connector Base Class | Abstract base with sync lifecycle management |
| Sync Context | Utilities for emitting documents and tracking progress |
| Content Storage | Store document content for indexing |
| SDK Client | Communication with the connector-manager service |
| HTTP Server | Built-in server exposing standard connector endpoints |
| Data Models | Type-safe models for documents, events, and metadata |
Available SDKs
Python SDK
Build connectors in Python with FastAPI
TypeScript SDK
Build connectors in TypeScript with Express
Architecture
Custom connectors integrate with Omni exclusively through HTTP communication with the connector-manager service. Connectors have no direct database access — all document emission, state management, and content storage is handled via the SDK client which communicates with connector-manager over HTTP.Connector Lifecycle
- omni-connector-manager triggers a sync via HTTP
POST /sync - Your connector receives the request with source configuration and credentials
- Your connector fetches data from the external source
- Documents are emitted through the SDK, which sends them to connector-manager
- connector-manager queues events for the indexer
- Your connector reports completion or failure
HTTP Endpoints
The SDK automatically exposes these endpoints:| Endpoint | Method | Purpose |
|---|---|---|
/health | GET | Health check for container orchestration |
/manifest | GET | Returns connector metadata and capabilities |
/sync | POST | Triggers a sync operation |
/cancel | POST | Cancels a running sync |
/action | POST | Executes connector-specific actions |
Quick Start Example
Here’s a minimal connector implementation in Python:Example Connectors
Both SDKs include an RSS connector example that demonstrates:- Fetching data from an external API
- Parsing and transforming content
- Emitting documents with metadata
- Implementing incremental sync
- Handling errors and cancellation
- Implementing custom actions
Deploying Your Connector
Docker Deployment
Create a Dockerfile for your connector:docker-compose.override.yml:
Registering with Connector Manager
After deploying, add the connector URL to connector-manager’s environment:What’s Next
Python SDK
Detailed Python SDK documentation
TypeScript SDK
Detailed TypeScript SDK documentation