INDI is a combinatory approach that, on the one hand, leverages existing standardized service discovery messaging to ensure interoperability with mDNS and DNS, and then on the other, provides flexible tuning of distributed modes of operation to serve the application's needs for a particular type of network.

The core hypothesis for INDI was that by layering decentralized and mobility tolerant service discovery solutions upon an existing mDNS software infrastructure in a hybrid system, we could significantly outperform the existing service discovery algorithms and timers employed within mDNS for use within a dynamic context. This technique provides a bridging infrastructure for interoperability between mobile and fixed network infrastructures. By using this flexibility of tuning modes, we can create a proactive approach to service discovery, which exhibits considerable efficiency and success rate gains over conventional techniques in transient mobile environments.

The architecture for INDI is provided in the following diagram:

INDI Architecture Diagram

The figure shows INDI's architecture and the schematic for the layering of the INDI design profiles (reactive, opportunistic cache, and proactive) onto the existing advertiser and responder, type, service, info resolvers. It can be seen that for the client side, JmDNS entities are similar to INDI, the major differences being in the number of resolvers deployed and the timings of retries to support the INDI design configurations. However, the server side protocol is significantly different with INDI only requiring advertising and responding roles compared with JmDNS that has probe, announce, responder and renew roles. The advertising role in INDI is a simplification of the probe, announce and renew roles in mDNS.

INDI supports three broad discovery modes that allow it to operate reactively, proactively or a combination of both:

  1. Reactive: where the consumer dispatches a service request using a query and providers respond with a service advert (i.e. the Responder in the above Figure).
  2. Proactive: where the providers perform a service push by periodically sending out their service adverts using multicast.
  3. Opportunistic Caching: is based on the concept that if a consumer queries for a service, other consumers may be interested in that service and can opportunistically cache them for future use.


The INDI source code is available from:


For further information on INDI, please contact