{"ref":"artifact:mikezaschka-cds-data-federation","page":"/artifacts/mikezaschka-cds-data-federation","json":"/artifacts/mikezaschka-cds-data-federation.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"mikezaschka-cds-data-federation","name":"cds-data-federation","artifact_type":"cds-plugin","ecosystem":"cap","flavors":[{"key":"node","source":{"url":"https://github.com/mikezaschka/cds-data","title":"mikezaschka/cds-data — README","checked":"2026-09-13","quote":"The plugin auto-activates on load via `cds-plugin.js`."}}],"domain":"data-and-persistence","origin_ring":"independent","description":{"one_line":"A data federation plugin for SAP CAP applications that declares delegation, caching and replication on a consumption view through CDS annotations, instead of hand-written handlers.","short":"Data federation for CAP via delegation, caching and replication","what_it_solves":"A CAP service that needs data from another system leaves you choosing between calling out on every request and copying the data in, and then writing the handlers for whichever you picked. This plugin declares both on the consumption view: @federation.delegate forwards reads, and optionally writes, to the remote at query time, including cross-service $expand and navigation, while @federation.replicate registers scheduled sync jobs that copy remote data into the local database. Either can be cached, at response level through [cds-caching](artifact:cds-caching) or as entity-level snapshots. Replication and entity-level caching require the separate [cds-data-pipeline](artifact:mikezaschka-cds-data-pipeline) package; delegation alone does not, and both packages install on [@sap/cds](artifact:sap-cds) 9 and 10 with Node 22 or later."},"links":{"npm":"https://www.npmjs.com/package/cds-data-federation","repo":"https://github.com/mikezaschka/cds-data","docs":"https://mikezaschka.github.io/cds-data/federation/"},"provides":[{"capability":"capability:replication","what_it_does":"Declares on a consumption view whether a remote entity is delegated to at query time, replicated into a local table on a schedule through cds-data-pipeline, or cached; the handlers and the query translation are registered at boot from the annotation.","sources":[{"url":"https://github.com/mikezaschka/cds-data/blob/main/packages/cds-data-federation/README.md","title":"cds-data-federation — README","checked":"2026-09-27","quote":"Annotate the consumption view; handlers, query translation, and pipeline binding are registered at boot."}],"facets":[{"key":"strategy","value":["federate","copy","cache"],"source":{"url":"https://github.com/mikezaschka/cds-data/blob/main/packages/cds-data-federation/README.md","title":"cds-data-federation — README","checked":"2026-09-27","quote":"Start with delegate; add cache for latency/load; replicate when you need SQL power or offline resilience."}},{"key":"refresh","value":["on read","on expiry","scheduled"],"source":{"url":"https://github.com/mikezaschka/cds-data/blob/main/packages/cds-data-federation/README.md","title":"cds-data-federation — README","checked":"2026-09-27","quote":"Start with delegate; add cache for latency/load; replicate when you need SQL power or offline resilience."}},{"key":"delta","value":true,"source":{"url":"https://github.com/mikezaschka/cds-data/blob/main/packages/cds-data-federation/README.md","title":"cds-data-federation — README","checked":"2026-09-27","quote":"**Replicate** | Full/delta sync, UPSERT, `replicated` aspect, pipeline hooks"}},{"key":"writes_through","value":true,"source":{"url":"https://github.com/mikezaschka/cds-data/blob/main/packages/cds-data-federation/README.md","title":"cds-data-federation — README","checked":"2026-09-27","quote":"Live data, writes to system of record | `@federation.delegate`"}},{"key":"source_kind","value":["OData","REST"],"source":{"url":"https://github.com/mikezaschka/cds-data/blob/main/packages/cds-data-federation/README.md","title":"cds-data-federation — README","checked":"2026-09-27","quote":"Plain REST JSON API (no CDS model on remote) | `@federation.replicate` + `rest: { … }`"}},{"key":"target_kind","value":["local database","SQLite"],"source":{"url":"https://github.com/mikezaschka/cds-data/blob/main/packages/cds-data-federation/README.md","title":"cds-data-federation — README","checked":"2026-09-27","quote":"Per-query (`cds-caching`) or full-entity SQLite snapshots on delegate"}}]},{"capability":"capability:caching","what_it_does":"Caches federated responses through [cds-caching](artifact:cds-caching), or retains entity snapshots through [cds-data-pipeline](artifact:mikezaschka-cds-data-pipeline). Writable delegates require manual invalidation or a shorter TTL.","sources":[{"url":"https://mikezaschka.github.io/cds-data/federation/integration/caching.html","title":"cds-data-federation — Caching Federated Entities","checked":"2026-09-17","quote":"cache.strategy: 'response' (default)"},{"url":"https://mikezaschka.github.io/cds-data/federation/integration/caching.html","title":"cds-data-federation — Caching Federated Entities","checked":"2026-09-17","quote":"For writable delegates, neither cache strategy auto-invalidates on CUD — plan manual invalidation or shorter TTL."}],"facets":[{"key":"cache_layer","value":"Federated responses or whole-entity snapshots","source":{"url":"https://mikezaschka.github.io/cds-data/federation/integration/caching.html","title":"cds-data-federation — Caching Federated Entities","checked":"2026-09-17","quote":"cache.strategy: 'entity' — built into cds-data-federation; stores a full remote projection snapshot in secondary SQLite via cds-data-pipeline, then satisfies arbitrary READ CQNs from SQLite until TTL."},"applies_to":{"ecosystems":["cap"]}},{"key":"freshness_control","value":"Response: tags/TTL; entity: TTL and reload on miss; no automatic CUD invalidation","source":{"url":"https://mikezaschka.github.io/cds-data/federation/integration/caching.html","title":"cds-data-federation — Caching Federated Entities","checked":"2026-09-17","quote":"For writable delegates, neither cache strategy auto-invalidates on CUD — plan manual invalidation or shorter TTL."},"applies_to":{"ecosystems":["cap"]}}]},{"capability":"capability:service-integration","what_it_does":"Delegates a consumption view to its remote service from an annotation, with the query translated, writes opt-in, and $expand and navigation across the local and remote boundary handled in the plugin rather than in a handler per scenario.","sources":[{"url":"https://github.com/mikezaschka/cds-data/blob/main/packages/cds-data-federation/README.md","title":"cds-data-federation — README","checked":"2026-09-27","quote":"**Delegate** | Live proxy, query translation, opt-in CUD, server-driven paging"},{"url":"https://github.com/mikezaschka/cds-data/blob/main/packages/cds-data-federation/README.md","title":"cds-data-federation — README","checked":"2026-09-27","quote":"**Cross-service mashups** | `$expand` and navigation across local ↔ remote boundaries handled inside the plugin — not manual request interception per scenario"}]}],"provenance":{"discovered_via":[{"source":"source:npm"},{"source":"source:discover"}],"first_seen":"2026-08-30"},"maintainers":["actor:mike-zaschka"],"contributors":["actor:mike-zaschka"],"drafted_with_ai":true,"requires":[{"ref":"artifact:cds-caching","for":"For response caching.","sources":[{"url":"https://mikezaschka.github.io/cds-data/federation/integration/caching.html","title":"cds-data-federation — Caching Federated Entities","checked":"2026-09-17","quote":"cache.strategy: 'response' (default) — provided by cds-caching, an optional peer dependency."}]},{"ref":"artifact:mikezaschka-cds-data-pipeline","for":"For entity caching and replication.","sources":[{"url":"https://github.com/mikezaschka/cds-data","title":"cds-data — README","checked":"2026-09-17","quote":"Replication, entity-level caching, and materialization require `cds-data-pipeline`."}]},{"ref":"artifact:cap-js-sqlite","for":"For the entity-cache strategy.","sources":[{"url":"https://mikezaschka.github.io/cds-data/federation/integration/caching.html","title":"cds-data-federation — Caching Federated Entities","checked":"2026-09-17","quote":"npm add cds-data-pipeline @cap-js/sqlite"}]}],"history":[{"date":"2026-09-17","field":"provides, requires","from":"Replication relationship only","to":"Added caching relationship, strategy facets and conditional dependencies","reason":"Maintainer documentation describes two cache strategies; dependency on another cache provider does not exclude this API from the caching capability."}],"compat":{"runtimes":["node"],"cds_range":">=9"},"type_properties":{"distribution":{"value":["npm"],"sources":[{"url":"https://github.com/mikezaschka/cds-data","title":"cds-data-federation — README","checked":"2026-10-18","quote":"npm add cds-data-federation cds-data-pipeline"}]}},"changed_in":[{"version":"0.3.0","date":"2026-07-11","what_changed":"The plugin's default service names and configuration keys moved to kebab-case, including the default name of the entity-cache service, and a configured entity-cache `serviceName` is honoured.","invalidates":"Configuration written for 0.2 that names the plugin's services or keys in their earlier spelling.","source":{"url":"https://github.com/mikezaschka/cds-data/blob/main/packages/cds-data-federation/CHANGELOG.md#030-2026-07-11","title":"cds-data-federation changelog, 0.3.0","checked":"2026-10-19","quote":"align plugin service and config keys to kebab-case defaults"}}]},"effective_normative_relations":[{"instrument":"instrument:sap-developer-license-3-2-cap","relation":"use-constrained-by","sections":["1","2","3"],"applies_when":"A cds-plugin is used with SAP CAP materials, or an artifact is explicitly identified as a CAP plugin or application.","note":"This is inherited applicability, not a licence verdict about the artifact itself. Review the agreement for the actual materials and use; an explicit artifact relationship to another revision takes precedence.","scope":{"kind":"artifact"},"sources":[{"url":"https://cap.cloud.sap/resources/license/developer-license-3_2_CAP.txt","title":"SAP Developer License Agreement 3.2 CAP","checked":"2026-09-16","quote":"documentation, plug-ins, templates, scripts and sample code, libraries, software development kits"}],"inherited_from":"cap-plugins-and-applications","relevant_capabilities":["agent-systems-access","async-processing","data-import-export","database-connectors","deployment","destinations","llm-integration","mcp-servers","plugin-authoring","replication","retrieval-augmented-generation","rfc-connectivity"]}],"readings":{"liveness":[{"label":"Maintenance","tier":"good","evidence":"1 month since release"},{"label":"Continuity","tier":"fair","evidence":"2 contributors, 1 publisher"},{"label":"Repository","tier":"good","evidence":"pushed 2026-09, not archived"}],"compatibility":[{"label":"Declared for","tier":"good","evidence":">=9 — includes cds 10 and 9"},{"label":"Survived majors","tier":"unknown","evidence":"first released after @sap/cds 10 shipped"},{"label":"Maintainer's CI","tier":"good","evidence":"CI green, 2026-09-20"}],"practice":[{"label":"Tests","tier":"good","evidence":"211 test files, npm test"},{"label":"Docs","tier":"good","evidence":"docs/ with 69 pages, docs site, README 9 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":301,"unit":"installs/week"},{"value":9,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-26","latest_version":"0.4.0","majors":{"0.2":{"version":"0.2.0","date":"2026-07-10"},"0.3":{"version":"0.3.0","date":"2026-07-11"},"0.4":{"version":"0.4.0","date":"2026-09-20"}},"license":"MIT","first_release":"2026-07-10","last_release":"2026-09-20","releases":7,"cadence_days":1,"maintainers":1,"repository":"git+https://github.com/mikezaschka/cds-data.git","repository_directory":"packages/cds-data-federation","peer_cds":">=9","test_script":true,"types":false,"downloads_weekly":301,"stars":9,"forks":0,"open_issues":1,"archived":false,"pushed_at":"2026-09-22","license_spdx":"MIT","org_owned":false,"default_branch":"main","contributors":2,"tree_truncated":false,"test_files":211,"workflows":2,"other_ci":false,"readme_bytes":9106,"docs_files":69,"changelog":false,"license_file":true,"dts_files":0,"ci_status":"success","ci_run_at":"2026-09-20","ci_workflow":"CI","ci_event":"push","readme_path":"packages/cds-data-federation/README.md","readme_sha":"4d2ae2651aba68b15008a4d240a28b8abf35518e","months_since_release":1,"dormant":false,"first_commit":"2026-05-22","last_commit":"2026-09-20","commits":54,"dependencies":0,"node_engine":">=22","downloads_monthly":2963,"created_at":"2026-05-22T21:13:58Z","open_prs":0,"repo_read":"2026-10-26"},"release_notes":{"license":"MIT","quotable":true,"source":{"kind":"repo","path":"packages/cds-data-federation/CHANGELOG.md","ref":"main","url":"https://github.com/mikezaschka/cds-data/blob/main/packages/cds-data-federation/CHANGELOG.md"},"format":"conventional","releases":[{"version":"0.3.3","date":"2026-07-17","date_source":"heading","heading":"0.3.3 (2026-07-17)","url":"https://github.com/mikezaschka/cds-data/blob/main/packages/cds-data-federation/CHANGELOG.md#033-2026-07-17","sections":[{"kind":"fix","heading":"Bug Fixes","items":1}],"hash":"ddb2108e5a4a2474"},{"version":"0.3.2","date":"2026-07-12","date_source":"heading","heading":"0.3.2 (2026-07-12)","url":"https://github.com/mikezaschka/cds-data/blob/main/packages/cds-data-federation/CHANGELOG.md#032-2026-07-12","sections":[{"kind":"docs","heading":"Documentation","items":2}],"hash":"fd030a855964ed42"},{"version":"0.3.1","date":"2026-07-11","date_source":"heading","heading":"0.3.1 (2026-07-11)","url":"https://github.com/mikezaschka/cds-data/blob/main/packages/cds-data-federation/CHANGELOG.md#031-2026-07-11","sections":[{"kind":"fix","heading":"Bug Fixes","items":1}],"hash":"938b385c07122555"},{"version":"0.3.0","date":"2026-07-11","date_source":"heading","heading":"0.3.0 (2026-07-11)","url":"https://github.com/mikezaschka/cds-data/blob/main/packages/cds-data-federation/CHANGELOG.md#030-2026-07-11","sections":[{"kind":"breaking","heading":"⚠ BREAKING CHANGES","items":1},{"kind":"feature","heading":"Features","items":1},{"kind":"fix","heading":"Bug Fixes","items":1},{"kind":"docs","heading":"Documentation","items":3}],"hash":"1b337e6401bc2c83","cited_by":[{"version":"0.3.0","date":"2026-07-11"}]},{"version":"0.2.1","date":"2026-07-11","date_source":"heading","heading":"0.2.1 (2026-07-11)","url":"https://github.com/mikezaschka/cds-data/blob/main/packages/cds-data-federation/CHANGELOG.md#021-2026-07-11","sections":[{"kind":"feature","heading":"Features","items":1},{"kind":"fix","heading":"Bug Fixes","items":1}],"hash":"2fec8e0e4a037f5a"},{"version":"0.2.0","date":"2026-07-10","date_source":"heading","heading":"0.2.0 (2026-07-10)","url":"https://github.com/mikezaschka/cds-data/blob/main/packages/cds-data-federation/CHANGELOG.md#020-2026-07-10","sections":[{"kind":"feature","heading":"Features","items":2}],"hash":"c2bef4bed928a7d6"}],"versions":[{"version":"0.4.0","date":"2026-09-20"},{"version":"0.3.3","date":"2026-07-17"},{"version":"0.3.2","date":"2026-07-12"},{"version":"0.3.1","date":"2026-07-11"},{"version":"0.3.0","date":"2026-07-11"},{"version":"0.2.1","date":"2026-07-11"},{"version":"0.2.0","date":"2026-07-10"}],"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:federating-replicating-and-caching-remote-data-in-cap-part-2","name":"Federating, Replicating, and Caching Remote Data in CAP — Part 2","json":"/content/federating-replicating-and-caching-remote-data-in-cap-part-2.json"},{"ref":"content:federating-replicating-and-caching-remote-data-in-cap-part-1","name":"The Full Picture: Federating, Replicating, and Caching Remote Data in CAP — Part 1","json":"/content/federating-replicating-and-caching-remote-data-in-cap-part-1.json"}],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}