INDI (Instrument-Neutral Distributed Interface) is a distributed control protocol designed to operate astronomical instrumentation. INDI is small, flexible, easy to parse, and scalable. It supports common DCS functions such as remote control, data acquisition, monitoring, and a lot more.

It can be regarded as an abstraction layer, like Ascom on Windows, but to many device types, working with 64-bit programs and it can communicate over the network.

List of devices supported by INDI. INDI runs or is used on many operating systems, obviously all Linux distributions, but also Mac OS X with Cloudmakers contribution and on Android. Windows operation is also possible but non-free, with wINDI.

INDI drivers communicate with devices. The INDI server optionally offers an INET socket link to INDI drivers, and thus makes the relay between clients and drivers, as show below. Clients can request a description of devices and their capabilities (called Properties), which will allow them to interact with the devices. They can get the current value of properties, modify them, or be notified when the value changes. Graphical clients should generate dynamic GUIs according to the description.

The INDI architecture

List of clients using INDI.

The INDI protocol is simple and uses XML. Properties can be of the following types: Text, Number, Switch, Lights, and BLOB. Switch is the boolean value, Lights is a feedback type defined with 4 states (idle, OK, busy, alert), and BLOB is the binary large object.

Even if GUI can be dynamically generated, it's only useful for user interaction and not for complex programming like autoguiding or autofocus. That's why INDI has specified standard INDI drivers, which are a list of properties related to a type of device. For example, the Telescope standard has a Goto function. Some interfaces, like the Guider Interface will probably be useful too. Obviously, if a device supports more functionalities than the standard interface, the INDI driver should not be limited to it.

Link to INDI API.