{"ref":"artifact:cds-kafka","page":"/artifacts/cds-kafka","json":"/artifacts/cds-kafka.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"cds-kafka","name":"cds-kafka","artifact_type":"cds-plugin","ecosystem":"cap","domain":"integration-and-messaging","origin_ring":"independent","description":{"one_line":"A Kafka adapter for CAP that registers Kafka topics as a CDS messaging service over KafkaJS, so emit and on work unchanged, with per-message keys, partitions and topics set through headers.","short":"Kafka adapter exposing topics as a CDS messaging service","what_it_solves":"CAP's messaging kinds reach SAP's own brokers, and the [Apache Kafka](external:kafka) adapter sitting in the CAP sources is bound to an internal SAP BTP service that is not publicly available, so a CAP application that has to speak to a Kafka cluster of its own has no configured path to it. cds-kafka registers a messaging service whose `impl` is the plugin and passes its `credentials` block straight into [KafkaJS](https://kafka.js.org), leaving `emit` and `on` as CAP defines them: the producer and consumer samples in [SAP-samples/cloud-cap-samples](https://github.com/SAP-samples/cloud-cap-samples) were moved onto Kafka without touching application code. On top of that it carries what Kafka needs and a CDS event does not describe — a key, a partition and a topic name set per message through `@kafka.` headers, subscriptions by regular expression or `*`, and automatic topic creation — and hands the partition, offset and timestamp a message arrived with back to the handler as headers. It stops at the broker's own contracts: there is no schema registry support, and a regex subscription only matches topics that already existed when the application started."},"links":{"npm":"https://www.npmjs.com/package/cds-kafka","repo":"https://github.com/mikezaschka/cds-kafka"},"identity":{"license":"MIT"},"compat":{"runtimes":["node"],"cds_range":">=7","deployment":["cf","local"]},"type_properties":{"distribution":{"value":["npm"],"sources":[{"url":"https://github.com/mikezaschka/cds-kafka","title":"cds-kafka — README","checked":"2026-10-18","quote":"npm add cds-kafka"}]}},"provides":[{"capability":"capability:event-mesh","what_it_does":"Implements a CAP messaging service over Apache Kafka, mapping a CDS event onto a Kafka topic in both directions, with the topic name, key and partition settable per message and subscriptions declarable as a regular expression or a catch-all.","sources":[{"url":"https://github.com/mikezaschka/cds-kafka","title":"cds-kafka — README","checked":"2026-09-19","quote":"This project is a plugin for the SAP Cloud Application Programming Model (CAP) providing native integration with Apache Kafka as the messaging service."},{"url":"https://community.sap.com/t5/technology-blog-posts-by-members/using-apache-kafka-for-messaging-in-the-sap-cloud-application-programming/ba-p/13970176","title":"Using Apache Kafka for messaging in the SAP Cloud Application Programming Model (CAP) – Part 1/2 — SAP Community","checked":"2026-09-19","quote":"When looking at the Kafka integration, cds-kafka focuses on remote and asynchronous events, allowing applications to send and consume events directly from Kafka."}]}],"requires":[{"ref":"external:kafka","for":"The broker the messaging service talks to. cds-kafka reaches it through KafkaJS, and the `credentials` block is handed to the KafkaJS constructor, so a cluster in Docker on a laptop and a managed one in a cloud are configured the same way.","requirement":"required","role":"message-broker","sources":[{"url":"https://github.com/mikezaschka/cds-kafka","title":"cds-kafka — README","checked":"2026-09-19","quote":"Under the hood cds-kafka uses KafkaJS to connect to Kafka. Since Kafka itself uses a binary protocol over TCP, KafkaJS is the required abstraction layer to access Kafka functionality in JavaScript. The credentials are directy passed into the KafkaJS constructor making it possible to connect to any local or cloud-based Kafka instance."}]}],"connects":[{"ref":"external:kafka","kind":"data","protocols":["kafka","tcp"],"direction":"both","for":"Publishing CAP events to Kafka topics and subscribing to topics to receive messages, through the CAP messaging API.","sources":[{"url":"https://raw.githubusercontent.com/mikezaschka/cds-kafka/6d821c76764e7465e2280ae556c0c8814cd563cd/readme.md","title":"cds-kafka — README, Features","checked":"2026-09-19","quote":"Enables sending messages/events to Apache Kafka."},{"url":"https://raw.githubusercontent.com/mikezaschka/cds-kafka/6d821c76764e7465e2280ae556c0c8814cd563cd/readme.md","title":"cds-kafka — README, Features","checked":"2026-09-19","quote":"Allows subscribing to one or multiple topics in Apache Kafka to receive incoming messages."},{"url":"https://raw.githubusercontent.com/mikezaschka/cds-kafka/6d821c76764e7465e2280ae556c0c8814cd563cd/readme.md","title":"cds-kafka — README, Setup","checked":"2026-09-19","quote":"Since Kafka itself uses a binary protocol over TCP, KafkaJS is the required abstraction layer to access Kafka functionality in JavaScript."}]}],"normative_relations":[{"instrument":"instrument:sap-developer-license-3-1","relation":"use-constrained-by","sections":["1"],"applies_when":"The package is used within an SAP Cloud Application based on @sap/cds, especially to move SAP data through Kafka.","note":"The package is MIT-licensed, but its README separately states that use within SAP Cloud Applications is subject to the SAP Developer License. Review section 1 for a use that moves data from an SAP product to a non-SAP product.","scope":{"kind":"provides","ref":"capability:event-mesh"},"sources":[{"url":"https://github.com/mikezaschka/cds-kafka","title":"cds-kafka — README","checked":"2026-09-19","quote":"using cds-kafka within SAP Cloud Applications (@sap/cds) is subject to the SAP Developer License"}]}],"alternative_to":["artifact:cap-js-community-event-queue"],"provenance":{"discovered_via":[{"source":"source:npm"},{"source":"source:awesome-cap"}],"first_seen":"2026-08-31","claimed_by":"actor:mike-zaschka"},"history":[{"date":"2026-09-19","field":"provides","from":"capability:async-processing","to":"capability:event-mesh","reason":"Re-read against the README and the maintainer's own two SAP Community posts. Every claim in all three is about emitting to and consuming from a broker; none describes deferred work, retries or periodic scheduling, and async processing's own description separates itself from messaging. Event Mesh is the concern that covers the mapping between a CDS event and a broker topic, and its CAP coverage already states that non-SAP brokers are what plugins add. The CAP Java counterpart, com.sap.cds:cds-feature-kafka, carries the same edge."},{"date":"2026-09-19","field":"requires","from":null,"to":"external:kafka","reason":"The README names the broker and the client library it reaches it through, and the edge was missing while cds-nats, the sibling broker adapter, already carried its own."},{"date":"2026-09-19","field":"compat.cds_range","from":null,"to":">=7","reason":"cds-kafka 0.1.4 declares @sap/cds >=7 as a peer dependency in its npm record. Checked 2026-09-19 against the registry."},{"date":"2026-09-19","field":"compat.deployment","from":null,"to":"cf, local","reason":"Part 2 of the maintainer's series runs the plugin against a Docker Kafka on a laptop, then deploys a CAP application that consumes from Confluent Cloud to SAP BTP Cloud Foundry with mbt build and cf deploy. Kyma is named there as somewhere a Kafka cluster may run, not as a deployment that was carried out, so it is left out."},{"date":"2026-09-19","field":"identity.license","from":null,"to":"MIT","reason":"Stated in the README's licensing section and in the npm record. It sits beside the SAP Developer License relation rather than replacing it: the package is MIT, the use inside an SAP Cloud Application is what the other instrument speaks to."},{"date":"2026-09-19","field":"description.what_it_solves","from":null,"to":"written from the README and the maintainer's two SAP Community posts","reason":"The entry carried a one-line index entry and nothing answering what it does, so the page opened on readings. The paragraph states the gap the plugin fills, what it adds over CAP's messaging API, and the two places it stops."},{"date":"2026-09-19","field":"connects","from":null,"to":"kafka","reason":"cds-kafka required Apache Kafka as its broker; the connection says what the dependency could not: that messages run both ways, to and from topics."}],"maintainers":["actor:mike-zaschka"],"contributors":["actor:mike-zaschka"],"drafted_with_ai":true},"effective_normative_relations":[{"instrument":"instrument:sap-developer-license-3-1","relation":"use-constrained-by","sections":["1"],"applies_when":"The package is used within an SAP Cloud Application based on @sap/cds, especially to move SAP data through Kafka.","note":"The package is MIT-licensed, but its README separately states that use within SAP Cloud Applications is subject to the SAP Developer License. Review section 1 for a use that moves data from an SAP product to a non-SAP product.","scope":{"kind":"provides","ref":"capability:event-mesh"},"sources":[{"url":"https://github.com/mikezaschka/cds-kafka","title":"cds-kafka — README","checked":"2026-09-19","quote":"using cds-kafka within SAP Cloud Applications (@sap/cds) is subject to the SAP Developer License"}]}],"readings":{"liveness":[{"label":"Maintenance","tier":"poor","evidence":"21 months since release"},{"label":"Continuity","tier":"fair","evidence":"one contributor, personally owned"},{"label":"Repository","tier":"poor","evidence":"pushed 2025-01, not archived"}],"compatibility":[{"label":"Declared for","tier":"good","evidence":">=7 — includes cds 10 and 9"},{"label":"Survived majors","tier":"poor","evidence":"no release since @sap/cds 10 shipped (July 2026)"},{"label":"Maintainer's CI","tier":"fair","evidence":"no CI configured"}],"practice":[{"label":"Tests","tier":"poor","evidence":"none found in the tree"},{"label":"Docs","tier":"good","evidence":"README 11 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":71,"unit":"installs/week"},{"value":11,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-26","latest_version":"0.1.4","majors":{"0.0":{"version":"0.0.1","date":"2025-01-01"},"0.1":{"version":"0.1.0","date":"2025-01-02"}},"license":"MIT","first_release":"2025-01-01","last_release":"2025-01-16","releases":6,"cadence_days":1,"maintainers":1,"repository":"git+https://github.com/mikezaschka/cds-kafka.git","peer_cds":">=7","test_script":false,"types":false,"downloads_weekly":71,"stars":11,"forks":2,"open_issues":1,"archived":false,"pushed_at":"2025-01-16","license_spdx":"MIT","org_owned":false,"default_branch":"main","contributors":1,"tree_truncated":false,"test_files":0,"workflows":0,"other_ci":false,"readme_bytes":11344,"docs_files":0,"changelog":false,"license_file":true,"dts_files":0,"readme_path":"readme.md","readme_sha":"c425828b7dc2985bab08a1fad33e2b572bb4e9fd","months_since_release":21,"dormant":true,"repository_directory":null,"dependencies":1,"node_engine":null,"downloads_monthly":571,"created_at":"2025-01-01T20:40:42Z","open_prs":0,"first_commit":"2025-01-01","last_commit":"2025-01-16","commits":10,"repo_read":"2026-10-26"},"release_notes":{"license":"MIT","quotable":true,"versions":[{"version":"0.1.4","date":"2025-01-16"},{"version":"0.1.3","date":"2025-01-16"},{"version":"0.1.2","date":"2025-01-05"},{"version":"0.1.1","date":"2025-01-03"},{"version":"0.1.0","date":"2025-01-02"},{"version":"0.0.1","date":"2025-01-01"}],"crawled_at":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:mike-zaschka","name":"Mike Zaschka","json":"/actors/mike-zaschka.json"}],"contributors":[{"ref":"actor:mike-zaschka","name":"Mike Zaschka","json":"/actors/mike-zaschka.json"}],"explained_by":[{"ref":"content:using-apache-kafka-for-messaging-in-cap-part-2","name":"Using Apache Kafka for messaging in the SAP Cloud Application Programming Model (CAP) – Part 2/2","json":"/content/using-apache-kafka-for-messaging-in-cap-part-2.json"},{"ref":"content:using-apache-kafka-for-messaging-in-cap-part-1","name":"Using Apache Kafka for messaging in the SAP Cloud Application Programming Model (CAP) – Part 1/2","json":"/content/using-apache-kafka-for-messaging-in-cap-part-1.json"}],"alternative_to_this":[{"ref":"artifact:cap-js-community-event-queue","name":"@cap-js-community/event-queue","json":"/artifacts/cap-js-community-event-queue.json"}],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}