PackagePackagetypeA library you install and call yourself.See every one →What this type is →by a community orgby a community orgoriginPublished by a community organisation, so it outlives any one maintainer.See every one →

@cap-js-community/common

Six independent features for CAP services in one package: replication cache, migration check, rate limiting, a Redis client broker, a local HTML5 repository and a CDM builder.

Each feature fills a different hole. Replication cache mirrors a service into tenant-aware SQLite; migration check catches incompatible CDS model changes against a whitelist; rate limiting caps requests per service and tenant; the local HTML5 repository lets UI5 apps be tested behind an approuter without deploying.

Facts

Latestv0.5.5ReleasedLast pushLicenceApache-2.0

Where it sits

Lives in
Provides
CachingCAPCachingcapabilityHolding the result of an expensive read so the next one is cheap. This spans four different things people call caching — HTTP response caching, query result caching, remote service response caching, and application-level memoisation. They are not interchangeable, and picking the wrong one is the usual cause of stale-data bugs in multitenant apps.Data federationCAPData federationcapabilityReading data that lives in another system as if it were local — by federating the query, by copying the rows, or by caching what was read. Three different answers to one question, and the choice is about how stale you can afford to be.Schema evolutionCAPSchema evolutioncapabilityGetting a model change into a database that already holds data, in every tenant, without losing any of it. Generating the initial schema and migrating one that already holds data are often treated as the same step.Rate limitingCAPRate limitingcapabilityCapping how many requests a service will accept per tenant or per caller, so one consumer cannot exhaust a shared deployment, whether enforced by a policy in front of the application or inside its own process.Local developmentCAPLocal developmentcapabilityRunning the whole stack on a laptop against real bindings — the service, the UI and the routing in front of it — without deploying to see a change.Metadata publishingCAPMetadata publishingcapabilityDescribing a service to something other than a human — service metadata for clients, and machine-readable descriptions for registries and discovery.
Flavors
Node.jsfrom its runtime
Requires
@cap-js/sqlite@cap-js/sqliteartifactReplication cache requires @cap-js/sqlite as a production dependency, not only a development dependency.

Who is behind it

cap-js-communitycap-js-communityOrganisationMaintains this
In the atlas: maintains 10
@cap-js-community
Oliver KlemenzOliver KlemenzPersonMaintains this
In the atlas: maintains 4, contributes to 6
@oklemenz2
maintainersDirk TeufelPersonContributes to this
In the atlas: contributes to 19
@drktfl
Max GruenfelderPersonContributes to this
In the atlas: contributes to 7
@soccermax
2 contributors

Before choosing this

Conditions

PracticalFunctional boundary

It is a bundle, not a plugin with one job. Depending on it for one feature brings the rest.

LicenceSAP Developer License Agreement 3.2 CAP§ 1from Data federationReplication by a covered CAP application moves data from an SAP product into a non-SAP product.
  • § 1 License. Productive customer applications are limited to SAP BTP or another SAP-licensed platform, and mass extraction to a non-SAP product is restricted except where solely required for SAP interoperability.

Section 1 restricts mass extraction to a non-SAP product and states a scoped interoperability exception. That boundary is central to a replication design and must be checked against the actual use.

SAP Developer License Agreement 3.2 CAP →

What it declares

Every artifact

Type
Package
Origin
By a community org
Runtime
Node.js

As a package

Where it runs
does not say
Distributed through
does not say

For caching

Caching layer
Service data replicated into local SQLite
Freshness control
TTL, tags and optional invalidateOnWrite
Tenant partitioning
Tenant-aware replication; static option is non-tenant-aware

For data federation

Strategy
copy
Refresh
on expiry
Reads from
CAP service
Writes to
SQLite

For local development

Part of the local stack it starts
HTML5 application repository

Tasks this contributes to4Beta

Keep a cached result from reaching the wrong tenant, user or localeA result retained for one tenant, one user or one language is not returned to a request that belongs to another.Node.jsCovers, under conditionsservice replica
What it does

The replica is held in a tenant-aware SQLite database, so each tenant queries its own copy. One annotation opts out of that: static replication is stated as non-tenant aware, which is the arrangement for rows that are the same for everyone.

Conditions

The entity is not annotated for static replication, which the README states is not tenant aware

Remaining work

Check every entity annotated for static replication for whether its rows really are the same for all tenants. User and locale are not dimensions this section names at all.

All options on the Caching page →
Refresh cached reads after a writeA read answered from a cache reflects a write to the underlying data within a bound the application sets.Node.jsCoversservice replica
What it does

The replica ages out on a time to live given in milliseconds, and the same annotation block carries auto and preload for when the copy is made. Time is the bound this section states.

Remaining work

Set the ttl per entity. Whether a write through the replicated service clears its copy is not stated in the section read here, so the ttl is the only bound this assessment records.

All options on the Caching page →
Serve repeated reads of a rarely written entity from a cacheReads of an entity that is read constantly and written rarely are answered inside the application instead of going to the database on every request.Node.jsCoversservice replica
What it does

Answers the same outcome by a different mechanism: it holds a copy of a service in SQLite and runs the original query against the copy, so the read shape in the application does not change. The README gives the db service as its example.

Remaining work

Install @cap-js/sqlite as a dependency rather than a development dependency, and annotate the entities to replicate.

All options on the Caching page →
Open a CAP application through its router locallyA developer opens the application on a laptop at the address the App Router serves, logs in through the real authentication flow, and reaches the CAP service and the UI modules behind it the way a deployed request would.Node.jsCovers, under conditionsthe HTML5 application repository behind the router
What it does

Serves the apps and libraries of the project's app folder from the local file system as the HTML5 repository the router asks, and proxies every other request to the remote HTML5 repository, so a UI change is tested behind the router without being deployed first.

Conditions

a default-env.json in the approuter folder holds a valid HTML5 repository configuration from the deployment environment; the app or library sits in the app folder and contains a ui5.yaml, which is what the local repository picks up

Remaining work

Write the configuration file and run the local-html5-repo command beside the router. The package is a bundle, so depending on it for this one feature brings its other five.

All options on the Local development page →

Connections7

@cap-js-community/common connections@cap-js-community/commonPROVIDES→ provides6provides stated Replicates a service into tenant-aware SQLite for querying with the original service’s queries; @cds.replicate selects entities and exposes TTL, preload and static replication options. CAP Node.js Community Common — Replication Cache: https://github.com/cap-js-community/common/blob/main/README.mdCachingprovides stated Replicates a service into a tenant-aware SQLite database, kept per tenant. cap-js-community/common — Replication Cache: https://github.com/cap-js-community/common#replication-cacheData federationprovides stated Serves the apps and libraries of the project's app folder from the local file system as the HTML5 repository an approuter asks, and proxies every other request to the remote HTML5 repository, so a change to a UI5 application is tested behind the router without being deployed first. An app is picked up when it sits in the app folder and contains a ui5.yaml, and the approuter folder needs a default-env.json holding an HTML5 repository configuration from the deployment environment. CAP Node.js Community Common — Local HTML5 Repository: https://github.com/cap-js-community/common/blob/main/README.md CAP Node.js Community Common — Local HTML5 Repository, what it serves: https://github.com/cap-js-community/common/blob/main/README.md CAP Node.js Community Common — Local HTML5 Repository, configuration: https://github.com/cap-js-community/common/blob/main/README.mdLocal developmentprovides authored CDM Builder: emits a Common Data Model descriptor from the CDS model. cap-js-community/common — CDM Builder: https://github.com/cap-js-community/common#cdm-builderMetadata publishingprovides stated Limits the number of requests per service and per tenant, backed by [Redis](external:redis) where configured. cap-js-community/common — Rate Limiting: https://github.com/cap-js-community/common#rate-limitingRate limitingprovides stated Migration Check: flags incompatible CDS model changes and maintains a whitelist of compatible ones via the cdsmc CLI. cap-js-community/common — Migration Check: https://github.com/cap-js-community/common#migration-checkSchema evolutionNEEDS→ needs1needs stated Replication cache requires [@cap-js/sqlite](artifact:cap-js-sqlite) as a production dependency, not only a development dependency. CAP Node.js Community Common — Replication Cache: https://github.com/cap-js-community/common/blob/main/README.md@cap-js/sqlite

Install

npm add @cap-js-community/common

Derived from the package name. No recipe recorded; the README has the configuration.

README

quoted from cap-js-community/common under Apache-2.0, read
cap-js-community/common/README.mdOn GitHub

CAP Node.js Community Common

npm version monthly downloads REUSE status Main CI

Getting Started

  • Run npm add @cap-js-community/common in @sap/cds project

About this Project

This project provides common functionality for CDS services to be consumed with SAP Cloud Application Programming Model (Node.js).

Table of Contents

Replication Cache

The replication cache allows to cache a service (e.g. db service) into a tenant-aware SQLite database. Local replicated SQLite database can be queried with same query as the original service.

Usage

Replication cache uses SQLite as local database for productive usage. Ensure @cap-js/sqlite is installed as dependency (not as dev dependency) in your project.

@cds.replicate
entity Books {
  key ID       : Integer;
      title    : localized String;
      descr    : localized String;
}
Annotations

Annotations can be used to enable replication cache for a service on entity level:

  • @cds.replicate: Boolean | Object: Enable replication cache for entity
    • @cds.replicate.ttl: Number: Time-To-Live (TTL) of cache entry in milliseconds
    • @cds.replicate.auto: Boolean: Replication is managed automatically
    • @cds.replicate.preload: Boolean: Preload replication for entity
    • @cds.replicate.group: String: Replication group name
    • @cds.replicate.static: Boolean: Statically replicate non-tenant aware

Defaults are taken from CDS environment.

Options

Options can be passed to replication cache via CDS environment via cds.replicationCache section:

  • plugin: Boolean: Replication cache is activated via CDS plugin for db service. Default is true
  • name: String: Service name. Default is "db"
  • group: String: Replication group name. Default is "default"
  • credentials: Object: SQLite credentials
    • database: String: Database file. Default is ":memory:" and in production: "data.sqlite"
  • ttl: Number: Time-To-Live (TTL) of cache entries in milliseconds. Default is 1800000 (30 minutes)
  • check: Number: Interval to check size and prune. Default is 60000 (1 minute)
  • stats: Number: Interval to log statistics. Default is 300000 (5 minutes)
  • size: Number: Maximal cache size in bytes. Default is 10485760 (10 MB) and in production: 104857600 (100 MB)
  • pipe: Boolean: Replication is streamed through pipeline. chunks is not used. Default is true
  • chunks: Number: Replication chunk size. Default is 1000
  • retries: Number: Replication retries for failed replications. Default is 3
  • auto: Boolean: Replication is managed automatically. Default is true
  • prune: Boolean: Check and prune directly after replication. Default is true
  • validate: Boolean: Validate count of replicated records. Default is true
  • deploy: Boolean: Deploy whole schema to allow queries on projections. Default is true
  • preload: Boolean: Preload all replication enables entity. Default is false
  • wait: Boolean: Delay read query until replication finished. Default is false
  • search: Boolean: Search queries are allowed on replication cache. Default is true
  • measure: Boolean: Measure and compare replication cache and service query execution. Default is false
  • tmpDir: Boolean: Store replication cache file in temporary directory. Default is false
  • baseDir: String: Base directory for replication cache files. Default is "temp"
Test

Replication cache is inactive per default for tests (test profile). It can be enabled via CDS env:

{
  "cds": {
    "replicationCache": {
      "[test]": {
        "plugin": true
      }
    }
  }
}

Migration Check

The migration check allows to check for incompatible changes in the CDS model and to maintain a whitelist for compatible changes via cdsmc command line tool.

Options

Options can be passed to migration check via CDS environment via cds.migrationCheck section:

  • baseDir: String: Specifies the base directory for migration check. Default is "migration-check"
  • whitelist: Boolean: Requires maintaining a whitelist for compatible changes. Default is true
  • checkMtx: Boolean: Includes CDS MTXS persistence in check. Default is true
  • keep: Boolean: Keeps whitelist after update, otherwise whitelist is cleared. Default is false
  • freeze: Boolean: Freeze the persistence. Event compatible changes are not allowed, Default is false
  • label: String: Label to describe the updated hash files in addition to the timestamp. Default is ""
  • buildPath: String: Path to the build CSN. If not specified, it is derived from the CAP project type. Default is null
  • adminHash: String: Specify admin hash to acknowledge incompatible changes. Default is null
  • adminTracking: Boolean: Track changes acknowledged by admin in an admin changes file. Default is true
Usage
Build Production CSN

Production CSN is built for first time when not existing (otherwise it is updated):

  • Build CSN: cds build --production
  • Update Production CSN: cdsmc -u

Production CSN MUST be added to version control.

Migration Check

Migration check is used to check for incompatible changes in a repetitive way along development:

  • Build CSN: cds build --production
  • Check Changes: cdsmc

Incompatible changes are detected and reported as error. Compatible changes need to be whitelisted (can be disabled via options).

Checks

Incompatible Changes:

  • A released entity cannot be removed (ReleasedEntityCannotBeRemoved)
  • The draft enablement state of a released entity cannot be changed (ReleasedEntityDraftEnablementCannotBeChanged)
  • A released element cannot be removed (ReleasedElementCannotBeRemoved)
  • The key of a released element cannot be changed (ReleasedElementKeyCannotBeChanged)
  • The managed/unmanaged state of a released element cannot be changed (ReleasedElementManagedUnmanagedCannotBeChanged)
  • The virtual state of a released element cannot be changed (ReleasedElementVirtualCannotBeChanged)
  • The localization state of a released element cannot be changed (ReleasedElementLocalizationCannotBeChanged)
  • A released element cannot be changed to not-nullable (ReleasedElementNullableCannotBeChanged)
  • The data type of a released element cannot be changed (ReleasedElementTypeCannotBeChanged)
  • The data type of a released element cannot be shortened (ReleasedElementTypeCannotBeShortened)
  • The scale or precision of a released element cannot be reduced (ReleasedElementScalePrecisionCannotBeLower)
  • The target of a released element cannot be changed (ReleasedElementTargetCannotBeChanged)
  • The cardinality of a released element cannot be changed (ReleasedElementCardinalityCannotBeChanged)
  • The ON condition of a released element cannot be changed (ReleasedElementOnConditionCannotBeChanged)
  • The keys condition of a released element cannot be changed (ReleasedElementKeysConditionCannotBeChanged)
  • Enabling journal mode and changing entity in same cycle is not allowed (ReleasedEntityJournalModeAndEntityChangeIsNotAllowed)
  • Changes to the index of a released entity are not allowed (ReleasedEntityIndexChangeIsNotAllowed)

Compatible Changes:

  • Changes to the index of a released entity must be whitelisted (ReleasedEntityIndexChangeIsNotWhitelisted)
  • Extending the type of a released element requires whitelisting (ReleasedElementTypeExtensionIsNotWhitelisted)
  • Extending the scale or precision of a released element requires whitelisting (ReleasedElementScalePrecisionExtensionIsNotWhitelisted)
  • Changing the type of a released element to a compatible type requires whitelisting (ReleasedElementTypeChangeIsNotWhitelisted)
  • The new entity is not whitelisted (NewEntityIsNotWhitelisted)
  • The new entity element is not whitelisted (NewEntityElementIsNotWhitelisted)
  • A new entity element must have a default value if it is not nullable (NewEntityElementNotNullableDefault)
  • The new entity index is not whitelisted (NewEntityIndexIsNotWhitelisted)
Update Production CSN

The Production CSN can be updated when no migration check errors occur:

  • Build CSN: cds build --production
  • Update Production CSN: cdsmc -u

Production CSN MUST be added to version control.

Whitelisting

Maintain the whitelist extension file migration-extension-whitelist.json for compatible changes:

  • Whitelist Entity:

    {
      "definitions": {
        "test.Test": {}
      }
    }
  • Whitelist Entity Element:

    {
      "definitions": {
        "test.Test": {
          "elements": {
            "value": {}
          }
        }
      }
    }
Admin Mode
Incompatible Changes

Accepted incompatible changes can be acknowledged and will not be reported as error anymore:

  • Get current admin hash for incompatible changes: cdsmc -a
  • Set admin hash in env: cds.migrationCheck.adminHash
Freeze Persistence

CDS persistence can be (temporarily) frozen to prevent any changes (also compatible) to the persistence model:

  • Activate/Deactivate persistence freeze in env cds.migrationCheck.freeze
  • Freeze/Unfreeze Persistence: cdsmc -u -a
    • File ./csn-prod.freeze is created to indicate that persistence is frozen
Pipeline

Migration check can be used in a pipeline (e.g. part of Pull Request voter) to ensure that incompatible changes are not introduced:

  • Build & Check: cds build --production && cdsmc
  • Update Production CSN: cds build --production && cdsmc -u

Production CSN MUST be added to version control.

Rate Limiting

The rate limiting allows to limit the number of requests per service and tenant.

Usage
@cds.rateLimiting
service BookshopService {
  entity Books @readonly   as projection on test.Books;
}
Annotations
  • @cds.rateLimiting: Boolean: Activate rate limit for service
  • @cds.rateLimiting.maxConcurrent: Number: Maximum number of concurrent requests per service and tenant
  • @cds.rateLimiting.maxInWindow: Number: Maximum number of requests in defined window per service and tenant
  • @cds.rateLimiting.window: Number: Window length in milliseconds
Options

Options can be passed to migration check via CDS environment via cds.rateLimiting section:

  • plugin: Boolean: Rate limiting is activated via CDS plugin for annotated services. Default is true
  • maxConcurrent: Boolean: Maximum number of concurrent requests per service and tenant. Default is 3
  • maxWindow: Boolean: Maximum number of requests in defined window per service and tenant. Default is 10000 (10 seconds)
  • window: Boolean: Window length in milliseconds. Default is 3600000 (1 hour)
  • retry: Boolean: Default is 5
Redis

Redis options can be provided in CDS env as follows:

{
  "cds": {
    "requires": {
      "redis-rateLimiting": {
        "vcap": {
          "tag": "my-redis"
        },
        "options": {}
      }
    }
  }
}

For shared redis configuration Redis service name can be provided in CDS env as follows:

{
  "cds": {
    "requires": {
      "redis-rateLimiting": false,
      "redis": {
        "vcap": {
          "tag": "my-redis"
        },
        "options": {}
      }
    }
  }
}
Test

Rate limiting is inactive per default for tests (test profile). It can be enabled via CDS env:

{
  "cds": {
    "rateLimiting": {
      "[test]": {
        "plugin": true
      }
    }
  }
}

Redis Client

A Redis Client broker is provided to connect to Redis service.

Usage
Main default singleton
const { RedisClient } = require("@cap-js-community/common");
const mainClient = await RedisClient.create().createMainClientAndConnect(options);
Main named singleton
const { RedisClient } = require("@cap-js-community/common");
const mainClient = await RedisClient.create("name").createMainClientAndConnect(options);
Custom named
const { RedisClient } = require("@cap-js-community/common");
const client = await new RedisClient("name").createClientAndConnect(options);
Options

Options can be passed to Redis client via CDS environment via cds.redis section: Redis options can be provided in CDS env as follows:

{
  "cds": {
    "requires": {
      "redis": {
        "vcap": {
          "tag": "redis-cache"
        },
        "options": {}
      }
    }
  }
}

Specific Redis options for a custom name can be established as follows:

{
  "cds": {
    "requires": {
      "redis-customName": {
        "vcap": {
          "tag": "redis-cache"
        },
        "options": {}
      }
    }
  }
}
const { RedisClient } = require("@cap-js-community/common");
const mainClient = await RedisClient.create("customName").createMainClientAndConnect(options);

In addition, options can be passed to Redis client during creation via options parameter:

const { RedisClient } = require("@cap-js-community/common");
const mainClient = await RedisClient.create().createMainClientAndConnect(options);

For details on Redis createClient configuration options see Redis Client Configuration.

Redis Sentinel Support

Redis Sentinel mode is activated when credentials.sentinel_nodes is present and takes priority over cluster mode.

{
  "cds": {
    "requires": {
      "redis": {
        "credentials": {
          "sentinel_nodes": [
            { "host": "sentinel1.example.com", "port": 26379 },
            { "host": "sentinel2.example.com", "port": 26379 }
          ],
          "master_name": "myprimary"
        }
      }
    }
  }
}

The master_name identifies which Redis master the Sentinels monitor. Alternatively, the master name can be provided as a URI fragment in credentials.uri (e.g., redis://host#myprimary). If sentinel_nodes[].port is omitted, it defaults to 26379. Both host and hostname are accepted for node addresses.

Local HTML5 Repository

Developing HTML5 apps against hybrid environments including Approuter component requires a local HTML5 repository to directly test the changes to UI5 applications without deployment to a remote HTML5 repository.

Usage
  • Create a default-env.json in approuter folder, including a valid HTML5 repository configuration from deployment environment:
{
  "VCAP_SERVICES": {
    "html5-apps-repo": [
      {
        "credentials": {
          "uri": "https://html5-apps-repo-rt.cfapps.sap.hana.ondemand.com"
        }
      }
    ]
  }
}
  • Call command: local-html5-repo (shortcut: lh5r)

All apps and libraries located in app folder and containing an ui5.yaml are redirected to local HTML5 repository served from local file system. All other requests are proxied to the remote HTML5 repository.

CDM Builder

The CDM Builder allows to build a CDM file cdm.json from apps, roles and portal content:

  • Build CDM: cdm-build

The generated CDM is (per default) generated at app/cdm.json.

Options:
  • -f, --force: Overwrite existing CDM file. Default is false
  • -t, --target: Specify target path for generated CDM file. Default is app/cdm.json

Support, Feedback, Contributing

This project is open to feature requests/suggestions, bug reports etc. via GitHub issues. Contribution and feedback are encouraged and always welcome. For more information about how to contribute, the project structure, as well as additional contribution information, see our Contribution Guidelines.

Code of Conduct

We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone. By participating in this project, you agree to abide by its Code of Conduct at all times.

Licensing

Copyright 2025 SAP SE or an SAP affiliate company and common contributors. Please see our LICENSE for copyright and license information. Detailed information including third-party components and their licensing/copyright information is available via the REUSE tool.

Apache-2.0, read

History

Latest

v0.5.5

Fixes 1

Notes
Fixed
  • Rate limiting: Add mcp and graphql as external protocol
  1. v0.5.4

    Fixes 1

    Notes
    Fixed
    • Fix local HTML5 repo for https
  2. v0.5.3

    Fixes 1

    Notes
    Fixed
    • Further rate limiting stability improvements
  3. v0.5.2

    Fixes 2

    Notes
    Fixed
    • Improve rate limiting for multi-instance
    • No fallback to local version for redis store
  4. v0.5.1

    Fixes 2

    Notes
    Fixed
    • Migrate jest to vitest
    • Dependencies
  5. v0.5.0

    Features 1, Fixes 1

    Notes
    Added
    • CDS 10
    Fixed
    • Fix CDM app navigation
  6. v0.4.0

    Features 2

    Notes
    Added
    • Redis Sentinel Support
    • Open dependencies to allow Redis 5
  7. v0.3.5

    Features 1, Fixes 1

    Notes
    Fixed
    • Express 5 (with CDS 9.7)
    Added
    • CDM Builder
  8. v0.3.4

    Fixes 1

    Notes
    Fixed
    • Fix journal migration check for draft entities
  9. v0.3.3

    Features 1, Fixes 1

    Notes
    Added
    • Local HTML5 repository
    Fixed
    • Fix rate limiting redis env
  10. v0.3.2

    Fixes 1

    Notes
    Fixed
    • Rework redis client
  11. v0.3.1

    Fixes 1

    Notes
    Fixed
    • Rework redis client
  12. v0.3.0

    Fixes 3

    Notes
    Fixed
    • Refactor replication cache
    • Change @cap-js/sqlite to dev dependency
    • Replication cache requires @cap-js/sqlite as project dependency (no dev dependency)
  13. v0.2.8

    Fixes 1

    Notes
    Fixed
    • Trusted publishing
  14. v0.2.7

    Fixes 1

    Notes
    Fixed
    • Trusted publishing
  15. v0.2.6

    Fixes 2

    Notes
    Fixed
    • Migration Check ReleasedElementCompatibleTypeChangeIsNotWhitelisted to allow compatible type changes
    • Admin tracking writes an admin changes file to keep track of incompatible changes as well
  16. v0.2.5

    Fixes 1

    Notes
    Fixed
    • Normalize newline character in hash calculation
  17. v0.2.4

    Fixes 3

    Notes
    Fixed
    • Multi-tenancy fixes
    • Improve reference detection
    • Deactivate TTL for negative value and static entities
  18. v0.2.3

    Fixes 1

    Notes
    Fixed
    • Improve reference detection
  19. v0.2.2

    Fixes 1

    Notes
    Fixed
    • Improve reference detection for aliases
  20. v0.2.1

    Fixes 2

    Notes
    Fixed
    • Improve reference detection
    • Static non-tenant aware replication via cds.replicate.static
  21. v0.2.0

    Fixes 1

    Notes
    Fixed
    • CDS 9 compatibility
  22. v0.1.7

    Fixes 1

    Notes
    Fixed
    • Enabling journal mode and changing entity in same cycle is not allowed
  23. v0.1.6

    Fixes 1

    Notes
    Fixed
    • Redis 4
  24. v0.1.5

    Fixes 1

    Notes
    Fixed
    • Dependencies
  25. v0.1.4

    Fixes 1

    Notes
    Fixed
    • Improvements
  26. v0.1.3

    Fixes 1

    Notes
    Fixed
    • Redis client improvements
  27. v0.1.2

    Fixes 1

    Notes
    Fixed
    • Improvements
  28. v0.1.1

    Fixes 1

    Notes
    Fixed
    • Improvements
  29. v0.1.0

    Features 1

    Notes
    Added
    • Internal release
2,678downloads per week, npm
Weekly downloads for @cap-js-community/common26 complete calendar weeks from 2026-04-20 to 2026-10-18; the latest total is 2678.20 Apr – 26 Apr: 2,15827 Apr – 3 May: 2,4254 May – 10 May: 3,37511 May – 17 May: 2,64818 May – 24 May: 3,08425 May – 31 May: 3,1151 Jun – 7 Jun: 1,8008 Jun – 14 Jun: 2,50515 Jun – 21 Jun: 3,32922 Jun – 28 Jun: 2,87629 Jun – 5 Jul: 2,5166 Jul – 12 Jul: 3,02313 Jul – 19 Jul: 2,86520 Jul – 26 Jul: 2,92827 Jul – 2 Aug: 3,8713 Aug – 9 Aug: 4,61810 Aug – 16 Aug: 3,11117 Aug – 23 Aug: 4,49624 Aug – 30 Aug: 3,74031 Aug – 6 Sept: 3,7237 Sept – 13 Sept: 3,82914 Sept – 20 Sept: 4,99321 Sept – 27 Sept: 4,52228 Sept – 4 Oct: 4,6365 Oct – 11 Oct: 4,15612 Oct – 18 Oct: 2,678

Others providing23

Caching
  1. Redis on SAP BTP, hyperscaler optionManaged Redis from the hyperscaler via a BTP service binding
  2. cds-cachingCAP caching plugin for query results and remote service responses
  3. cds-data-federationData federation for CAP via delegation, caching and replication
  4. @sap/cdsCAP Node.js runtime
Data federation
  1. cds-federation-synonymsCAP-to-CAP data federation over SAP HANA synonyms
  2. cds-data-federationData federation for CAP via delegation, caching and replication
  3. cds-data-pipelineScheduled READ, MAP, WRITE pipelines between CAP services
  4. @sap/cdsCAP Node.js runtime
Schema evolution
  1. cds-dbmDelta deployment and migrations for CAP database adapters
  2. @quadrio/cds-dbmFork of cds-dbm with deploy, load, diff and drop tasks
  3. @sap/cds-mtxsMultitenancy, tenant provisioning and extensibility for CAP
  4. @sap/cdsCAP Node.js runtime
  5. @sap/hdi-deployNode.js deployer for SAP HANA Deployment Infrastructure containers
Rate limiting
  1. API ManagementAPI proxies with security and traffic policies and Developer Hub
  2. cds-rate-limitRate-limit pattern for CAP Node.js applications
Local development
  1. vite-plugin-cdsServes a Vite app through cds watch and imports .cds files
  2. com.sap.cds:cds-feature-dev-dashboardBrowser dashboard for a running CAP Java service during development
  3. com.sap.cds:cds-maven-pluginMaven plugin running CDS build steps in a CAP Java project
  4. @neoimpulse/cap-js-bootstrapCLI starting several CAP services and an AppRouter locally together
  5. @sang2x/captoolsCLI of CAP development tools for Cloud Foundry workflows
  6. @sap/ams-devCompiler from AMS DCL policies to DCN for local runs and tests
  7. @sap/cds-dkCommand line client and development toolkit for CAP
  8. @sap/cdsCAP Node.js runtime
  9. dev-approuterDev-time wrapper for the SAP Application Router
Metadata publishing
  1. com.sap.cds:cds-feature-ordGenerates Open Resource Discovery documents from a CAP Java model
  2. @cap-js/asyncapiExports AsyncAPI documents for a CAP service's events
  3. @cap-js/ordGenerates Open Resource Discovery documents from a CAP model
  4. @sap/cdsCAP Node.js runtime

Details

Sources5
npm registrydiscovered herechecked
GitHub APIdiscovered here, cap-js-communitychecked
npm registry, @cap-js-community/commonversion, releases, installschecked
github.com/git+https://github.com/cap-js-community/common.gittree, pushes, contributors, CIchecked
README.mdquoted, and what the entry declareschecked

Sources are graph entities: the same page may back several entries, and an unreachable source flags every row that rests on it.

Compatibility and provenance
runtimesnode
latestv0.5.5
first release
releases and cadence30, ~27d median
discovered vianpm registry, GitHub API · cap-js-community
first seen in the atlas
ecosystem and domaincap, operations-and-runtime
Contributors2

From the repository’s contributor list, .

History in the atlas3
  1. What the local repository serves and what it proxies, the two conditions the README states, three quoted sources and the comparison value for the part of the local stack it starts.
  2. Sourced cache layer, freshness and tenant configuration facets; explicit SQLite production dependency
  3. First seen.
For your agent
Ref
artifact:cap-js-community-common
JSON
/artifacts/cap-js-community-common.json
MCP
Connecting an agent