packages/twenty-docs/getting-started/core-concepts/apps.mdx
Most CRMs give you a config panel. Twenty gives you a platform. Apps are how developers extend Twenty beyond what the UI offers — defining data models, server-side logic, UI components, and AI capabilities as code, then deploying them to one or more workspaces.
Workflows cover no-code automation. But some things need code: a custom pricing engine, a proprietary enrichment pipeline, a compliance check that runs on every record update, a custom UI panel that pulls data from an internal tool.
Apps let you build these as first-class extensions — not brittle scripts talking to an API from outside, but code that runs on the platform with full access to the type system, permission model, and UI.
An app is a TypeScript package that declares entities using the twenty-sdk:
| Entity | What it does |
|---|---|
| Objects & Fields | New data tables and fields on existing objects — same treatment as built-in ones |
| Logic Functions | Server-side TypeScript triggered by HTTP routes, cron schedules, or database events |
| Front Components | Sandboxed React components that render inside Twenty's UI (side panel, widgets, command menu) |
| Skills & Agents | AI capabilities — reusable instructions and autonomous assistants |
| Views & Navigation | Pre-configured list views and sidebar menu items |
Everything is detected via AST analysis at build time — no config files, no registration boilerplate. Put a export default defineObject(...) in any .ts file and the SDK picks it up.
You write your app as a TypeScript project on your machine. The CLI watches your source files and live-syncs them to a running Twenty server — edit a file, see the change in the UI within a second. The typed API client regenerates automatically when the schema changes. When you're ready, yarn twenty deploy pushes to a production server, or yarn twenty publish lists your app on npm and the Twenty marketplace.