> ## Documentation Index
> Fetch the complete documentation index at: https://sdk.ekanos.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# What is published

> The @ekanos packages on npm and what each one is for.

## Published packages

All five partner packages are on npm:

| Package | Version | What it is |
| - | - | - |
| `@ekanos/sdk` | 0.4.0 | SDK for authoring integrations |
| `@ekanos/ui` | 0.4.0 | UI component library for integrations |
| `@ekanos/integration-schema` | 0.4.0 | Validation contract, used by the SDK |
| `@ekanos/cli` | 0.3.3 | Toolchain: `init`, `validate`, `dev`, `test`, `publish`, and more |
| `@ekanos/harness` | 0.4.0 | Local dev harness that renders your surfaces |

`@ekanos/sdk` pulls in `@ekanos/integration-schema` and `@ekanos/ui` as dependencies. The CLI and harness are covered in [CLI overview](/cli/overview) and [Harness overview](/harness/overview).

<Note>
  One SDK entrypoint is not published: `@ekanos/sdk/mcp` is workspace-only and
  excluded from the tarball. See [Entrypoints](/sdk/entrypoints).
</Note>

## What the SDK alone gives you

### Define and validate

```bash theme={null}
npm install @ekanos/sdk zod
```

`defineIntegration()` validates at import time and throws with a remediation message, so a definition is its own feedback loop.

```ts theme={null}
import { defineIntegration } from '@ekanos/sdk/integration';

export const integration = defineIntegration({
  slug: 'my-integration',
  name: 'My Integration',
  description: 'What it does.',
  version: '1.0.0',
  // ... the rest of your definition
});

// Throws immediately if anything is invalid.
```

### Write unit tests

The whole [Testing](/sdk/testing) section needs nothing but vitest:

```ts theme={null}
import { createMockContext } from '@ekanos/sdk/testing';

const ctx = createMockContext({
  integration: { slug: 'my-integration' },
  storageSchemas: myStorage,
  egress: integration.egress,
});

// Test handlers directly
const result = await integration.tools?.[0]?.run(ctx, {});
```

* `createMockContext()` enforces the same storage schemas, secret tiers, and egress allowlist as production, using the same shared validators
* `invokeWebhook()` and `invokeSchedule()` run event handlers with payload validation and a context derived from your definition
* `invokeActivate()` runs your `onActivate` hook

### Write components

Widget, activation form, and marketplace tile components are ordinary React and build and typecheck against the SDK alone:

```tsx theme={null}
import type { IntegrationComponentProps } from '@ekanos/sdk';
import { Widget } from '@ekanos/sdk/components';

export function MyWidget({ accountId }: IntegrationComponentProps) {
  return (
    <Widget.Card>
      <Widget.Header title="My Widget" />
      <Widget.Active>
        <Widget.Body>Your content here</Widget.Body>
      </Widget.Active>
    </Widget.Card>
  );
}
```

To see them rendered in Ekanos chrome — widgets in the dashboard grid, the marketplace tile, the activation form, the Triggers panel — use the harness via `ekanos dev`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.