Skip to main content
A new app generated by npx create-twenty-app looks like this:

Key files

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 under devDependencies, not dependencies:
The scaffolder pins twenty-sdk and twenty-client-sdk to its own version — keep the two in sync when upgrading.
  • twenty-sdk ships the twenty CLI 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-sdk is 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.
Keeping either package under dependencies pulls it into the installed app’s runtime bundle, where it is dead weight. twenty dev: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.