Readme · Guides · Reference · Contributing
Warning
The Optimization SDK Suite is pre-release (alpha). Breaking changes can be published at any time.
This is a reference implementation using both the Optimization Node SDK and Optimization Web SDK, and is part of the Contentful Optimization SDK Suite.
On the server side, the stateless Node SDK is created once at module load and each request passes its request-scoped options directly to stateless event methods.
The goal of this reference implementation is to illustrate the usage of cookie-based communication in both the Node and Web SDKs, which is an important component of many server-side/client-side hybrid SSR and ESR solutions.
Note
This hybrid architecture allows more cache flexibility when personalization is deferred to browser code. If the server embeds personalized output or profile-derived values, treat that response as personalized and avoid shared caching unless you vary on all relevant inputs.
Use this implementation when you need a hybrid SSR/browser example. It demonstrates a stateless Node SDK server flow, a stateful Web SDK browser flow, cookie-based profile continuity between them, and local mock API usage for end-to-end validation.
- Node.js >= 20.19.0 (24.13.0 recommended to match
.nvmrc) - pnpm 10.x
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 frompkgs/:pnpm implementation:run -- node-sdk+web-sdk implementation:install
-
Configure the environment in a
.envfile inimplementations/node-sdk+web-sdkbased on the.env.exampleincluded file. The file is pre-populated with values that 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+web-sdk serve
-
Stop servers:
pnpm implementation:run -- node-sdk+web-sdk serve:stop
-
Run E2E:
pnpm test:e2e:node-sdk+web-sdk
The application can be accessed via Web browser at http://localhost:3000. See
implementations/node-sdk+web-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+web-sdk
-
Run the E2E test suite:
pnpm test:e2e:node-sdk+web-sdk
The tests can alternatively be run using Playwright's GUI:
pnpm implementation:run -- node-sdk+web-sdk test:e2e:ui
- @contentful/optimization-node - Node SDK package
- @contentful/optimization-web - Web SDK package
- Node SSR Only - Server-only reference implementation
- Web Vanilla - Browser-only reference implementation