--- title: Publicare description: Distribuie aplicația ta Twenty în marketplace sau implementeaz-o intern. --- Aplicațiile sunt în prezent în testare alfa. Caracteristica funcționează, dar este încă în dezvoltare. ## Prezentare generală După ce aplicația ta este [construită și testată local](/l/ro/developers/extend/apps/building), ai două căi pentru distribuire: * **Publică pe npm** — listează aplicația ta în marketplace-ul Twenty pentru ca orice spațiu de lucru să o poată descoperi și instala. * **Implementați o arhivă tar** — încărcați aplicația direct pe un server Twenty anume pentru uz intern sau privat. Ambele căi pornesc din aceeași etapă de **build**. ## Construirea aplicației Comanda `build` compilează sursele TypeScript, transpilează funcțiile de logică și componentele de front-end și generează un `manifest.json` care descrie conținutul aplicației: ```bash filename="Terminal" yarn twenty build ``` Rezultatul este scris în `.twenty/output/`. Acest director conține tot ce este necesar pentru distribuție: cod compilat, resurse, manifestul și o copie a fișierului tău `package.json`. Pentru a crea și un pachet `.tgz` (folosit intern de comanda de implementare sau pentru distribuire manuală): ```bash filename="Terminal" yarn twenty build --tarball ``` ## Publicarea pe npm Publicarea pe npm face ca aplicația ta să poată fi descoperită în marketplace-ul Twenty. Orice spațiu de lucru Twenty poate răsfoi, instala și actualiza aplicațiile din marketplace direct din interfață. ### Cerințe * Un cont [npm](https://www.npmjs.com) * Cuvântul cheie `twenty-app` trebuie să fie listat în array-ul `keywords` din `package.json`-ul tău ### Adăugarea cuvântului cheie necesar Marketplace-ul Twenty descoperă aplicații căutând în registrul npm pachete cu cuvântul cheie `twenty-app`. Adaugă-l în `package.json`-ul tău: ```json filename="package.json" { "name": "twenty-app-postcard-sender", "version": "1.0.0", "keywords": ["twenty-app"], ... } ``` Marketplace-ul caută `keywords:twenty-app` în registrul npm. Fără acest cuvânt cheie, pachetul tău nu va apărea în marketplace chiar dacă are prefixul de nume `twenty-app-`. ### Pași 1. **Construiește-ți aplicația:** ```bash filename="Terminal" yarn twenty build ``` 2. **Publică pe npm:** ```bash filename="Terminal" yarn twenty publish ``` Aceasta rulează `npm publish` din directorul `.twenty/output/`. Pentru a publica sub un dist-tag specific (de ex., `beta` sau `next`): ```bash filename="Terminal" yarn twenty publish --tag beta ``` ### Cum funcționează descoperirea în marketplace Serverul Twenty sincronizează catalogul marketplace-ului din registrul npm la fiecare oră: 1. Caută toate pachetele npm cu cuvântul cheie `keywords:twenty-app` 2. Pentru fiecare pachet, preia `manifest.json` din CDN-ul npm 3. Metadatele aplicației (nume, descriere, autor, logo, capturi de ecran, categorie) sunt extrase din manifest și afișate în marketplace După publicare, poate dura până la o oră ca aplicația ta să apară în marketplace. Pentru a declanșa sincronizarea imediat, în loc să aștepți următoarea rulare orară: ```bash filename="Terminal" yarn twenty catalog-sync ``` Pentru a viza un remote specific: ```bash filename="Terminal" yarn twenty catalog-sync -r production ``` Metadatele afișate în marketplace provin din apelul tău `defineApplication()` din codul sursă al aplicației — câmpuri precum `displayName`, `description`, `author`, `category`, `logoUrl`, `screenshots`, `aboutDescription`, `websiteUrl` și `termsUrl`. ### Publicare CI Proiectul generat include un workflow GitHub Actions care publică la fiecare lansare: ```yaml filename=".github/workflows/publish.yml" name: Publish on: release: types: [published] permissions: contents: read id-token: write jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: "24" registry-url: https://registry.npmjs.org - run: yarn install --immutable - run: npx twenty build - run: npm publish --provenance --access public working-directory: .twenty/output env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} ``` Pentru alte sisteme CI (GitLab CI, CircleCI etc.), se aplică aceleași trei comenzi: `yarn install`, `yarn twenty build`, apoi `npm publish` din `.twenty/output`. **npm provenance** este opțională, dar recomandată. Publicarea cu `--provenance` adaugă un badge de încredere la listarea ta în npm, permițând utilizatorilor să verifice că pachetul a fost construit dintr-un commit specific într-un pipeline CI public. Vezi [documentația npm provenance](https://docs.npmjs.com/generating-provenance-statements) pentru instrucțiuni de configurare. ## Implementare pe un server (tarball) Pentru aplicațiile pe care nu le dorești disponibile public — instrumente proprietare, integrări doar pentru enterprise sau build-uri experimentale — poți implementa un tarball direct pe un server Twenty. ### Cerințe Înainte de implementare, ai nevoie de un remote configurat care să indice serverul țintă. Remote-urile stochează local URL-ul serverului și credențialele de autentificare în `~/.twenty/config.json`. Adaugă un remote: ```bash filename="Terminal" yarn twenty remote add --url https://your-twenty-server.com --as production ``` Pentru un server de dezvoltare local: ```bash filename="Terminal" yarn twenty remote add --local --as local ``` Te poți autentifica și cu o cheie API pentru medii neinteractive: ```bash filename="Terminal" yarn twenty remote add --url https://your-twenty-server.com --token --as production ``` Gestionează-ți remote-urile: ```bash filename="Terminal" yarn twenty remote list # List all configured remotes yarn twenty remote switch prod # Set the default remote yarn twenty remote status # Show active remote and auth status yarn twenty remote remove old # Remove a remote ``` ### Implementare Construiește și încarcă aplicația ta pe server într-un singur pas: ```bash filename="Terminal" yarn twenty deploy ``` Aceasta construiește aplicația cu `--tarball`, apoi încarcă tarball-ul către remote-ul implicit printr-o încărcare multipart GraphQL. Pentru a implementa către un remote specific: ```bash filename="Terminal" yarn twenty deploy -r production ``` ### Partajarea unei aplicații implementate Aplicațiile tarball nu sunt listate în marketplace-ul public, astfel încât alte spații de lucru de pe același server nu le vor descoperi prin navigare. Pentru a partaja o aplicație implementată: 1. Mergi la **Setări > Aplicații > Înregistrări** și deschide aplicația ta 2. În fila **Distribuție**, fă clic pe **Copiază linkul de partajare** 3. Partajează acest link cu utilizatori din alte spații de lucru — îi duce direct la pagina de instalare a aplicației Linkul de partajare folosește URL-ul de bază al serverului (fără niciun subdomeniu de spațiu de lucru), astfel încât funcționează pentru orice spațiu de lucru de pe server. ### Gestionarea versiunilor Pentru a lansa o actualizare: 1. Actualizează câmpul `version` din `package.json` 2. Rulează `yarn twenty deploy` (sau `yarn twenty deploy -r production`) 3. Spațiile de lucru care au aplicația instalată vor vedea actualizarea disponibilă în setările lor ## Instalarea aplicațiilor După ce o aplicație este publicată (npm) sau implementată (tarball), spațiile de lucru o instalează prin interfața utilizatorului (UI): ```bash filename="Terminal" yarn twenty install ``` Sau din pagina **Setări > Aplicații** din Twenty UI, unde pot fi navigate și instalate atât aplicațiile din marketplace, cât și cele implementate prin tarball. ## Categorii de distribuție a aplicațiilor Twenty organizează aplicațiile în trei categorii, în funcție de modul în care sunt distribuite: | Categorie | Cum funcționează | Vizibilă în marketplace? | | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ | | **Dezvoltare** | Aplicații în modul de dezvoltare local, rulate prin `yarn twenty dev`. Folosite pentru construire și testare. | Nu | | **Publicat (npm)** | Aplicații publicate pe npm cu cuvântul cheie `twenty-app`. Listate în marketplace pentru ca orice spațiu de lucru să le poată instala. | Da | | **Intern (tarball)** | Aplicații implementate prin tarball pe un server specific. Disponibile doar pentru spațiile de lucru de pe acel server printr-un link de partajare. | Nu | Pornește în modul **Dezvoltare** în timp ce îți construiești aplicația. Când este gata, alege **Publicat** (npm) pentru distribuire largă sau **Intern** (tarball) pentru implementare privată. ## Referință CLI | Comandă | Descriere | Opțiuni cheie | | --------------------------- | ---------------------------------------------------------------- | ----------------------------------------------------- | | `yarn twenty build` | Compilează aplicația și generează manifestul | `--tarball` — creează și un pachet `.tgz` | | `yarn twenty publish` | Construiește și publică pe npm | `--tag ` — dist-tag npm (de ex., `beta`, `next`) | | `yarn twenty deploy` | Construiește și încarcă un tarball pe un server | `-r, --remote ` — remote țintă | | `yarn twenty catalog-sync` | Declanșează sincronizarea catalogului marketplace-ului pe server | `-r, --remote ` — remote țintă | | `yarn twenty install` | Instalează o aplicație implementată pe un spațiu de lucru | `-r, --remote ` — remote țintă | | `yarn twenty dev` | Monitorizează și sincronizează modificările locale | Folosește remote-ul implicit | | `yarn twenty remote add` | Adaugă o conexiune la server | `--url`, `--token`, `--as`, `--local`, `--port` | | `yarn twenty remote list` | Listează remote-urile configurate | — | | `yarn twenty remote switch` | Setează remote-ul implicit | — | | `yarn twenty remote status` | Afișează starea conexiunii | — | | `yarn twenty remote remove` | Elimină un remote | — |