How connectors work
Every connector follows the same lifecycle:Provide credentials
Each connector requires credentials — an OAuth token, API key, or service account — that Onyx uses to read from the source. Credentials are stored encrypted and are never exposed in the UI after saving.
Create the connector
In Admin → Connectors, click Add connector, select the integration type, and configure the scope: which workspace, repository, folder, or channel to sync.
First sync
Onyx performs an initial full sync to index all accessible documents. For large sources this may take several minutes to hours.
Incremental syncs
After the first sync, Onyx polls for changes on a schedule (configurable per connector, defaulting to every 30 minutes). Only new or modified documents are re-indexed.
Connector categories
Communication
Slack, Microsoft Teams, Discord, Gmail, IMAP
Project management
Jira, Asana, Linear, ClickUp
Knowledge bases
Confluence, Notion, BookStack, Outline, Slab, Guru, Coda, Gitbook
Code
GitHub, GitLab, Bitbucket
Storage
Google Drive, Dropbox, SharePoint, Egnyte, Blob storage
CRM & sales
Salesforce, HubSpot
Full connector list
Communication
| Connector | Directory | Notes |
|---|---|---|
| Slack | connectors/slack/ | Public and private channels; direct messages with permission |
| Microsoft Teams | connectors/teams/ | Channels and chat messages via Microsoft Graph |
| Discord | connectors/discord/ | Guild channels |
| Gmail | connectors/gmail/ | Individual mailboxes via Google Workspace |
| IMAP | connectors/imap/ | Any IMAP-compatible mail server |
| Gong | connectors/gong/ | Sales call transcripts |
| Fireflies | connectors/fireflies/ | Meeting transcripts |
| Zulip | connectors/zulip/ | Channels and streams |
Project management
| Connector | Directory | Notes |
|---|---|---|
| Jira | connectors/jira/ | Issues, comments, and epics |
| Asana | connectors/asana/ | Tasks and projects |
| Linear | connectors/linear/ | Issues and cycles |
| ClickUp | connectors/clickup/ | Tasks, docs, and spaces |
| Productboard | connectors/productboard/ | Feature notes and insights |
| Airtable | connectors/airtable/ | Bases and tables |
| Testrail | connectors/testrail/ | Test cases and runs |
| Request Tracker | connectors/requesttracker/ | RT tickets |
Knowledge bases & wikis
| Connector | Directory | Notes |
|---|---|---|
| Confluence | connectors/confluence/ | Spaces, pages, and blog posts |
| Notion | connectors/notion/ | Pages and databases |
| BookStack | connectors/bookstack/ | Books, chapters, and pages |
| Outline | connectors/outline/ | Collections and documents |
| Slab | connectors/slab/ | Posts and topics |
| Guru | connectors/guru/ | Cards and collections |
| Coda | connectors/coda/ | Docs and tables |
| Gitbook | connectors/gitbook/ | Spaces and pages |
| Document360 | connectors/document360/ | Knowledge base articles |
| Loopio | connectors/loopio/ | RFP library entries |
| Axero | connectors/axero/ | Community and wiki content |
| Drupal Wiki | connectors/drupal_wiki/ | Articles and taxonomies |
| MediaWiki | connectors/mediawiki/ | Wiki pages (Wikipedia-style) |
| Wikipedia | connectors/wikipedia/ | Public Wikipedia articles |
| Canvas | connectors/canvas/ | Course content |
| Highspot | connectors/highspot/ | Sales enablement content |
| Discourse | connectors/discourse/ | Forum threads and posts |
| Xenforo | connectors/xenforo/ | Forum threads |
| Freshdesk | connectors/freshdesk/ | Support articles and tickets |
| Zendesk | connectors/zendesk/ | Help centre articles and tickets |
Code & version control
| Connector | Directory | Notes |
|---|---|---|
| GitHub | connectors/github/ | Issues, pull requests, and files |
| GitLab | connectors/gitlab/ | Issues, MRs, and repository files |
| Bitbucket | connectors/bitbucket/ | Issues, pull requests, and files |
Storage & files
| Connector | Directory | Notes |
|---|---|---|
| Google Drive | connectors/google_drive/ | Files and shared drives |
| Google Sites | connectors/google_site/ | Published sites |
| Dropbox | connectors/dropbox/ | Files and folders |
| SharePoint | connectors/sharepoint/ | Sites and document libraries |
| Egnyte | connectors/egnyte/ | Files and folders |
| Blob storage | connectors/blob/ | S3, Azure Blob, GCS |
| Web crawler | connectors/web/ | Crawls public web pages |
| File upload | connectors/file/ | Direct file uploads via the UI |
CRM & sales
| Connector | Directory | Notes |
|---|---|---|
| Salesforce | connectors/salesforce/ | Accounts, contacts, cases, and custom objects |
| HubSpot | connectors/hubspot/ | Contacts, deals, tickets, and notes |
Document permissioning
Onyx mirrors access controls from the source application so users only see what they are already authorised to access.How permission sync works
How permission sync works
Each connector implements
validate_perm_sync() from BaseConnector. During sync, Onyx reads the ACL for every document (e.g., Google Drive sharing settings, Confluence page restrictions, GitHub repository visibility) and stores a permission record alongside the indexed content. At query time, results are filtered against the requesting user’s identity so only permitted documents are returned.Group sync
Group sync
For connectors that support group-based permissions (Confluence, GitHub, Google Workspace), Onyx also syncs group membership. When a user is added to or removed from a group in the source app, their access in Onyx is updated on the next permission sync.
Public vs. private connectors
Public vs. private connectors
Some connectors (web crawler, file upload, Wikipedia) index publicly accessible content and make it available to all users. For connectors backed by authenticated services, documents are private by default and only surfaced to users whose identity can be verified against the source ACL.
