Skip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Connect

Beta

Connect is how your app talks to third-party systems—Stripe, Salesforce, Slack, GitHub, and hundreds more via Airbyte-compatible manifests. One HTTP surface covers three primitives:

  • Actions — Typed RPC calls (createLead, postMessage, refundCharge) with dry-run support.
  • Streams — Bidirectional data replication using the Airbyte wire protocol.
  • Webhooks — Inbound event receivers with signature verification and dispatch to jobs, streams, or functions.

Connect is a composition capability: it orchestrates Identity, Vault (credentials), Data (destinations), Storage (large payloads), Functions (transforms), Jobs (durable syncs), and the shared policy engine. Sandbox mode lets agents test syncs and actions before touching production data.

Connect is in beta: native connectors and the manifest adapter are production-ready; the full connector catalog and bidirectional conflict DSL continue to expand.

  • Unified connector contract — Every connector exposes Streams, Actions, and Webhooks through one descriptor.
  • Native Rust connectors — Stripe, Slack, Linear, GitHub, Salesforce (phased), Postgres-CDC, S3.
  • Manifest adapter — Airbyte Low-Code YAML interpreted in pure Rust (~100+ connectors at v0).
  • Sandbox verb — Structured diff, schema inference, and promote_token workflow.
  • Airbyte wire protocolAirbyteRecordMessage, AirbyteStateMessage, ConfiguredAirbyteCatalog.
  • Bidirectional sync — Two stream bindings plus conflict policies (last_write_wins, source of truth).
  • Webhook ingress — Anonymous hot path gated by receiver token + HMAC verification.

Create a Stripe instance, check credentials, and invoke an action.

Terminal window
reactor auth login user@example.com --password '...'
reactor connect catalog show stripe
reactor connect instances create my-stripe --type stripe
reactor connect instances credentials my-stripe \
--input '{"api_key":"sk_test_..."}'
reactor connect instances check my-stripe
reactor connect actions invoke my-stripe createCustomer \
--input '{"email":"ada@example.com","name":"Ada Lovelace"}' \
--dry-run

Sync Salesforce leads to Data (with sandbox)

Section titled “Sync Salesforce leads to Data (with sandbox)”

The CRM migration demo flow: discover, connect, sandbox, promote.

Terminal window
# OAuth flow for Salesforce
reactor connect instances create sf-prod --type salesforce
reactor connect instances credentials sf-prod # opens browser for OAuth
reactor connect instances discover sf-prod
reactor connect connections create sf-leads-to-pg \
--from sf-prod \
--streams Lead,Contact \
--dest data:salesforce_leads \
--schedule "*/15 * * * *"
reactor connect connections sandbox sf-leads-to-pg --limit-rows 100
reactor connect connections promote sf-leads-to-pg --token "$PROMOTE_TOKEN"
Terminal window
reactor connect receivers create my-stripe \
--webhook events \
--dispatch job:process-stripe-event
# Returns ingress_url: /connect/v1/ingress/{token}

Configure the ingress URL in your vendor dashboard (e.g. Stripe webhook endpoint). Connect verifies signatures per the connector descriptor.

When inbound and outbound connections share streams, define how writes conflict.

Terminal window
reactor connect policies conflict create \
--connection-a sf-leads-to-pg \
--connection-b pg-to-sf \
--rules 'Lead:last_write_wins,Account:source_of_truth_a'
[connect]
# Vault integration for credentials
vault_url = "http://localhost:8010"
[connect.data]
url = "http://localhost:8002"
api_key = "internal-data-api-key"
[connect.jobs]
url = "http://localhost:8005"
api_key = "internal-jobs-api-key"
[connect.storage]
url = "http://localhost:8003"
api_key = "internal-storage-api-key"
# Airbyte container adapter (size 5+ only — requires Docker/Firecracker)
[connect.airbyte]
enabled = false

Environment variables:

VariableDescription
REACTOR_CONNECT_BINDDefault 0.0.0.0:8007 (may vary)
REACTOR_CONNECT_DATABASE_URLMetadata Postgres
REACTOR_CONNECT_VAULT_URLCredential storage
REACTOR_CONNECT_JOBS_URLDurable sync execution
REACTOR_CONNECT_DATA_URLDefault stream destination
LimitValueNotes
Sandbox row limitConfigurable per requestDefault 100 rows
Sandbox TTL1 hourEphemeral schema auto-cleaned
Discover cache1 hourRe-discover to refresh catalog
Native connectors (v0.1)Stripe, Slack, Linear, GitHubSalesforce + bidirectional in v0.3
Manifest connectors (v0.2)30+ Airbyte YAMLPure Rust interpreter
Airbyte container (v0.4)size 5+ onlyLong-tail catalog
Webhook replay windowPer descriptorTypically 5 minutes
OAuth credentialsUser-providedStored in Vault, never in metadata DB

Native connector feature matrix (v0.1):

ConnectorActionsStreamsWebhooks
Stripe
Slack
Linear
GitHub

Dry-run support levels:

LevelBehavior
nativeVendor test mode (Stripe test keys, SF sandbox)
synthesizedReturns outbound request without sending
unsupported422 with suggested_fix
MethodPathDescription
GET/connect/v1/catalogList connector types
GET/connect/v1/catalog/{type_id}Full descriptor
POST/connect/v1/instancesCreate configured instance
POST/connect/v1/instances/{name}/discoverSchema discovery
POST/connect/v1/connectionsCreate stream binding
POST/connect/v1/connections/{name}/sandboxSandbox sync
POST/connect/v1/instances/{name}/actions/{action}/invokeRun action
POST/connect/v1/ingress/{token}Webhook hot path (anonymous)

Codegen typed clients:

Terminal window
reactor connect codegen --instance sf-prod --out src/connect/sf-prod.ts

OAuth refresh failed. Re-authenticate the instance.

Terminal window
reactor connect instances credentials sf-prod # re-run OAuth flow
reactor connect instances check sf-prod

Structured errors include suggested_fix and optional docs_url—agents should surface these to users directly.

Sandbox shows schema drift you did not expect

Section titled “Sandbox shows schema drift you did not expect”

Review diff_vs_current.added_columns and type_changes. Promote only when the diff is acceptable. Set options.schema_drift on the connection to block_until_approved for production safety.

Signature verification failed. Confirm the signing secret in Vault matches the vendor dashboard. Check clock skew for replay protection (timestamp within replay_window).

The action’s descriptor marks dry-run as unsupported. Use a vendor test instance (e.g. Stripe test mode keys) or invoke in sandbox mode on a stream binding instead.

Terminal window
reactor connect connections runs list sf-leads-to-pg --status failed
reactor connect connections runs logs sf-leads-to-pg run_01HZ... --follow

Runs delegate to Jobs internally; cancel and retry via the Connect façade or Jobs admin API.