npx create-twenty-app looks like this:
Key files
| File / Folder | Purpose |
|---|---|
src/application-config.ts | Required. The main configuration file for your app. |
src/default-role.ts | Default role controlling what your logic functions can access. |
src/constants/universal-identifiers.ts | Auto-generated UUIDs and metadata (display name, description). |
src/__tests__/ | Integration tests (setup + example test). |
public/ | Static assets (images, fonts) served with your app. |
File organization is up to you. The folders above are conventions — the SDK detects entities via AST analysis on
export default defineEntity(...) calls regardless of where the file lives.Dependencies
Both Twenty SDK packages belong underdevDependencies, not dependencies:
twenty-sdkships thetwentyCLI and the build/scaffolding tooling. It only runs at development and build time and is never imported by your published app’s runtime.twenty-client-sdkis imported by your app code (CoreApiClient,MetadataApiClient,RestApiClient), but Twenty provides it at runtime — logic functions get it from a generated SDK layer, and front components resolve it from server-served modules. Your installed copy is only used for typechecking and the deploy-time build, so it never needs to ship in the deployed bundle.
dependencies pulls it into the installed app’s runtime bundle, where it is dead weight. twenty build emits a warning when either is still listed under dependencies.
Add your app’s own runtime dependencies (libraries your logic functions actually import at runtime) under dependencies as usual.