--- title: Structura proiectului description: Ce conține o aplicație Twenty generată — fișiere, foldere și ce face fiecare. icon: folder-tree --- O aplicație nouă generată de `npx create-twenty-app` arată astfel: ```text filename="my-twenty-app/" my-twenty-app/ package.json src/ application-config.ts # Required — your app's entry point default-role.ts # Permissions for logic functions constants/ universal-identifiers.ts # Auto-generated UUIDs and metadata __tests__/ setup-test.ts app-install.integration-test.ts .github/workflows/ci.yml # GitHub Actions public/ # Static assets vitest.config.ts # Test runner config tsconfig.json, tsconfig.spec.json .nvmrc, .yarnrc.yml, .oxlintrc.json README.md, LLMS.md ``` ## Fișiere cheie | Fișier / Folder | Scop | | ---------------------------------------- | -------------------------------------------------------------------- | | `src/application-config.ts` | **Necesar.** Fișierul principal de configurare pentru aplicație. | | `src/default-role.ts` | Rol implicit care controlează la ce pot avea acces funcțiile logice. | | `src/constants/universal-identifiers.ts` | UUID-uri generate automat și metadate (nume afișat, descriere). | | `src/__tests__/` | Teste de integrare (configurare + test de exemplu). | | `public/` | Resurse statice (imagini, fonturi) servite împreună cu aplicația. | **Organizarea fișierelor ține de dvs.** Folderele de mai sus sunt convenții — SDK-ul detectează entitățile prin analiză AST pe apelurile `export default defineEntity(...)`, indiferent unde se află fișierul. ## Dependențe Ambele pachete Twenty SDK trebuie plasate sub `devDependencies`, nu sub `dependencies`: ```json filename="package.json" { "dependencies": {}, "devDependencies": { "twenty-client-sdk": "^2.13.0", "twenty-sdk": "^2.13.0" } } ``` * **`twenty-sdk`** livrează CLI-ul `twenty` și uneltele de build/scaffolding. Acesta rulează doar în timpul dezvoltării și al build-ului și nu este niciodată importat de runtime-ul aplicației tale publicate. * **`twenty-client-sdk`** este importat de codul aplicației tale (`CoreApiClient`, `MetadataApiClient`, `RestApiClient`), dar Twenty îl furnizează la runtime — funcțiile de logică îl obțin dintr-un strat SDK generat, iar componentele de interfață îl rezolvă din module livrate de server. Copia instalată local este folosită doar pentru verificarea tipurilor și pentru build-ul la momentul de deploy, astfel că nu trebuie niciodată inclusă în bundle-ul livrat. Păstrarea oricărui pachet sub `dependencies` îl include în bundle-ul de runtime al aplicației instalate, unde reprezintă o încărcătură inutilă. `twenty build` emite un avertisment atunci când oricare dintre ele este încă listat sub `dependencies`. Adaugă dependențele de runtime proprii ale aplicației tale (bibliotecile pe care funcțiile tale de logică chiar le importă la runtime) sub `dependencies`, ca de obicei.