github →

New request

#20216: ConnectionProvider should support a logoUrl asset (not just a Tabler icon)

We'll provision a sandbox, run an agent against the issue, and open a draft PR. You can pull the branch and iterate from there.

Issue

Context

ConnectionProviderManifest currently exposes icon?: string (a Tabler icon name, e.g. IconBrandLinear). In practice this only works for the handful of providers Tabler ships brand icons for — most OAuth integrations (Notion, Slack, HubSpot, Salesforce, Stripe, GitLab, Bitbucket, Asana…) have no Tabler icon and the field stays empty.

Per Felix's comment on PR #20181, the field that actually pulls its weight here is a logo URL — the same shape defineApplication({ logoUrl }) already uses.

Proposed shape

Mirror defineApplication({ logoUrl }):

defineConnectionProvider({
  // ...
  logoUrl: 'public/linear-logomark.svg',
});

What needs to change

  1. twenty-shared — add logoUrl?: string to ConnectionProviderManifest (and decide whether to keep icon for the Tabler case or drop it).
  2. twenty-sdk CLI — already handles logoUrl for the app itself; reuse the same asset-upload path for connection providers (one entry per provider).
  3. twenty-server — column logoUrl on applicationOAuthProvider, surfaced via the ApplicationConnectionProvider GraphQL DTO. Migration to add the column.
  4. twenty-front — the connection-providers UI (settings tab + any "Connections" section) should render the logo when present, with a small fallback (initial letter? generic "key" icon?) when neither logoUrl nor icon is set.
  5. twenty-linear — opt back in by setting logoUrl: 'public/linear-logomark.svg' (the file already exists in public/).

Why this isn't in PR #20181

The PR is already large and the Tabler icon field works for the Linear test app. Dropping it for the test app (PR #20181 commit ff22b012) is the temporary stopgap until this lands.

Out of scope

Cross-app logo sharing or a public catalog of provider logos — apps ship their own assets like they ship their own descriptions.

Assessmentadvisory
feature●●● hard90% confidence

Cross-cutting enhancement involving shared schema, SDK asset upload, server DB migration, GraphQL DTO, frontend rendering, and provider migration.

Likely files
  • packages/twenty-shared/src/types/ConnectionProviderManifest.ts
  • packages/twenty-sdk/src/cli/utils/uploadAsset.ts
  • packages/twenty-server/src/engine/metadata-modules/application-oauth-provider/application-oauth-provider.entity.ts
  • packages/twenty-server/src/engine/core-modules/application/dtos/application-connection-provider.dto.ts
  • packages/twenty-server/src/database/typeorm/core/migrations/common/AddLogoUrlToApplicationOAuthProvider.ts
  • packages/twenty-front/src/modules/settings/connections/components/ConnectionProviderItem.tsx
  • packages/twenty-front/src/modules/settings/connections/components/ConnectionProviderIcon.tsx
  • packages/twenty-linear/src/index.ts
Create the request

This opens a fresh agent run and a draft PR for issue #20216.

Cancel