Files
twenty/packages/twenty-apps/internal/twenty-for-twenty
Raphaël Bosi 0dc6272da5 Remove twenty-ui reexport from the SDK and use twenty-ui directly (#22326)
## What & why

Removes the `twenty-sdk/ui` reexport. Apps now use Twenty UI by
installing
[`twenty-ui@1.0.0-alpha.1`](https://www.npmjs.com/package/twenty-ui/v/1.0.0-alpha.1)
from npm and importing its subpaths directly. The reexport re-exported
types that didn't resolve, forcing typecheck workarounds.

## Changes

- **twenty-sdk**: delete `src/ui/index.ts`, drop the `./ui` export,
remove it from the browser vite build, and rewire the CLI manifest-mock
to `twenty-ui` (`.css` falls through to the empty-CSS loader).
`twenty-ui` stays a devDependency for the CLI fixture tests.
- **Renderer + create-twenty-app template**: import from `twenty-ui`
subpaths; the template pins `twenty-ui@1.0.0-alpha.1`.
- **Docs**: new "Using Twenty UI components" section (install + subpath
imports + `useTheme()` for theme tokens), codex references, and the
cross-doc-contract validator.

The `twenty-for-twenty` / `twenty-slack` example apps are intentionally
left on `twenty-sdk/ui`: they consume the published SDK (which still
ships `./ui`), and `twenty-ui@1.0.0-alpha.1` requires react 19 + a
`monaco-editor` peer the react-18 apps can't satisfy. They migrate once
the SDK is republished.
2026-06-30 11:17:48 +02:00
..
2026-04-17 17:29:09 +00:00
2026-04-17 17:29:09 +00:00
2026-04-17 17:29:09 +00:00
2026-04-17 17:29:09 +00:00
2026-04-17 17:29:09 +00:00
2026-04-17 17:29:09 +00:00

Twenty for Twenty

The official Twenty internal app, with modules for Resend and more.

Overview

Twenty for Twenty is the official internal Twenty app. It is organized into modules, each integrating a third-party service with Twenty.

Resend module

Two-way sync between Twenty and the Resend email platform. The module syncs contacts, segments, templates, broadcasts, and emails.

Inbound (Resend → Twenty):

  • A cron job runs every 5 minutes to pull all entities from the Resend API.
  • A webhook endpoint receives real-time events for contacts and emails.

Outbound (Twenty → Resend):

  • Contact and segment changes in Twenty are pushed back to Resend when records are created, updated, or deleted.

Configuration

In Twenty, go to Settings → Applications → Twenty for Twenty and set:

  • RESEND_API_KEY — your Resend API key. Create one at https://resend.com/api-keys (full access recommended).
  • RESEND_WEBHOOK_SECRET — the signing secret for verifying inbound webhooks (see "Webhook setup" below).

Webhook setup

The app exposes an HTTP endpoint at /s/webhook/resend that receives Resend webhook events. To connect it:

  1. Go to https://resend.com/webhooks
  2. Click Add webhook
  3. Set the Endpoint URL to your Twenty server's public URL + /s/webhook/resend (e.g. https://your-domain.com/s/webhook/resend)
  4. Set Event types to All Events
  5. Click Add
  6. Copy the signing secret Resend displays and paste it into the RESEND_WEBHOOK_SECRET app variable in Twenty

Sync behavior

Inbound

Source Mechanism Entities
Cron (every 5 min) Polls Resend API, upserts into Twenty Contacts, segments, templates, broadcasts, emails
Webhook (real-time) Receives Resend events via HTTP Contacts, emails

Outbound

Twenty action Resend
Create contact Creates the contact in Resend
Update contact (name, email, unsubscribed) Updates the Resend contact
Delete contact Removes the Resend contact
Create segment Creates the segment in Resend
Delete segment Removes the Resend segment