# Providers

Providers are hexkit's concrete implementations of its [protocols](../../user-guide/protocols/index.md), each binding a protocol to a specific technology. Application code is written against the protocols; which provider is wired in decides the actual infrastructure. Each provider family lives behind an optional extra (e.g. `pip install hexkit[akafka,mongodb]`), so services only pull in the dependencies they need.


# Currently Implemented Providers

- [Apache Kafka](../../user-guide/providers/kafka/index.md): event publishing and consumption -- [`KafkaEventPublisher`](../../user-guide/providers/kafka/publisher.md), [`KafkaEventSubscriber`](../../user-guide/providers/kafka/subscriber.md), and the [KafkaOutboxSubscriber](../../reference/providers.akafka.KafkaOutboxSubscriber.md#hexkit.providers.akafka.KafkaOutboxSubscriber) -- plus [test utilities](../../user-guide/providers/kafka/test_utils.md).
- [MongoDB](../../user-guide/providers/mongodb.md): document-database implementations of the DAO and key-value-store protocols, plus [migration tooling](../../user-guide/providers/mongodb_migrations.md) for evolving stored data alongside the data model.
- [MongoDB + Kafka](../../user-guide/providers/mongokafka.md): the outbox publisher (`MongoKafkaDaoPublisher`) and the [PersistentKafkaPublisher](../../reference/providers.mongokafka.PersistentKafkaPublisher.md#hexkit.providers.mongokafka.PersistentKafkaPublisher), combining both backends.
- [S3](../../user-guide/providers/s3.md): object storage and key-value stores on any S3-compatible backend.
- [Redis](../../user-guide/providers/redis.md): key-value stores for fast access to hot values.
- [Vault](../../user-guide/providers/vault.md): key-value stores for secrets.
- [Testing](../../user-guide/providers/testing.md): in-memory implementations for unit tests, such as the mock DAO and in-memory key-value stores.


# Adding Providers
