---
title: Create your first machine
description: Install the SDK, boot a machine, and drive it — from nothing to a running, driven computer.
---

## Install

```bash
npm install @computer/sdk
```

The SDK authenticates with an API key, which you create under Keys in the dashboard. The
plaintext is shown once, at creation, and never again.

```bash
export COMPUTER_API_KEY=sk_...
export COMPUTER_BASE_URL=https://api.example.com/v1
```

## Create a machine

```ts
import { Client } from "@computer/sdk";

const client = new Client();
const machine = await client.machines.create({ name: "research", size: "small" });

// running is not the same as ready: a machine has a working shell before it
// has a working desktop.
const display = await machine.waitForDesktop();
```

## Drive its computer

With `display` resolved, the machine has a working desktop. Drive it the same way a person
would:

```ts
await machine.browser.open("https://example.com");
await machine.keyboard.type("hello");
await machine.mouse.click({ x: 640, y: 400 });

const shot = await machine.screen.screenshot({ format: "png" });
const result = await machine.terminal.exec(["uname", "-sr"]);
```

`shot` is a screenshot of a real desktop your code just drove, and `result` is the output of
a command it just ran. That's a complete round trip: a machine created, booted, and driven.

From here, see [take input control](/docs/how-to/take-input-control) for handing the keyboard
back and forth with a person, or [how machines behave](/docs/explanation/how-machines-behave)
for the reasoning behind sizes, readiness, coordinates, and exit codes.
