*******
Clients
*******

Caproto implements several clients, all built on the same core. This page aims
to help you choose which one is best for your application.

The :doc:`sync-client` is simplistic but functional, easy to read and
understand what happens with a single operation. It is perfectly fine to
use directly, but should generally not be used to build larger programs. It
opts for simplicity over performance.

The :doc:`threading-client` is a high-performance client and the one with the
most features and testing behind it. We generally recommend this one.

The :doc:`pyepics-compat-client` should only be used if you want to have
compatibility with some existing pyepics-based code.

Use the :doc:`async-clients` if you wish to write client code that takes
advantage of cooperative multitasking with asyncio.

The :doc:`command-line-client` provides commandline tools (``caproto-get``,
``caproto-put``, ...) that are drop-in replacements for their analogues in
EPICS' reference implementation (``caget``, ``caput``, ...). They are backed by
the synchronous client.

.. toctree::
   :maxdepth: 2

   command-line-client
   sync-client
   threading-client
   pyepics-compat-client
   async-clients