Plugin catalog
All 15 built-in integration plugins, their auth model, and endpoint trees.
| Plugin | Auth | Notable endpoints |
|---|---|---|
slack | bot_token | channels.{list, create, archive}, chat.postMessage, users.list |
gmail | oauth_2 | messages.{send, list, get}, labels.{list, create} |
github | api_key / OAuth | repos.{get, list}, issues.{create, list}, pulls.{list, get} |
notion | api_key / OAuth | pages.{create, update}, databases.{query}, blocks.{children} |
linear | api_key / OAuth | issues.{create, update, list}, teams.list, users.me |
hubspot | api_key / OAuth | contacts.{get, getMany, createOrUpdate, search, delete} |
stripe | api_key | customers.{create, list, delete}, charges.create, subscriptions.create + verifyStripeSignature |
google-calendar | oauth_2 | events.{list, insert, delete}, calendars.list |
resend | api_key | emails.send, emails.get + verifyResendSignature |
asana | oauth_2 | tasks.{create, list, update}, projects.list + verifyAsanaSignature |
airtable | api_key | records.{list, create, update, delete}, bases.list |
posthog | api_key | events.capture, featureFlags.{list, evaluate} |
discord | bot_token | channels.{create, delete}, messages.create, guilds.list |
twilio | api_key (Basic) | messages.create, calls.{create, list} + verifyTwilioSignature |
openai | api_key | chat.completions.create, embeddings.create, Assistants v2 threads / runs |
Adding a plugin
Run the scaffolder:
fabric integrations generate slack-statusIt writes packages/integrations-v2/src/plugins/slack-status/index.ts with a working factory. Replace the demo endpoint, export from src/plugins/index.ts, and you're done.
Plugin shape
Every plugin returns the same FabricPlugin<Id, Schema, Endpoints, Webhooks, Options, AuthType> contract:
return {
id: 'slack',
options,
endpoints: slackEndpointsNested,
webhooks: slackWebhooksNested,
hooks: options.hooks,
webhookHooks: options.webhookHooks,
endpointMeta: slackEndpointMeta,
oauthConfig: slackOAuthConfig,
permissionsConfig: options.permissions ?? { mode: 'cautious' },
pluginWebhookMatcher: (request) => 'x-slack-signature' in request.headers,
keyBuilder: async (ctx) => { /* … */ },
};The runtime uses this contract to synthesize platform actions, register webhook handlers, gate operations on permissions, and resolve auth credentials per call.