Readme · Guides · Reference · Contributing
The Optimization SDK Suite is pre-release (alpha). Breaking changes can be published at any time.
This is a reference implementation for the Optimization Node SDK and is part of the Contentful Optimization SDK Suite.
Use this implementation when you need a minimal server-rendered example for
@contentful/optimization-node. It demonstrates request-scoped Experience API options, SSR-safe
entry resolution, merge-tag rendering, profile-aware event calls, and local mock API usage.
The server creates one stateless Node SDK instance at module load and passes request-specific
options directly to stateless event methods inside each incoming request handler. Because the
application explicitly decides when to call the Node SDK, this app passes consent: true, so
emitted Node events are labelled consented.
Cache only raw Contentful entries in SSR flows. Do not mutate shared cached entries during request rendering, and do not share merge-tag-rendered output across users.
This app defines one APP_LOCALE, passes it to forRequest({ locale: APP_LOCALE }), uses it in
event context, and passes it directly to Contentful CDA fetches. Raw entry cache keys include the
application locale so request-specific entry data cannot drift. Do not use contentful.js
withAllLocales or raw CDA locale=*; SDK entry resolution expects direct single-locale fields
such as fields.nt_experiences and fields.nt_variants. See
Locale handling in the Optimization SDK Suite
for the broader locale model and
Entry personalization and variant resolution
for the entry contract.
.nvmrc)Run all steps from the monorepo root.
Install pnpm packages:
pnpm install
Build the local package tarballs consumed by implementations:
pnpm build:pkgs
Install this implementation so its local @contentful/* dependencies resolve from pkgs/:
pnpm implementation:run -- node-sdk implementation:install
Create the local .env file if it does not already exist:
test -f implementations/node-sdk/.env || cp implementations/node-sdk/.env.example implementations/node-sdk/.env
The .env.example values are valid only against the mock server implementation. To test the
implementation against a live server environment, see the
mocks package for information on how to set up Contentful space with
test data.
Run these commands from the monorepo root.
Start servers:
pnpm implementation:run -- node-sdk serve
Stop servers:
pnpm implementation:run -- node-sdk serve:stop
Run E2E:
pnpm test:e2e:node-sdk
The application can be accessed via Web browser at http://localhost:3000. See
implementations/node-sdk/package.json for lower-level local commands.
E2E tests are run using Playwright.
Install implementation dependencies, browser binaries, and system dependencies:
pnpm setup:e2e:node-sdk
Run the E2E test suite:
pnpm test:e2e:node-sdk
The tests can alternatively be run using Playwright's GUI:
pnpm implementation:run -- node-sdk test:e2e:ui