> ## 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.

# Quickstart

> Create a plugin project with npx, load it into evoX and see your first action on the device.

<Warning>T1 is trusted local Node code and is not a sandbox. Run only a source you have reviewed and trust.</Warning>

This page walks through a working **T1 (local development)** plugin from scratch: create the project → load it into evoX → assign it to a key → see it on the device. For tiers, you can first look at the <a href="/en/sdk/trust-tiers">Trust tiers</a> page:

<CardGroup cols={3}>
  <Card title="T0 · Data pack" href="/en/application/publish-your-pack">Profile/icon/sound — no code, publishable today.</Card>
  <Card title="T1 · Local dev" href="/en/sdk/trust-tiers">This page. Separate Node process, not a sandbox.</Card>
  <Card title="T2 · Public sandbox" href="/en/sdk/distribution-status">Default-deny capability; public upload closed.</Card>
</CardGroup>

## 1. Create the project

Node.js 20+ is enough; no installation needed:

```bash theme={}
npx @evoxapp/plugin-cli init my-plugin --runtime trusted-node --name "İlk Plugin"
cd my-plugin
npm install
```

The template produces:

```text theme={}
my-plugin/
├── manifest.json    # Host sözleşmesi: kimlik, runtime, izinler, aksiyonlar
├── runtime.mjs      # Plugin giriş noktası (SDK client + event handler'lar)
├── package.json     # @evoxapp/plugin-sdk bağımlılığı
└── README.md        # Bu adımların özeti
```

`runtime.mjs` contains a ready example: the **Hello** action writes "Hello" when it appears on a key and shows the time when pressed. The template is produced in the CLI language (see <a href="/en/sdk/cli">Developer CLI</a>); the values on this page are from the `--lang en` template.

```js theme={}
client.on('action.keyDown', async (event) => {
  if (event.context?.actionId !== 'hello') return;
  await client.setTitle(event.context.bindingInstanceId, new Date().toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' }));
  await client.showSuccess(event.context.bindingInstanceId);
});
```

## 2. Load it into evoX

<Steps>
  <Step title="Open the Developer window">
    In the evoX desktop app, go to the **Plugins** section and click the **Developer** button in the top bar.
  </Step>

  <Step title="Select the project">
    Select the `my-plugin` folder with **Select project**. The manifest is validated by the host; if there is an error you see a clear message.
  </Step>

  <Step title="Grant trust and start">
    Read the T1 risk text and confirm trust, then **start** the plugin. The plugin runs as a separate Node process; you follow its status and logs from the same window.
  </Step>

  <Step title="Assign it to a key">
    On the **Keys** screen, assign the **Hello** action from the action library to a key. "Hello" appears on the key; pressing it writes the time.
  </Step>
</Steps>

## 3. Development loop

* Change the code → **reload** from the Developer window. You don't need to close the app.
* Logs are shown bounded/redacted in the same window; your `console.error` output lands here.
* Identity belongs to the host: `client.session.plugin.pluginId` is assigned, the plugin cannot choose its own identity/permissions.

## Next steps

<CardGroup cols={2}>
  <Card title="Write an integration plugin" href="/en/sdk/build-integrations">OBS/Twitch/Spotify-style Market integrations (full Node + npm).</Card>
  <Card title="First real plugin (tutorial)" href="/en/sdk/tutorial-first-plugin">Build a weather indicator with settings + host-brokered network.</Card>
  <Card title="Event reference" href="/en/sdk/events-reference">The full event and host-RPC surface.</Card>
  <Card title="Manifest" href="/en/sdk/manifest">Runtime, permission and action fields.</Card>
  <Card title="Public target (T2)" href="/en/sdk/distribution-status">sandbox-js project: `npx @evoxapp/plugin-cli init my-plugin` (default) — the publication target once public upload opens.</Card>
</CardGroup>
