The Connectors System is the integration backbone of Sim Studio, providing a unified registry and interface for over 30 third-party services (Slack, Jira, GitHub, Google Workspace, etc.). It bridges the gap between high-level workflow blocks and low-level tool execution by managing OAuth credentials, service-specific metadata, and permission scopes.
The system operates through three primary layers:
SlackBlock or JiraBlock) declare their dependency on specific services and request the necessary OAuth scopes apps/sim/blocks/blocks/slack.ts89-90 apps/sim/blocks/blocks/jira.ts70-71oauthCredential parameter to an active access token to authorize API requests apps/sim/blocks/blocks/slack.ts84-87The following diagram illustrates how a user's natural language intent to "Connect Slack" transitions into code entities and database records.
Natural Language to Code Entity Bridge: Connection Flow
Sources: apps/sim/blocks/blocks/slack.ts9-22 apps/sim/tools/registry.ts254-260 apps/sim/app/(landing)/integrations/data/integrations.json160-167
The registry organizes connectors hierarchically. A single "Base Provider" (like Atlassian) can support multiple "Services" (Jira, Confluence), each with distinct descriptions and scope requirements.
| Entity | Role | Code Reference |
|---|---|---|
| Block Type | The internal identifier for the integration (e.g., slack, jira). | BlockConfig.type apps/sim/blocks/blocks/slack.ts10 |
| Service ID | Used for credential lookups and OAuth mapping. | serviceId: 'slack' apps/sim/blocks/blocks/slack.ts89 |
| Scopes | List of API permissions required for the service. | getScopesForService('slack') apps/sim/blocks/blocks/slack.ts90 |
The SlackBlock configuration demonstrates how a connector defines its identity, UI (background color, icon), and the sub-blocks required to collect authentication data apps/sim/blocks/blocks/slack.ts9-125
Sources: apps/sim/blocks/blocks/slack.ts9-98
Connectors act as the bridge between the UI's oauth-input and the tool execution routes.
Blocks define a subBlock of type oauth-input with a canonicalParamId set to oauthCredential apps/sim/blocks/blocks/slack.ts84-87 When a workflow executes:
BlockExecutor identifies the oauthCredential ID provided by the user.slack_message, jira_read).Data Flow: Credential to Tool Execution
Sources: apps/sim/blocks/blocks/jira.ts24-55 apps/sim/tools/registry.ts254-260 apps/sim/blocks/blocks/slack.ts84-91
The system uses a centralized mapping to ensure consistent visual representation of connectors across the documentation, landing pages, and the application canvas.
Icons are mapped from block types to SVG components in blockTypeToIconMap apps/docs/components/ui/icon-mapping.ts185-309 This ensures that a slack block in the workflow canvas uses the same icon as the Slack connector in the documentation.
| Block Type | Icon Component | File Source |
|---|---|---|
slack | SlackIcon | apps/docs/components/ui/icon-mapping.ts311 |
jira | JiraIcon | apps/docs/components/ui/icon-mapping.ts266 |
airtable | AirtableIcon | apps/docs/components/ui/icon-mapping.ts188 |
github_v2 | GithubIcon | apps/docs/components/ui/icon-mapping.ts229 |
The landing page and documentation utilize a JSON-based registry to display integration capabilities, categories, and tags apps/sim/app/(landing)/integrations/data/integrations.json1-167
tools, communication, productivity, analytics.messaging, webhooks, automation, project-management.Sources: apps/sim/app/(landing)/integrations/data/integrations.json53-55 apps/sim/blocks/blocks/slack.ts18-20
Connectors use subBlocks to dynamically render the UI based on the selected operation. For example, the SlackBlock changes its fields if the operation is send vs ephemeral apps/sim/blocks/blocks/slack.ts24-82
Connectors support multiple auth patterns defined in AuthMode:
Each connector defines a standard response structure to ensure AI agents can parse results consistently. For Slack, this includes shared property definitions for messages, reactions, and file attachments apps/sim/tools/slack/types.ts18-108
Sources: apps/sim/tools/slack/types.ts148-157 apps/sim/blocks/blocks/slack.ts59-68 apps/sim/blocks/blocks/jira.ts13-16
Refresh this wiki