{"id":23712118,"url":"https://github.com/lugu/qiloop","last_synced_at":"2025-10-07T19:52:39.036Z","repository":{"id":57500208,"uuid":"123971288","full_name":"lugu/qiloop","owner":"lugu","description":"An implementation of QiMessaging in Go","archived":false,"fork":false,"pushed_at":"2023-11-30T22:03:17.000Z","size":17995,"stargazers_count":8,"open_issues_count":1,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-06-19T18:11:32.211Z","etag":null,"topics":["golang","libqi","nao","naoqi","pepper","qimessaging"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lugu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2018-03-05T19:57:22.000Z","updated_at":"2024-02-26T01:03:29.000Z","dependencies_parsed_at":"2023-11-30T23:23:20.148Z","dependency_job_id":"199b19a6-51c4-4e98-a70e-da3b0add53bf","html_url":"https://github.com/lugu/qiloop","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lugu%2Fqiloop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lugu%2Fqiloop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lugu%2Fqiloop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lugu%2Fqiloop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lugu","download_url":"https://codeload.github.com/lugu/qiloop/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":231907799,"owners_count":18444187,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["golang","libqi","nao","naoqi","pepper","qimessaging"],"created_at":"2024-12-30T19:57:07.277Z","updated_at":"2025-10-07T19:52:34.004Z","avatar_url":"https://github.com/lugu.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"![qiloop](https://github.com/lugu/qiloop/blob/master/doc/logo.jpg)\n\n[![Build Status](https://travis-ci.org/lugu/qiloop.svg?branch=master)](https://travis-ci.org/lugu/qiloop)\n[![CircleCI](https://circleci.com/gh/lugu/qiloop/tree/master.svg?style=shield)](https://circleci.com/gh/lugu/qiloop)\n[![Go Report Card](https://goreportcard.com/badge/github.com/lugu/qiloop)](https://goreportcard.com/report/github.com/lugu/qiloop)\n[![codecov](https://codecov.io/gh/lugu/qiloop/branch/master/graph/badge.svg)](https://codecov.io/gh/lugu/qiloop)\n[![Test Coverage](https://api.codeclimate.com/v1/badges/b192466a26dbced44274/test_coverage)](https://codeclimate.com/github/lugu/qiloop/test_coverage)\n[![Maintainability](https://api.codeclimate.com/v1/badges/b192466a26dbced44274/maintainability)](https://codeclimate.com/github/lugu/qiloop/maintainability)\n[![Documentation](https://godoc.org/github.com/lugu/qiloop?status.svg)](http://godoc.org/github.com/lugu/qiloop)\n[![license](https://img.shields.io/github/license/lugu/qiloop.svg?maxAge=2592000)](https://github.com/lugu/qiloop/blob/master/LICENSE)\n[![stability-unstable](https://img.shields.io/badge/stability-unstable-yellow.svg)](https://github.com/emersion/stability-badges#unstable)\n[![Release](https://img.shields.io/github/tag/lugu/qiloop.svg)](https://github.com/lugu/qiloop/releases)\n\n\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\n-   [About](#about)\n-   [Frequently asked questions](#frequently-asked-questions)\n-   [Status](#status)\n-   [Usage](#usage)\n-   [Go API](#go-api)\n-   [Tutorials](#tutorials)\n-   [Examples](#examples)\n-   [Command line interface](#command-line-interface)\n-   [Authentication](#authentication)\n-   [Contributing](#contributing)\n\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\n## About\n\nQiMessaging is a network protocol used to build rich distributed applications.\nIt is created by [SoftBank Robotics](https://www.softbankrobotics.com/emea/en/index)\nand is the foundation of the [NAOqi SDK](http://doc.aldebaran.com/2-8/) and\nthe [Pepper SDK](https://qisdk.softbankrobotics.com/).\n\nlibqi is the implementation of QiMessaging used in Pepper and NAO.\nIt is open-source and developped here:\n\u003chttps://github.com/aldebaran/libqi\u003e.\n\nFor an in-depth overview of the protocol, visit this [description of QiMessaging](https://github.com/lugu/qiloop/blob/master/doc/about-qimessaging.md).\n\n\nQiLoop is another implementation of QiMessaging. It has two main goals:\n\n-   being compatible with libqi\n-   being a platform for experimenting with the protocol\n\nDisclaimer: QiLoop is not affiliated with SoftBank Robotics.\n\n## Frequently asked questions\n\nRead the [FAQ](https://github.com/lugu/qiloop/blob/master/doc/FAQ.md).\n\n## Status\n\nClient and server sides are functional.\n\nService directory and log manager are implemented as part of the\nstandalone server (launched with `qiloop server`).\n\nFeatures:\n\n-   type supported: object, struct, values, map, list, tuple\n\n-   actions: method, signals and properties are fully supported\n\n-   cancel: client support only (see motion example)\n\n-   transport: TCP, TLS, UNIX socket\n\n-   authentication: read the credentials from `$HOME/.qiloop-auth.conf`\n\n-   service introspection: generate IDL from a running instance (use `qiloop scan`)\n\n-   IDL files: generate specialized proxy and service stub (use `qiloop stub`)\n\n-   stats and trace support\n\n## Usage\n\nQiMessaging exposes a software bus to interract with services. Services have\nmethods (to be called), signals (to be watched) and properties (signals with\nstate). A naming service (the service directory) is used to discover and\nregister services.\n\nTo connect to a service, a Session object is required: it represents the\nconnection to the service directory. Several transport protocols are supported\n(TCP, TLS and UNIX socket).\n\nWith a session, one can request a proxy object representing a remote service.\nThe proxy object contains the helper methods needed to make the remote calls\nand to handle the incomming signal notifications.\n\nServices have methods, signals and properties which are described in an IDL\n(Interface Description Language) format. This IDL file is process by the\n`qiloop` command to generate the Go code which allow remote access to the\nservice (i.e. the proxy object).\n\n## Go API\n\nInstallation:\n\n    go get -u github.com/lugu/qiloop/...\n\nDocumentation: \u003chttp://godoc.org/github.com/lugu/qiloop\u003e\n\n## Tutorials\n\n-   How to create a proxy to an existing service: follow the [ALVideoDevice tutorial](https://github.com/lugu/qiloop/blob/master/doc/tutorial-videodevice.md).\n\n-   How to create your own service: follow the [clock tutorial](https://github.com/lugu/qiloop/blob/master/doc/tutorial-clock.md).\n\n## Examples\n\nBasic examples:\n\n-   [hello world](https://github.com/lugu/qiloop/blob/master/examples/say)\n    illustrates how to call a method of a service: this example calls\n    the method 'say' of a text to speech service.\n\n-   [signal registration](https://github.com/lugu/qiloop/blob/master/examples/signal)\n    illustrates how to subscribe to a signal: this example prints a\n    log each time a service is added to the service directory.\n\nExamples for NAO and Pepper:\n\n-   [animated say](https://github.com/lugu/qiloop/blob/master/examples/animated-say)\n    uses ALAnimatedSpeech to animate the robot.\n\n-   [posture](https://github.com/lugu/qiloop/blob/master/examples/posture)\n    puts the robot in a random position.\n\n-   [motion](https://github.com/lugu/qiloop/blob/master/examples/motion)\n    move the robot forward and demonstrate how to cancel a call.\n\n-   [memory](https://github.com/lugu/qiloop/blob/master/examples/memory)\n    uses ALMemory to react on a touch event.\n\nExamples of service implementation:\n\n-   [ping pong service](https://github.com/lugu/qiloop/blob/master/examples/pong)\n    illustrates how to implement a service.\n\n-   [space service](https://github.com/lugu/qiloop/blob/master/examples/space)\n    illustrates the client side objects creation.\n\n-   [clock service](https://github.com/lugu/qiloop/blob/master/examples/clock)\n    completed version of the clock tutorial.\n\n## Command line interface\n\n        $ qiloop -h                                                                                                                                                            /home/ludo/qiloop\n        qiloop - an utility to explore QiMessaging\n\n    \t ___T_\n    \t| 6=6 |\n    \t|__`__|\n         .-._/___\\_.-.\n         ;   \\___/   ;\n    \t ]| |[\n    \t[_| |_]\n\n          Usage:\n    \tqiloop [info|log|scan|proxy|stub|server|trace]\n\n          Subcommands:\n    \tinfo - Connect a server and display services info\n    \tlog - Connect a server and prints logs\n    \tscan - Connect a server and introspect a service to generate an IDL file\n    \tproxy - Parse an IDL file and generate the specialized proxy code\n    \tstub - Parse an IDL file and generate the specialized server code\n    \tserver - Starts a service directory and a log manager\n    \ttrace - Connect a server and traces services\n\n          Flags:\n    \t   --version  Displays the program version string.\n    \t-h --help  Displays help with available flag, subcommand, and positional value parameters.\n\n## Authentication\n\nIf you need to provide a login and a password to authenticate yourself\nto a server, create a file `$HOME/.qiloop-auth.conf` with you login on the\nfirst line and your password on the second.\n\n## Contributing\n\n1.  Fork me\n2.  Create your feature branch\n3.  Make changes (hopefully with tests and, why not, with documentation)\n4.  Create new pull request\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flugu%2Fqiloop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flugu%2Fqiloop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flugu%2Fqiloop/lists"}