# SDKs

Thin layers over the REST API, with the same calls in each language: start a phone, run its tools, show it, and hear when it ends.

## TypeScript and JavaScript

Terminal

```
npm install @nomac/simulator
```

TypeScript

```
import { NoMacSimulator } from "@nomac/simulator";

const nomac = new NoMacSimulator({ apiKey: process.env.NOMAC_API_KEY });
```

No dependencies. It runs wherever `fetch` and Web Crypto do: Node 20 and later, Bun, Deno and workers. Its README on [npm](https://www.npmjs.com/package/@nomac/simulator) lists every call.

## Python

Terminal

```
pip install nomac
```

Python

```
from nomac import NoMac, AsyncNoMac

nomac = NoMac()  # NOMAC_API_KEY from the environment
```

The same calls in snake_case, sync and async (`AsyncNoMac`), typed, with one dependency, `httpx`. Python 3.10 and later. Its README on [PyPI](https://pypi.org/project/nomac/) lists every call.

## The phone in your page

Terminal

```
npm install @nomac/phone
```

`embedPhone`, and `NomacPhone` for React, show a phone's view link with its events. See [Show it to your users](/content/docs/platform/show/index.html).

## Anything else

The [REST API](/content/docs/simulator/index.html) takes the account's key or a phone's token as `Authorization: Bearer`. Agents use the phone over MCP: see [Connect your agent](/content/docs/connect/index.html).
