Building INDI Tutorials

INDI Library currently ships with seven tutorials in the examples subdirectory. To build the tutorials, first install some pre-requisties on Ubuntu:

sudo apt-get install cdbs libcfitsio-dev libnova-dev libusb-1.0-0-dev libjpeg-dev libusb-dev libtiff5-dev libftdi-dev fxload libkrb5-dev libcurl4-gnutls-dev libraw-dev libgphoto2-dev libgsl0-dev dkms libboost-regex-dev libgps-dev libdc1394-22-dev

Then checkout INDI Library code from Github and build it:

mkdir ~/Projects
cd ~/Projects
git clone
mkdir -p build/libindi
cd build/libindi
cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug ~/Projects/indi/libindi
sudo make install

To run tutorial one for example, simply run:

indiserver -v examples/tutorial_one/tutorial_one

This will create an INDI server running tutorial one driver on port 7624 (by default) on the local machine. You can connect to the INDI server using any INDI compatible client such as KStars. If you are using KStars, perform the following steps:

    1. Select the Device Manager menu item from the Tools menu
    2. Select the client tab and add a new host

    3. Click Connect in the device manager to connect to INDI server running Tutorial One
    4. Client Connect/Disconnect to test tutorial one simple functionality in INDI Control Panel
    5. The INDI Library tutorials cover some of the basic aspects of INDI, namely:
Tutorial Driver Description
One Simple Device The most simple INDI driver. The tutorial covers what is required to build and run a minimal INDI driver.
Two Simple Telescope Implementation of a simple telescope driver using INDI event-driven framework
Three Simple CCD Implementation of a simple CCD driver that sends a randomly generated image to the client as FITS.
Four Skeleton Demonstration on how to utilize INDI's skeleton files to build driver properties externally.
Five Rain and Dome Demonstration of INDI Snooping functionality that enables inter-driver communication.
Six Client Application Implmentation of a simple client application that can connect to the Simple CCD driver and controls its temperature.
Seven Advanced Telescope Simulator Sample implementation of a telescope driver that utilizes INDI's Alignment Subsystem Infrastructure

This is a short guide to prospective developers who want to contribute to INDI development. It is assumed you have good C++ background as it is the language of choice in INDI.

1. Create account on Github

Before you can start contributing to INDI, you need to register an account in Github.

2. Fork the repository

  1. On GitHub, navigate to the INDI Library repository.

  2. In the top-right corner of the page, click Fork.


3. Create a local clone of your fork 

  1. On GitHub, navigate to your fork of the INDI Library Repository.

  2. Under the repository name, click Clone or download.

  1. In the Clone with HTTPs section, click to copy the clone URL for the repository.

  1. Open Terminal.

  2. Type git clone, and then paste the URL you copied in Step 3. It will look like this, with your GitHub username instead of YOUR-USERNAME:

  1. Press Enter. Your local clone will be created.

$ git clone
Clonage dans 'indi'...
remote: Counting objects: 42279, done.
remote: Total 42279 (delta 0), reused 0 (delta 0), pack-reused 42279
Réception d'objets: 100% (42279/42279), 167.41 MiB | 795.00 KiB/s, fait.
Résolution des deltas: 100% (32317/32317), fait.
Vérification de la connectivité... fait.

Now, you have a local copy of your fork of the INDI Library Repository !

4. Setup your fork upstream repository

When you fork a project in order to propose changes to the original repository, you can configure Git to pull changes from the original, or upstream, repository into the local clone of your fork.


  1. On GitHub, navigate to the INDI Library repository.

  2. Under the repository name, click Clone or download.

  1. In the Clone with HTTPs section, click to copy the clone URL for the repository.

  1. Open Terminal.

  2. Change directories to the location of the fork you cloned in Step 2: Create a local clone of your fork.

  3. Type git remote -v and press Enter. You'll see the current configured remote repository for your fork.

$ git remote -v
origin (fetch)
origin (push)
  1. Type git remote add upstream, and then paste the URL you copied in Step 3 and press Enter. It will look like this:

 $ git remote add upstream
  1. To verify the new upstream repository you've specified for your fork, type git remote -v again. You should see the URL for your fork as origin, and the URL for the original repository as upstream.

$ git remote -v
origin (fetch)
origin (push)
upstream (fetch)
upstream (push)

5. Syncing your fork

Sync your local fork to keep it up-to-date with the upstream primary INDI repository. Since the INDI primary repository is under continuous development and can be updated at any time, you must always make sure to keep your local fork up to date with the primary INDI repo.

  1. Open Terminal.

  2. Change the current working directory to your local project.

  3. Fetch the branches and their respective commits from the upstream repository. Commits to master will be stored in a local branch, upstream/master.

$ git fetch upstream
remote: Counting objects: 23, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 23 (delta 17), reused 22 (delta 17), pack-reused 0
Dépaquetage des objets: 100% (23/23), fait.
39ffa64..06986a1  master -> upstream/master
  1. Check out your fork's local master branch.

$ git checkout master
Switched to branch 'master'
  1. Merge the changes from upstream/master into your local master branch. This brings your fork's master branch into sync with the upstream repository, without losing your local changes.

$ git merge upstream/master
Updating a422352..5fdff0f
README                    | 9 -------                 | 7 ++++++
2 files changed, 7 insertions(+), 9 deletions(-)
delete mode 100644 README
create mode 100644

Syncing your fork only updates your local copy of the repository. To update your fork on GitHub, you must push your changes.

6. Make the fix / Add new features 

  1. Follow the Setting development environment tutorial

  2. When fix is done, push it to your fork on GitHub

$ git add .
$ git commit -m "YOUR COMMENT"
$ git push

7. Submit a pull request to primary INDI repo

Pull requests let you tell others about changes you've pushed to a repository on GitHub. Once a pull request is opened, you can discuss and review the potential changes with collaborators and add follow-up commits before the changes are merged into the repository. 

  1. On GitHub, navigate to the main page of the repository.

  2. To the right of the Branch menu, click New pull request.

  1. Use the base branch dropdown menu to select the branch you'd like to merge your changes into, then use the compare branch drop-down menu to choose the topic branch you made your changes in.

  1. Type a title and description for your pull request.

  1. Click Create pull request.

After your pull request has been reviewed, it can be merged into the repository. Happy hacking!

In this tutorial we create a simple time lapse capture script with Python for an INDI CCD camera. It works with both Python2 and Python3.

First, we need to install some needed packages for Python INDI wrapper pyindi-client.

If you run Ubuntu or Debian just install the packages with:

sudo apt-get install indi-full swig libcfitsio-dev libnova-dev

If you use a Raspberry PI, just install INDI Library for Raspberry PI instead of indi-full.

For Python2 support install Python2 headers and pip:

sudo apt-get install python-dev python-pip

For Python3 support install Python3 headers and pip3:

sudo apt-get install python3-dev python3-pip

Then we can install the INDI wrapper for Python2 with pip:

sudo pip install pyindi-client

Or for Python3 with pip3:

sudo pip3 install pyindi-client


3rd Party

Choose from the numerous 3rd party INDI drivers to suit your needs!

Got Problem?

Check out the FAQ, the forum, and the bug tracking system to resolve any issues you might have!
You can also subscribe to INDI newsletter and development mailing lists to get the latest updates on INDI!