# Features This library provides a client for communication with a CaosDB server over the CaosDB GRPC-APIs. The client supports * Transaction of entities and file transmission. * Authentication via Username/Password. * Secure communication via TLS. * Multiple connections with different servers. * Logging. * File-based configuration. The core is written in C++ and makes heavy use of object-oriented patterns. It results in a c++ library -- libcaosdb. For using the library in a plain C context, a thin wrapper is included -- libccaosdb. It wrapps the C++ classes into structs and the member methods into functions which operate on the wrapped C++ instances. Minimal testing executables in C++ and C are included as well, but they only serve as just that -- minimal testing. ## CaosDB Entitiy API This library implements a subset of the CaosDB Entitiy API (caosdb.entity.v1) as a client. Current limitations: The implementation does not support mixing retrievals with write-transactions. ### Query Support for `FIND`, `SELECT` and `COUNT` queries. ## CaosDB Info API This library implements the CaosDB Info API (caosdb.info.v1) as a client without limitations. ## CaosDB ACM (Access Control Management) API This library implements small parts of the experimental ACM API (caosdb.acm.v1alpha1) as a client. ## Thread-safety and Concurrency Currently, the library should not be considered thread-safe. The `caosdb::transaction::Transaction` class is designed with an with an interface ready for concurrent and asyncronous transactions. While it is possible to execute transactions in non-blocking mode and call `GetStatus` concurrently, it is not possible to use any of the non-const methods of the `Transaction` class in a thread-safe way.