NAOqi core framework
Clone or download
Joël LAMOTTE and Klaim Fixes compilation warnings.
Change-Id: Iad6d67c87e0179be662a973afd8f9efd4881eadb
Reviewed-on: http://gerrit.aldebaran.lan/92425
Reviewed-by: jlamotte <>
Reviewed-by: vincent.palancher <>
Reviewed-by: matthieu.paindavoine <>
Reviewed-by: jmonnon <>
Tested-by: jlamotte <>
Latest commit 43e656b Sep 17, 2018


libqi is a middle-ware framework that provides RPC, type-erasure, cross-language interoperability, OS abstractions, logging facilities, asynchronous task management, dynamic module loading.

This library is published as part of the NAOqi SDK:


To compile libqi you need qibuild which give some cmake functions used in libqi's CMakeLists.txt.

pip2 install --user qibuild

git clone
cd libqi

mkdir BUILD && cd BUILD
make install DESTDIR=./output


The following example shows some features of the framework, please refer to the documentation for further details.

#include <boost/make_shared.hpp>
#include <qi/log.hpp>
#include <qi/applicationsession.hpp>
#include <qi/anyobject.hpp>


class MyService
  void myFunction(int val) {
    qiLogInfo() << "myFunction called with " << val;
  qi::Signal<int> eventTriggered;
  qi::Property<float> angle;

// register the service to the type-system
QI_REGISTER_OBJECT(MyService, myFunction, eventTriggered, angle);

void print()
  qiLogInfo() << "print was called";

int main(int argc, char* argv[])
  qi::ApplicationSession app(argc, argv);

  // connect the session included in the app

  qi::SessionPtr session = app.session();

  // register our service
  session->registerService("MyService", boost::make_shared<MyService>());

  // get our service through the middleware
  qi::AnyObject obj = session->service("MyService");

  // call myFunction<void>("myFunction", 42);

  // call print in 2 seconds
  qi::async(&print, qi::Seconds(2));

  // block until ctrl-c;

You can then run the program with:

./myservice --qi-standalone # for a standalone server
./myservice --qi-url tcp://somemachine:9559 # to connect to another galaxy of sessions

Versioning & Branching Strategy

The current version is described in the CHANGELOG file.

We follow Semantic Versioning v2.0.0 :

We follow Git Flow branching strategy: but for historical reasons we use the following branch names:

  • master: last stable release;
  • team/platform/dev: development branch;
  • tags: libqi-vX.Y.Z;
  • tags if published with a NAOqi release: NAOqi-vX.Y.Z;
  • next: compatibility breaking long-term changes branch;

All branches not following this naming strategy are legacy branches. All tags not following the naming strategy are legacy tags and matches NAOqi release version numbers.


git repository:


IRC Channel: #qi on freenode.