> ## Documentation Index
> Fetch the complete documentation index at: https://docs.evox.wraithesports.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Kendi evoX'inde test et

> T1 plugininizi evoX'e yükleyin, tuşa atayın, kodu değiştirip yeniden yükleyin ve logları görün — tam geliştirme döngüsü ve sorun giderme.

Plugininizi yazdıktan sonra onu **kendi evoX uygulamanızda** çalıştırıp cihazınızda test edersiniz. Bu sayfa tam döngüyü ve sık sorunları anlatır.

<Warning>T1 (trusted-node) sandbox değildir; yüklediğiniz kod Windows hesabınızın eriştiği her şeye erişir. Yalnız kendi/incelediğiniz kodu yükleyin.</Warning>

## Tam döngü

<Steps>
  <Step title="Projeyi hazırla">
    ```bash theme={}
    npx @evoxapp/plugin-cli init my-plugin --runtime trusted-node --name "Denemem"
    cd my-plugin
    npm install
    ```

    `npm install` **şart** — `@evoxapp/plugin-sdk` ve eklediğiniz kütüphaneler (`obs-websocket-js` vb.) `node_modules`'a inmezse plugin başlatılırken import hatası verir.
  </Step>

  <Step title="Geliştirici penceresini aç">
    evoX'te **Eklentiler** bölümüne gidin, üst çubukta **Geliştirici** butonuna tıklayın.
  </Step>

  <Step title="Projeyi seç ve güven ver">
    **Proje seç** ile `my-plugin` klasörünü seçin. Kayıt **Güven bekliyor** durumuna gelir; T1 risk metnini okuyup güveni onaylayın.
  </Step>

  <Step title="Başlat">
    **Başlat**'a basın. Durum **Başlatılıyor → Çalışıyor** olmalı. Çalışmıyorsa aşağıdaki sorun gidermeye bakın.
  </Step>

  <Step title="Aksiyonu tuşa ata">
    **Tuşlar** ekranında aksiyon kitaplığından plugininizin aksiyonunu bir tuşa sürükleyin. Tuşa basıp kadranı çevirerek davranışı görün.
  </Step>

  <Step title="Değiştir → yeniden yükle">
    Kodu değiştirdikten sonra Geliştirici penceresinde **yeniden yükle** (döngü ikonu, yalnız çalışırken görünür). Uygulamayı kapatmanız gerekmez. Yeni bağımlılık eklediyseniz önce tekrar `npm install`.
  </Step>

  <Step title="Logları gör">
    Kaydın **log** eylemiyle plugininizin `console.log`/`console.error` çıktısını (bounded/redacted) görün. Hata ayıklamanın ana yeri burasıdır.
  </Step>
</Steps>

## Durum etiketleri

| Durum                     | Anlamı                                                 |
| ------------------------- | ------------------------------------------------------ |
| **Güven bekliyor**        | Henüz güven vermediniz; başlatmadan önce onay gerekir  |
| **Başlatılıyor**          | Process fork edildi, handshake bekleniyor              |
| **Çalışıyor**             | Plugin aktif; eventleri alıyor, tuşu güncelleyebilir   |
| **Yeniden deneniyor**     | Çöktü, sınırlı bütçeyle yeniden başlatılıyor (backoff) |
| **Hata nedeniyle kapalı** | Çok kez çöktü; logları düzeltip tekrar başlatın        |
| **Durduruldu**            | Elle durdurdunuz veya hiç başlatılmadı                 |

## Sorun giderme

| Belirti                                                      | Olası sebep ve çözüm                                                                                                                                             |
| ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Proje seçilemiyor / manifest geçersiz**                    | `manifest.json` `runtime.kind` **`trusted-node`** olmalı ve `runtime.entry` (ör. `runtime.mjs`) klasörde gerçek bir dosya olmalı. Symlink/kısayol kabul edilmez. |
| **Başlatınca "Yeniden deneniyor" / "Hata nedeniyle kapalı"** | `runtime.mjs` başlarken hata veriyor. **Logları açın.** En sık sebep: `npm install` yapılmadığı için `@evoxapp/plugin-sdk` veya bir kütüphane bulunamıyor.       |
| **Aksiyon tuş kitaplığında görünmüyor**                      | Plugin **Çalışıyor** mu? `manifest.json` `actions[].controllers` doğru mu (`Keypad`/`Knob`)?                                                                     |
| **Kod değişti, tuş güncellenmiyor**                          | Geliştirici penceresinden **yeniden yükle**. Kadran davranışı için aksiyonun `Knob` desteklediğinden emin olun.                                                  |
| **Handshake/başlangıç zaman aşımı**                          | `runtime.mjs` `await client.start()` çağırıyor mu? Uzun senkron bloklama başlangıcı geciktirebilir; bağlantıyı `willAppear`'da tembel kurun.                     |
| **Görsel görünmüyor**                                        | `setImage` çağrısı `kind:'raster'`, `mimeType` değeri `image/png`, `image/jpeg` veya `image/webp`, ve geçerli `dataBase64` byte içermeli.                        |

## Sonraki adım

<CardGroup cols={2}>
  <Card title="Entegrasyon plugini yazma" href="/sdk/build-integrations">OBS/Twitch/Spotify tarzı gerçek entegrasyon örüntüleri.</Card>
  <Card title="Event ve host-RPC referansı" href="/sdk/events-reference">Tüm event ve çağrı yüzeyi.</Card>
</CardGroup>
