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

# Escape Director Device SDK

> Connect your own Arduino escape room props to Escape Director with the free, open-source Device SDK and keep your puzzle code.

The Device SDK is a free Arduino library that connects a prop you program
yourself to an Escape Director Room. Your sketch keeps running the puzzle.
Escape Director shows its live state, sends it commands from the Room
Dashboard, and uses its signals to complete Puzzles and start Automations.

The SDK is open source under the MIT License. Download it from the
[latest release on GitHub](https://github.com/directorhq/escape-director-device-sdk/releases/latest).

## Choose how to connect a prop

The SDK is one of three ways to connect a prop. Pick the one that fits the
controller you have.

| Your prop | Use | Code needed |
| - | - | - |
| An Arduino UNO R4 WiFi or GIGA R1 WiFi you want to set up in the app | [Escape Director firmware](https://docs.escapedirector.com/build-your-rooms/connect-room-devices.md) | None |
| An Arduino running a sketch you wrote or want to write | The Device SDK, on this tab | Arduino C++ |
| A device that already sends HTTP or MQTT messages | [An existing device](https://docs.escapedirector.com/build-your-rooms/connect-existing-devices.md) | None |

## What the SDK handles for you

You add a few lines that describe each prop beside the code that runs it. The
SDK does the rest:

* Wi-Fi, secure pairing with the Room Station, and reconnecting after a drop.
* The prop's description in Escape Director, built from your code. There is no
  JSON file to write.
* Game and Test mode rules, so a press in Test mode never completes a Puzzle.
* Button presses and timed outputs that stay on time while the board
  reconnects.

```cpp theme={null}
ed::Room room("Train door", "1.0.0");
ed::Prop &door = room.prop("door", "Train door");

void setup() {
  door.signal("solved", "Lever pulled");
  door.command("open", "Open door", openDoor);
  door.state("open", "Open", &doorOpen);
  room.begin();
}
```

## Start here

> **[Connect your first Arduino prop](https://docs.escapedirector.com/developers/quickstart.md)**
>
> Upload the example sketch and see it work in a Room.

> **[Add the SDK to your sketch](https://docs.escapedirector.com/developers/add-the-sdk-to-your-sketch.md)**
>
> Keep your puzzle logic and connect it to Escape Director.

> **[Build props with a coding agent](https://docs.escapedirector.com/developers/build-with-a-coding-agent.md)**
>
> Let Claude Code, Cursor or Codex add the SDK to your sketch.

> **[ed::Room reference](https://docs.escapedirector.com/developers/room-api-reference.md)**
>
> Every call, its limits, and what happens while the board reconnects.

## Supported boards

The SDK includes adapters for the **Arduino UNO R4 WiFi** and **Arduino GIGA R1
WiFi**. Other Arduino boards with USB, Wi-Fi and enough memory can use it
through a [board adapter](https://docs.escapedirector.com/developers/add-a-board-adapter.md). Versions and limits
are in [Supported boards and limits](https://docs.escapedirector.com/developers/supported-boards.md).

A platform that isn't Arduino can speak the SDK's
[MQTT protocol](https://github.com/directorhq/escape-director-device-sdk/blob/main/protocol.md)
directly. The protocol is written for SDK maintainers.

> [!WARNING]
>
> The SDK is for show control, not safety. Keep emergency exits, maglock
> releases and other life-safety functions independent of any controller the
> SDK runs on.

## Next

[Connect your first Arduino prop](https://docs.escapedirector.com/developers/quickstart.md)


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