{"id":45539511,"url":"https://fortunen.github.io/kete/","last_synced_at":"2026-03-08T06:01:22.651Z","repository":{"id":335716571,"uuid":"492067171","full_name":"FortuneN/kete","owner":"FortuneN","description":"Keycloak Events To Everywhere is a flexible, high-performance Keycloak extension that streams matched events to various destinations, in various formats.","archived":false,"fork":false,"pushed_at":"2026-02-16T10:42:42.000Z","size":3723,"stargazers_count":10,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"develop","last_synced_at":"2026-02-16T16:07:14.005Z","etag":null,"topics":["amqp","audit","event-streaming","events","extension","http","kafka","keycloak","listener","mqtt","mtls","observability","spi","tls"],"latest_commit_sha":null,"homepage":"https://fortunen.github.io/kete/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FortuneN.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"FortuneN","liberapay":"FortuneN","ko_fi":"FortuneN","buy_me_a_coffee":"FortuneN","custom":["https://paypal.me/FortuneNgwenya"]}},"created_at":"2022-05-13T23:38:29.000Z","updated_at":"2026-02-16T08:22:16.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/FortuneN/kete","commit_stats":null,"previous_names":["fortunen/kete"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/FortuneN/kete","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FortuneN%2Fkete","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FortuneN%2Fkete/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FortuneN%2Fkete/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FortuneN%2Fkete/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FortuneN","download_url":"https://codeload.github.com/FortuneN/kete/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FortuneN%2Fkete/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30246872,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-08T05:41:50.788Z","status":"ssl_error","status_checked_at":"2026-03-08T05:41:39.075Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["amqp","audit","event-streaming","events","extension","http","kafka","keycloak","listener","mqtt","mtls","observability","spi","tls"],"created_at":"2026-02-23T03:00:36.235Z","updated_at":"2026-03-08T06:01:22.644Z","avatar_url":"https://github.com/FortuneN.png","language":"Java","funding_links":["https://github.com/sponsors/FortuneN","https://liberapay.com/FortuneN","https://ko-fi.com/FortuneN","https://buymeacoffee.com/FortuneN","https://paypal.me/FortuneNgwenya","https://www.buymeacoffee.com/FortuneN"],"categories":["Community Extensions"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/FortuneN/kete/release/logo/png/kete-hexagon-128.png\" alt=\"KETE Logo\" width=\"128\" height=\"128\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003e\n  \u003cstrong\u003eKETE\u003c/strong\u003e\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  Keycloak Events To Everywhere\u003cbr\u003e\n  A flexible, high-performance Keycloak extension that streams matched events to various destinations, in various formats\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/FortuneN/kete/actions/workflows/release.yml\"\u003e\n    \u003cimg src=\"https://github.com/FortuneN/kete/actions/workflows/release.yml/badge.svg\" alt=\"Build Status\"  \u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/FortuneN/kete/releases/latest\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/v/release/FortuneN/kete?label=Release\" alt=\"Latest Release\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://www.apache.org/licenses/LICENSE-2.0\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/License-Apache%202.0-blue\" alt=\"Apache 2.0 License\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/FortuneN/kete/releases\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/downloads/FortuneN/kete/total?label=Downloads\" alt=\"Downloads\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://fortunen.github.io/kete/developer-guide/overview\"\u003e\n    \u003cimg src=\"https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/FortuneN/kete/release/coverage-badge.json\" alt=\"Code Coverage\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://fortunen.github.io/kete/user-guide/overview\"\u003eUser Guide\u003c/a\u003e •\n  \u003ca href=\"https://fortunen.github.io/kete/developer-guide/overview\"\u003eDeveloper Guide\u003c/a\u003e •\n  \u003ca href=\"https://github.com/FortuneN/kete/releases\"\u003eReleases\u003c/a\u003e •\n  \u003ca href=\"https://github.com/FortuneN/kete/tree/release/quick-starts\"\u003eQuick Starts\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## Use Cases\n\n| Use Case | Description |\n|----------|-------------|\n| **Synchronization** | Keep user directories, databases, CRMs, and other systems in sync with Keycloak |\n| **Security Monitoring** | Stream login attempts, failed authentications, and admin actions to SIEM systems |\n| **Audit \u0026 Compliance** | Maintain immutable audit logs in message queues or event streams |\n| **User Analytics** | Track user behavior and authentication patterns |\n| **Event-Driven Architecture** | Trigger downstream services based on Keycloak events |\n| **Multi-Destination Routing** | Send different event types to different systems simultaneously |\n\n## Quick Start (5 minutes)\n\n### Step 1: \u003ca href=\"https://raw.githubusercontent.com/FortuneN/kete/release/quick-starts/amqp-0.9.1-rabbitmq/docker-compose.yml\" download\u003eDownload\u003c/a\u003e or create docker-compose.yml\n\n```yaml\nservices:\n\n  rabbitmq:\n    image: ghcr.io/fortunen/kete/quick-start-rabbitmq\n    ports:\n      - 5672:5672\n      - 15672:15672\n    healthcheck:\n      test: [\"CMD\", \"rabbitmq-diagnostics\", \"-q\", \"ping\"]\n      interval: 5s\n      timeout: 5s\n      retries: 30\n\n  rabbitmq-init:\n    image: ghcr.io/fortunen/kete/quick-start-curl\n    depends_on:\n      rabbitmq:\n        condition: service_healthy\n    entrypoint: \u003e\n      sh -c '\n        for i in $(seq 1 30); do curl -sf -u guest:guest http://rabbitmq:15672/api/overview \u003e /dev/null \u0026\u0026 break || sleep 1; done \u0026\u0026\n        curl -s -u guest:guest -X PUT http://rabbitmq:15672/api/queues/%2f/keycloak-events -H \"content-type: application/json\" -d \"{\\\"durable\\\":true}\" \u0026\u0026\n        curl -s -u guest:guest -X POST http://rabbitmq:15672/api/bindings/%2f/e/amq.direct/q/keycloak-events -H \"content-type: application/json\" -d \"{\\\"routing_key\\\":\\\"keycloak-events\\\"}\"\n      '\n\n  keycloak:\n    image: ghcr.io/fortunen/kete/quick-start-keycloak\n    command: start-dev\n    ports:\n      - 8080:8080\n      - 9000:9000\n    environment:\n      kete.routes.quick-start.destination.kind: amqp-0.9.1\n      kete.routes.quick-start.destination.host: rabbitmq\n      kete.routes.quick-start.destination.username: guest\n      kete.routes.quick-start.destination.password: guest\n      kete.routes.quick-start.destination.exchange: amq.direct\n      kete.routes.quick-start.destination.routing-key: keycloak-events\n    depends_on:\n      rabbitmq-init:\n        condition: service_completed_successfully\n```\n\n### Step 2: Start the stack\n\n```bash\ndocker compose up -d\n```\n\n### Step 3: See events flowing\n\n1. Open Keycloak: [http://localhost:8080](http://localhost:8080) (admin/admin)\n2. Do something in Keycloak (log in/out, create a user, ...)\n3. Open RabbitMQ: [http://localhost:15672/#/queues/%2F/keycloak-events](http://localhost:15672/#/queues/%2F/keycloak-events) (guest/guest)\n4. See events arriving!\n\n## Supported Systems\n\n| Category | Compatible Services |\n|----------|---------------------|\n| **Kafka** | Apache Kafka, Confluent, Redpanda, AWS MSK, Azure Event Hubs, Aiven, Strimzi, WarpStream, Instaclustr |\n| **AMQP 1.0** | Apache ActiveMQ, Apache Artemis, Apache Qpid, RabbitMQ, Solace PubSub+, Amazon MQ, Azure Event Hubs, Azure Service Bus |\n| **AMQP 0-9-1** | RabbitMQ, LavinMQ, CloudAMQP, Amazon MQ |\n| **MQTT 3.1.1** | Eclipse Mosquitto, EMQX, HiveMQ, VerneMQ, NanoMQ, RabbitMQ, ActiveMQ Artemis, Solace, Azure Event Grid, AWS IoT Core, Azure IoT Hub |\n| **MQTT 5.0** | Eclipse Mosquitto, EMQX, HiveMQ, VerneMQ, NanoMQ, RabbitMQ, ActiveMQ Artemis, Solace, Azure Event Grid |\n| **Redis** | Redis, Valkey, Dragonfly, KeyDB, Garnet, Upstash, AWS ElastiCache, Azure Cache, Google Memorystore (Pub/Sub \u0026 Streams) |\n| **NATS** | NATS Server, Synadia Cloud (NATS Core \u0026 JetStream) |\n| **Pulsar** | Apache Pulsar, StreamNative Cloud, DataStax Astra Streaming, DataStax Luna Streaming |\n| **HTTP** | Webhooks, REST APIs, Custom HTTP Endpoints |\n| **STOMP** | Apache ActiveMQ, Apache Artemis, RabbitMQ, EMQX, Amazon MQ |\n| **WebSocket** | Custom WebSocket Servers |\n| **ZeroMQ** | Any ZeroMQ peer — brokerless, 40+ language bindings |\n| **AWS** | EventBridge, Kinesis Data Streams, SNS, SQS |\n| **Azure** | Event Grid, Event Hubs, Service Bus, Storage Queue, Web PubSub |\n| **GCP** | Cloud Tasks, Pub/Sub |\n| **gRPC** | Any gRPC Server |\n| **SOAP** | Any SOAP Endpoint |\n| **SignalR** | ASP.NET SignalR Hubs |\n| **Socket.IO** | Socket.IO Servers |\n\n## Other Quick Starts\n\n[Browse →](https://github.com/FortuneN/kete/tree/release/quick-starts)\n\n## Releases\n\n[See releases →](https://github.com/FortuneN/kete/releases)\n\n## Documentation\n\n[User Guide →](https://fortunen.github.io/kete/user-guide/overview)\n\n[Developer Guide →](https://fortunen.github.io/kete/developer-guide/overview)\n\n## License\n\n[Apache 2.0 →](https://www.apache.org/licenses/LICENSE-2.0)\n\n## Issues\n\n[Create new issue →](https://github.com/FortuneN/kete/issues/new)\n\n## Please consider supporting the project\n\n| Platform | Type | Link |\n|----------|------|------|\n| **GitHub (Stars)** | Free | [Give the project a star](https://github.com/FortuneN/kete) |\n| **GitHub (Sponsors)** | One-time / Recurring | [Sponsor on GitHub](https://github.com/sponsors/FortuneN) |\n| **PayPal** | One-time / Recurring | [Donate using PayPal](https://paypal.me/FortuneNgwenya) |\n| **Buy Me a Coffee** | One-time / Recurring | [Donate using Buy Me a Coffee](https://www.buymeacoffee.com/FortuneN) |\n| **Ko-fi** | One-time / Recurring | [Donate using Ko-fi](https://ko-fi.com/FortuneN) |\n| **Liberapay** | Recurring | [Donate using Liberapay](https://liberapay.com/FortuneN) |\n\n## Recognition\n\n| Source | Description |\n|-----------|-------------|\n| [Keycloak Extensions](https://www.keycloak.org/extensions) | Official Keycloak extensions directory |\n| [Awesome Keycloak](https://github.com/thomasdarimont/awesome-keycloak) | Community-curated list of Keycloak resources |\n\n## Credits\n\n| Library | Description |\n|---------|-------------|\n| [Keycloak](https://www.keycloak.org/) | Open source identity and access management |\n| [Lombok](https://projectlombok.org/) | Boilerplate reduction for Java |\n| [Apache Commons](https://commons.apache.org/) | Configuration2, Lang3, Text, IO, Pool2 utilities |\n| [Apache Kafka Client](https://kafka.apache.org/) | Kafka producer library |\n| [Apache Pulsar Client](https://pulsar.apache.org/) | Pulsar producer library |\n| [RabbitMQ Client](https://www.rabbitmq.com/java-client.html) | AMQP 0-9-1 client |\n| [Eclipse Paho](https://www.eclipse.org/paho/) | MQTT 3.1.1 and MQTT 5.0 clients |\n| [Apache Qpid JMS](https://qpid.apache.org/components/jms/) | AMQP 1.0 JMS client |\n| [Apache ActiveMQ](https://activemq.apache.org/) | STOMP protocol client |\n| [Pooled JMS](https://github.com/messaginghub/pooled-jms) | JMS connection pooling |\n| [Java-WebSocket](https://github.com/TooTallNate/Java-WebSocket) | WebSocket client library |\n| [OkHttp](https://square.github.io/okhttp/) | HTTP client with TLS support |\n| [Lettuce](https://lettuce.io/) | Redis client for Pub/Sub and Streams |\n| [NATS Java Client](https://github.com/nats-io/nats.java) | NATS and JetStream messaging |\n| [JeroMQ](https://github.com/zeromq/jeromq) | Pure Java ZeroMQ implementation |\n| [AWS SDK for Java v2](https://aws.amazon.com/sdk-for-java/) | SQS, SNS, Kinesis, EventBridge clients |\n| [Azure SDK for Java](https://github.com/Azure/azure-sdk-for-java) | Event Hubs, Service Bus, Storage Queue, Web PubSub, Event Grid, Identity |\n| [Google Cloud Java SDK](https://cloud.google.com/java/docs/reference) | Pub/Sub and Cloud Tasks clients |\n| [Google Auth Library](https://github.com/googleapis/google-auth-library-java) | OAuth2 and credential support for GCP services |\n| [gRPC Java](https://grpc.io/) | gRPC destination and Cloud Tasks transport |\n| [Microsoft SignalR Java Client](https://learn.microsoft.com/aspnet/core/signalr/java-client) | ASP.NET SignalR hub client |\n| [Socket.IO Java Client](https://github.com/socketio/socket.io-client-java) | Socket.IO protocol client |\n| [Nimbus OAuth SDK](https://connect2id.com/products/nimbus-oauth-openid-connect-sdk) | OAuth 2.0 client credentials |\n| [Resilience4j](https://resilience4j.readme.io/) | Retry patterns |\n| [Jackson](https://github.com/FasterXML/jackson) | JSON, XML, YAML, CSV, CBOR, TOML, Smile, Properties |\n| [hrakaroo/glob](https://github.com/hrakaroo/glob-library-java) | High-performance glob and SQL LIKE patterns |\n| [Bouncy Castle](https://www.bouncycastle.org/) | TLS/SSL cryptography provider |\n| [Reflections](https://github.com/ronmamo/reflections) | Runtime component discovery |\n| [Google Guava](https://github.com/google/guava) | Caching and case-format transformations |\n| [SLF4J](https://www.slf4j.org/) | Logging facade |\n| [JUnit 5](https://junit.org/junit5/) | Testing framework |\n| [Mockito](https://site.mockito.org/) | Mocking framework for tests |\n| [AssertJ](https://assertj.github.io/doc/) | Fluent assertions for tests |\n| [Awaitility](https://github.com/awaitility/awaitility) | Asynchronous readiness probes for tests |\n| [Testcontainers](https://testcontainers.com/) | Docker-based integration testing |\n| [Apache Avro](https://avro.apache.org/) | Avro serialization format |\n| [Google Protobuf](https://protobuf.dev/) | Protocol Buffers serialization |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/fortunen.github.io%2Fkete%2F","html_url":"https://awesome.ecosyste.ms/projects/fortunen.github.io%2Fkete%2F","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/fortunen.github.io%2Fkete%2F/lists"}