--- title: Uygulama Yapılandırması description: Uygulamanızın kimliğini, varsayılan rolünü, değişkenlerini ve pazaryeri meta verilerini `defineApplication` ile bildirin. icon: rocket --- Her uygulamanın, tam olarak bir adet `defineApplication` çağrısı olması gerekir. Bu çağrı şunları bildirir: * **Kimlik** — evrensel tanımlayıcı, görünen ad, açıklama. * **İzinler** — mantık fonksiyonlarının ve ön uç bileşenlerinin hangi rol altında çalıştığı. * **Değişkenler** *(isteğe bağlı)* — kodunuza ortam değişkenleri olarak sunulan anahtar–değer çiftleri. * **Kurulum öncesi / kurulum sonrası kancalar** *(isteğe bağlı)* — bkz. [Mantık Fonksiyonları](/l/tr/developers/extend/apps/logic/logic-functions). ```ts src/application-config.ts import { defineApplication } from 'twenty-sdk/define'; export default defineApplication({ universalIdentifier: '39783023-bcac-41e3-b0d2-ff1944d8465d', displayName: 'My Twenty App', description: 'My first Twenty app', applicationVariables: { DEFAULT_RECIPIENT_NAME: { universalIdentifier: '19e94e59-d4fe-4251-8981-b96d0a9f74de', description: 'Default recipient name for postcards', value: 'Jane Doe', isSecret: false, }, }, }); ``` Notlar: * `universalIdentifier` alanları, size ait deterministik kimliklerdir. Bunları bir kez oluşturun ve senkronizasyonlar boyunca kararlı tutun. * `applicationVariables`, fonksiyonlarınız ve ön bileşenleriniz için ortam değişkenlerine dönüşür. Mantık fonksiyonlarında (sunucu tarafında), `process.env.VARIABLE_NAME` olarak kullanılabilirler. Ön bileşenlerde, `twenty-sdk/front-component` içindeki `getApplicationVariable('VARIABLE_NAME')` fonksiyonunu kullanın. `isSecret: true` ile işaretlenen değişkenler yalnızca mantık fonksiyonlarına enjekte edilir. Ön bileşenler yalnızca gizli olmayan değişkenleri alır. * Varsayılan rol, [`defineApplicationRole()`](/l/tr/developers/extend/apps/config/roles) ile işaretlenmiş rol dosyasından otomatik olarak algılanır — onu `defineApplication()` içinden belirtmenize gerek yoktur. * Kurulum öncesi ve kurulum sonrası fonksiyonlar manifest derlemesi sırasında otomatik olarak algılanır — bunlara `defineApplication()` içinde referans vermeniz gerekmez. * Geriye dönük uyumluluk için `defaultRoleUniversalIdentifier` değerini açıkça geçmek hâlâ desteklenmektedir, ancak `defineApplicationRole()` lehine kullanımdan kaldırılmıştır. * `serverVariables`, API anahtarları gibi örnek düzeyindeki yapılandırmalar ve gizli bilgilerdir. `applicationVariables`'ın aksine, manifest içinde herhangi bir değer belirtmezler — çalışma alanı operatörü bunları uygulamanın ayarlarından doldurur ve yalnızca ayarlandıklarında mantık fonksiyonlarına enjekte edilirler. ## Değişken türleri Hem `applicationVariables` hem de `serverVariables`, isteğe bağlı bir `type` (ve `SELECT` / `MULTI_SELECT` için bir `options` listesi) kabul eder. Desteklenen türler: `TEXT` (varsayılan), `BOOLEAN`, `NUMBER`, `NUMERIC`, `DATE`, `DATE_TIME`, `SELECT`, `MULTI_SELECT`, `ARRAY`, `RAW_JSON`, `RICH_TEXT`. ```ts src/application-config.ts import { defineApplication, FieldType } from 'twenty-sdk/define'; export default defineApplication({ // ...identity, role... applicationVariables: { MAX_POSTCARDS: { universalIdentifier: '5f4497e4-9030-4085-85eb-2c48b8d53713', description: 'Maximum postcards per batch', type: FieldType.NUMBER, value: 10, }, DEFAULT_REGION: { universalIdentifier: '76c5c321-b6b6-46eb-b4fc-f9f04bb04227', description: 'Default shipping region', type: FieldType.SELECT, options: [ { label: 'Europe', value: 'eu' }, { label: 'United States', value: 'us' }, ], value: 'eu', }, }, }); ``` `type` yalnızca **görünümü ve doğrulamayı** etkiler — çalışma alanı ayarları arayüzünde eşleşen girdiyi seçer (açma/kapama düğmesi, sayı alanı, açılır liste, tarih seçici, JSON düzenleyici, …) ve derlemenin yapılandırmanızı doğrulamasını sağlar (örneğin, `SELECT` / `MULTI_SELECT` boş olmayan `options` bildirmelidir). Değerin kodunuza nasıl ulaştığını **değiştirmez**. Değerler **her zaman string olarak eklenir** — bu, ortam değişkenlerinin doğasında vardır (`process.env.*` yalnızca string kabul eder). Mantık fonksiyonunuz çalıştığında, yürütücü her bir değeri `process.env` oluşturulurken bildirilen `type`'a göre serileştirir; böylece değerin nasıl ayarlandığından (manifest varsayılanı, ayarlar arayüzü veya önceki bir sürüm) bağımsız olarak string biçimi tutarlı olur: | Tür | `process.env` string | | ------------------------------------- | -------------------------------------- | | `TEXT`, `SELECT`, `DATE`, `DATE_TIME` | ham değer (`"eu"`, `"2026-01-01"`) | | `BOOLEAN` | `"true"` / `"false"` | | `NUMBER`, `NUMERIC` | ondalık string (`"10"`, `"2.5"`) | | `MULTI_SELECT`, `ARRAY` | JSON dizisi (`'["email","postcard"]'`) | | `RAW_JSON`, `RICH_TEXT` | JSON nesnesi (`'{"retries":3}'`) | String'i beklediğiniz türe geri ayrıştırın: ```ts const maxCards = Number(process.env.MAX_POSTCARDS); // "10" -> 10 const enabled = process.env.ENABLE_TRACKING === 'true'; // "true" -> true const channels = JSON.parse(process.env.ENABLED_CHANNELS ?? '[]'); // '["email"]' -> ["email"] const config = JSON.parse(process.env.PROVIDER_CONFIG ?? '{}'); // '{"retries":3}' -> { retries: 3 } ``` Aynısı, `getApplicationVariable('VARIABLE_NAME')` ile değerleri okuyan ön bileşenler için de geçerlidir — döndürülen değer bir stringtir; gerektiği gibi ayrıştırın. ## Varsayılan fonksiyon rolü [`defineApplicationRole()`](/l/tr/developers/extend/apps/config/roles) ile bildirilen rol, uygulamanın iş mantığı işlevlerinin ve ön uç bileşenlerinin neye erişebileceğini kontrol eder: * `TWENTY_APP_ACCESS_TOKEN` olarak enjekte edilen çalışma zamanı belirteci bu rolden türetilir. * Türlendirilmiş API istemcisi, o role tanınan izinlerle sınırlandırılır. * En az ayrıcalık ilkesini izleyin: yalnızca fonksiyonlarınızın ihtiyaç duyduğu izinleri bildirin. Yeni bir uygulama iskeleti oluşturduğunuzda, CLI `src/roles/default-role.ts` konumunda bir başlangıç rol dosyası oluşturur. Tam başvuru için bkz. [Roller ve İzinler](/l/tr/developers/extend/apps/config/roles). ## Pazaryeri meta verileri Eğer [uygulamanızı yayımlamayı](/l/tr/developers/extend/apps/operations/publishing) planlıyorsanız, bu isteğe bağlı alanlar uygulamanızın pazaryerinde nasıl görüneceğini kontrol eder: | Alan | Açıklama | | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------- | | `author` | Yazar veya şirket adı | | `category` | Pazaryerinde filtreleme için uygulama kategorisi | | `logoUrl` | Uygulamanızın logosuna giden yol (örn. `public/logo.png`) | | `screenshots` | Ekran görüntüsü yollarının dizisi (örn. `public/screenshot-1.png`) | | `aboutDescription` | "Hakkında" sekmesi için daha uzun bir markdown açıklaması. Belirtilmezse, pazaryeri npm'deki paketin `README.md` dosyasını kullanır | | `websiteUrl` | Web sitenize bağlantı | | `termsUrl` | Hizmet Koşulları'na bağlantı | | `emailSupport` | Destek e-posta adresi | | `issueReportUrl` | Sorun izleyicisine bağlantı |