Skip to content

Connecting sources ​

A source is one external system whose records you want indexed. Moʻolelo ships with four connectors:

SourceAuthenticationIndexed records
GitHubPersonal Access TokenIssues, pull requests
Confluence CloudOAuth 2.0 (3LO refresh-token grant)Pages, blog posts
Jira CloudOAuth 2.0 (3LO refresh-token grant)Issues, comments
SharePointMicrosoft Graph OAuth 2.0 (client credentials)Drive items (files, folders)

You can connect any combination — the same Moʻolelo deployment talks to all four. Adding a source you weren't using before is an SQL INSERT; nothing else to redeploy.

How it fits together ​

text
your source ─── webhook ──▶ Moʻolelo
              (steady state)

your source ◀── REST API ─── Moʻolelo
              (initial backfill, configurable polling)

Each source typically goes through two phases when you onboard it:

  1. Backfill. The connector walks the source's REST API and pulls every existing record. This is a one-time pass that catches up on history.
  2. Webhook. Once the backfill finishes, you flip the source into webhook mode. The source pushes change notifications; Moʻolelo translates them into records.

Backfilling can take hours for a large corpus. Webhook mode is real-time (typically under a second from source change to indexed result).

Per-tenant configuration ​

Connectors are configured per tenant in a Postgres table named connector_configs. One row per (tenant, source) pair. The row contains:

  • The source identifier (github, confluence, jira, sharepoint).
  • The instance — the workspace / org / Cloud ID for the source-system installation.
  • The mode — backfill, webhook, or disabled.
  • The resources — list of repos / spaces / sites to watch.
  • The authentication credentials — source-specific JSON.

Inserting or updating a row takes effect within milliseconds; the connector picks it up via Postgres LISTEN/NOTIFY. There's no service to restart.

Webhook delivery ​

Webhook deliveries from your sources land at a single URL on your Moʻolelo deployment:

text
https://<your-moolelo-host>/webhooks/<provider>/<instance>

Where <provider> is github, confluence, jira, or sharepoint, and <instance> is the same string you used in connector_configs. The webhook receiver validates the signature on each delivery and rejects unsigned or wrongly-signed traffic.

See Configuring webhooks for the per-provider signature requirements and how to register the webhook URL on the source side.

Disabling a source ​

To pause ingestion from a source without losing its configuration, set its mode column to disabled. The connector stops processing within milliseconds; existing indexed records remain searchable. Re-enabling is the inverse operation.

To remove a source entirely, delete the row. Already-indexed records remain in Iceberg and Vespa until you explicitly purge them — Moʻolelo doesn't auto-delete data when you change connector configuration, by design.

Moʻolelo — self-hosted federated enterprise knowledge platform.