Skip to content

feat: adding isomorphic provider to bridge client and server#1218

Merged
joker23 merged 12 commits intomainfrom
skz/sdk-2043/rsc-bootstrap
Apr 1, 2026
Merged

feat: adding isomorphic provider to bridge client and server#1218
joker23 merged 12 commits intomainfrom
skz/sdk-2043/rsc-bootstrap

Conversation

@joker23
Copy link
Copy Markdown
Contributor

@joker23 joker23 commented Mar 24, 2026

SDK-1946

  • modify the server-only example to demonstrate how to use the isomorphic provider
  • modify the bundling so client and server can still bundle correcly with isomorphic components
  • refactor the client side NOOP client to be able to execute well during SSR

Note

Medium Risk
Adds new server/client bridge components and changes SSR/noop-client initialization semantics, which can affect hydration and initial flag state in React Server Components apps. Also adjusts build configuration to avoid bundling issues between server and client entrypoints.

Overview
Introduces an isomorphic provider path for React Server Components: LDIsomorphicProvider (server component) computes bootstrap data via session.allFlagsState({ clientSideOnly: true }).toJSON() and renders a new 'use client' LDIsomorphicClientProvider that initializes the browser SDK with that bootstrap.

Updates the SSR createNoopClient stub to always report getInitializationState() as 'initializing' (while still treating presence of bootstrap as isReady()), and adds coverage for the new providers plus updated noop-client expectations.

Refreshes the server-only example and migration docs to demonstrate server-evaluated flag bootstrap (adds required LAUNCHDARKLY_CLIENT_SIDE_ID, a client component using useBoolVariation, and updated e2e assertion), and tweaks packaging (tsup/tsconfig path mapping + server bundle external) so the server entry can reference the client package without bundling conflicts.

Written by Cursor Bugbot for commit 9fa80fd. This will update automatically on new commits. Configure here.


Open with Devin

@github-actions
Copy link
Copy Markdown
Contributor

@launchdarkly/js-sdk-common size report
This is the brotli compressed size of the ESM build.
Compressed size: 25661 bytes
Compressed size limit: 29000
Uncompressed size: 126143 bytes

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 24, 2026

@launchdarkly/browser size report
This is the brotli compressed size of the ESM build.
Compressed size: 179253 bytes
Compressed size limit: 200000
Uncompressed size: 828804 bytes

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 24, 2026

@launchdarkly/js-client-sdk size report
This is the brotli compressed size of the ESM build.
Compressed size: 31446 bytes
Compressed size limit: 34000
Uncompressed size: 111621 bytes

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 24, 2026

@launchdarkly/js-client-sdk-common size report
This is the brotli compressed size of the ESM build.
Compressed size: 37015 bytes
Compressed size limit: 38000
Uncompressed size: 202741 bytes

Comment thread packages/sdk/react/examples/server-only/app/BootstrapClient.tsx Outdated
Comment thread packages/sdk/react/examples/server-only/README.md Outdated
* We provided the optional bootstrap data that will be applied to the client-side SDK.
* Learn more about bootstrap data in the [LaunchDarkly documentation](https://launchdarkly.com/docs/sdk/features/bootstrapping).
*
* **NOTE:** The client will also ad-hoc evaluate the flags on the server-side from bootstrap data.
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thoughts on this?

Comment thread packages/sdk/react/src/client/index.ts Outdated
Comment thread packages/sdk/react/src/client/LDOptions.ts
Comment thread packages/sdk/react/temp_docs/MIGRATING.md
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In general, I think this example name should be changed to something like react-server-example. Might want to do this in a separate change since that could add a lot of distracting changes.

@joker23 joker23 force-pushed the skz/sdk-2043/rsc-bootstrap branch 6 times, most recently from 247bed3 to 4613301 Compare March 25, 2026 17:18
@joker23
Copy link
Copy Markdown
Contributor Author

joker23 commented Mar 25, 2026

@cursor review

cursor[bot]

This comment was marked as resolved.

@joker23 joker23 force-pushed the skz/sdk-2043/rsc-bootstrap branch 2 times, most recently from 8ae5305 to 2027d95 Compare March 25, 2026 17:36
* When provided, the client immediately uses these values before the first network
* response arrives — eliminating the flag-fetch waterfall on page load.
*/
bootstrap: unknown;
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The typing here is to be consistent with browser sdk

@joker23
Copy link
Copy Markdown
Contributor Author

joker23 commented Mar 25, 2026

@cursor review

cursor[bot]

This comment was marked as resolved.

@joker23 joker23 force-pushed the skz/sdk-2043/rsc-bootstrap branch 3 times, most recently from 153d31a to e79ea73 Compare March 30, 2026 18:48
@joker23 joker23 marked this pull request as ready for review March 31, 2026 20:56
@joker23 joker23 requested a review from a team as a code owner March 31, 2026 20:56
devin-ai-integration[bot]

This comment was marked as resolved.

cursor[bot]

This comment was marked as resolved.

devin-ai-integration[bot]

This comment was marked as resolved.

joker23 added 10 commits April 1, 2026 08:49
This commit will also:
- modify the server-only example to demonstrate how to use the isomorphic provider
- modify the bundling so client and server can still bundle correcly with isomorphic components
- refactor the client side NOOP client to be able to execute well during SSR
@joker23 joker23 force-pushed the skz/sdk-2043/rsc-bootstrap branch from 64013be to 71795a3 Compare April 1, 2026 13:49
@joker23 joker23 force-pushed the skz/sdk-2043/rsc-bootstrap branch from fc278c0 to 0f76c59 Compare April 1, 2026 15:52
Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Comment thread packages/sdk/react/examples/server-only/next.config.ts Outdated
@joker23 joker23 merged commit d766f39 into main Apr 1, 2026
43 checks passed
@joker23 joker23 deleted the skz/sdk-2043/rsc-bootstrap branch April 1, 2026 17:39
@github-actions github-actions Bot mentioned this pull request Apr 1, 2026
joker23 added a commit that referenced this pull request Apr 6, 2026
…ple` (#1237)

This PR address the comment on a previous PR
(#1218 (comment))


<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Low risk rename-only change that updates CI, workspace configuration,
and release metadata to point at the renamed example; main risk is
missed references breaking builds/tests.
> 
> **Overview**
> Renames the React Next.js RSC example from `server-only` to
`react-server-example` and updates all references to match (GitHub
Actions workflow job/Playwright install, Yarn workspace list, ESLint
ignore patterns, and examples README).
> 
> Adjusts release automation (`release-please-config.json`) and the
example package name so dependency bumping and CI continue to track the
renamed example, and updates `LDIsomorphicProvider` docs to reference
the new example name.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
b7c6461. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
joker23 pushed a commit that referenced this pull request Apr 14, 2026
🤖 I have created a release *beep* *boop*
---


<details><summary>akamai-edgeworker-sdk-common: 2.0.18</summary>

##
[2.0.18](akamai-edgeworker-sdk-common-v2.0.17...akamai-edgeworker-sdk-common-v2.0.18)
(2026-04-14)


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/js-server-sdk-common bumped from ^2.18.3 to ^2.18.4
</details>

<details><summary>akamai-server-base-sdk: 3.0.19</summary>

##
[3.0.19](akamai-server-base-sdk-v3.0.18...akamai-server-base-sdk-v3.0.19)
(2026-04-14)


### Dependencies

* The following workspace dependencies were updated
  * dependencies
* @launchdarkly/akamai-edgeworker-sdk-common bumped from ^2.0.17 to
^2.0.18
    * @launchdarkly/js-server-sdk-common bumped from ^2.18.3 to ^2.18.4
</details>

<details><summary>akamai-server-edgekv-sdk: 1.4.21</summary>

##
[1.4.21](akamai-server-edgekv-sdk-v1.4.20...akamai-server-edgekv-sdk-v1.4.21)
(2026-04-14)


### Dependencies

* The following workspace dependencies were updated
  * dependencies
* @launchdarkly/akamai-edgeworker-sdk-common bumped from ^2.0.17 to
^2.0.18
    * @launchdarkly/js-server-sdk-common bumped from ^2.18.3 to ^2.18.4
</details>

<details><summary>browser: 0.1.14</summary>

##
[0.1.14](browser-v0.1.13...browser-v0.1.14)
(2026-04-14)


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/js-client-sdk bumped from 4.4.1 to 4.5.0
</details>

<details><summary>browser-telemetry: 1.0.30</summary>

##
[1.0.30](browser-telemetry-v1.0.29...browser-telemetry-v1.0.30)
(2026-04-14)


### Dependencies

* The following workspace dependencies were updated
  * devDependencies
    * @launchdarkly/js-client-sdk bumped from 4.4.1 to 4.5.0
</details>

<details><summary>cloudflare-server-sdk: 2.7.18</summary>

##
[2.7.18](cloudflare-server-sdk-v2.7.17...cloudflare-server-sdk-v2.7.18)
(2026-04-14)


### Dependencies

* The following workspace dependencies were updated
  * dependencies
* @launchdarkly/js-server-sdk-common-edge bumped from 2.6.16 to 2.6.17
</details>

<details><summary>fastly-server-sdk: 0.2.10</summary>

##
[0.2.10](fastly-server-sdk-v0.2.9...fastly-server-sdk-v0.2.10)
(2026-04-14)


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/js-server-sdk-common bumped from 2.18.3 to 2.18.4
</details>

<details><summary>jest: 1.0.9</summary>

##
[1.0.9](jest-v1.0.8...jest-v1.0.9)
(2026-04-14)


### Dependencies

* The following workspace dependencies were updated
  * dependencies
* @launchdarkly/react-native-client-sdk bumped from ~10.15.1 to ~10.15.2
</details>

<details><summary>js-client-sdk: 4.5.0</summary>

##
[4.5.0](js-client-sdk-v4.4.1...js-client-sdk-v4.5.0)
(2026-04-14)


### Features

* add retry logic to FDv2 polling initializer
([#1230](#1230))
([fe8bd37](fe8bd37))
* expose setConnectionMode on browser SDK
([#1232](#1232))
([9019808](9019808))
* FDv2 contract test wiring, suppressions, and example app, cleanup
configuration exports.
([#1225](#1225))
([c67c5f6](c67c5f6))
* wire FDv2 data manager into BrowserClient
([#1222](#1222))
([0b855f0](0b855f0))


### Bug Fixes

* FDv2 - Support dynamic reconnect URL for streaming. Handle 'error'
event types for SSE.
([#1252](#1252))
([4ef6cdd](4ef6cdd))


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/js-client-sdk-common bumped from 1.23.0 to 1.24.0
</details>

<details><summary>js-client-sdk-common: 1.24.0</summary>

##
[1.24.0](js-client-sdk-common-v1.23.0...js-client-sdk-common-v1.24.0)
(2026-04-14)


### Features

* add retry logic to FDv2 polling initializer
([#1230](#1230))
([fe8bd37](fe8bd37))
* expose setConnectionMode on browser SDK
([#1232](#1232))
([9019808](9019808))
* FDv2 contract test wiring, suppressions, and example app, cleanup
configuration exports.
([#1225](#1225))
([c67c5f6](c67c5f6))
* FDv2DataManagerBase for mode switching and data source lifecycle
([#1210](#1210))
([8f8051c](8f8051c))
* support per-mode FDv1 fallback configuration
([#1246](#1246))
([9956bce](9956bce))
* wire FDv2 data manager into BrowserClient
([#1222](#1222))
([0b855f0](0b855f0))


### Bug Fixes

* FDv2 - Support dynamic reconnect URL for streaming. Handle 'error'
event types for SSE.
([#1252](#1252))
([4ef6cdd](4ef6cdd))


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/js-sdk-common bumped from 2.24.0 to 2.24.1
</details>

<details><summary>js-sdk-common: 2.24.1</summary>

##
[2.24.1](js-sdk-common-v2.24.0...js-sdk-common-v2.24.1)
(2026-04-14)


### Bug Fixes

* FDv2 - Support dynamic reconnect URL for streaming. Handle 'error'
event types for SSE.
([#1252](#1252))
([4ef6cdd](4ef6cdd))
</details>

<details><summary>js-server-sdk-common: 2.18.4</summary>

##
[2.18.4](js-server-sdk-common-v2.18.3...js-server-sdk-common-v2.18.4)
(2026-04-14)


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/js-sdk-common bumped from 2.24.0 to 2.24.1
</details>

<details><summary>js-server-sdk-common-edge: 2.6.17</summary>

##
[2.6.17](js-server-sdk-common-edge-v2.6.16...js-server-sdk-common-edge-v2.6.17)
(2026-04-14)


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/js-server-sdk-common bumped from 2.18.3 to 2.18.4
</details>

<details><summary>node-server-sdk: 9.10.11</summary>

##
[9.10.11](node-server-sdk-v9.10.10...node-server-sdk-v9.10.11)
(2026-04-14)


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/js-server-sdk-common bumped from 2.18.3 to 2.18.4
</details>

<details><summary>node-server-sdk-dynamodb: 6.2.23</summary>

##
[6.2.23](node-server-sdk-dynamodb-v6.2.22...node-server-sdk-dynamodb-v6.2.23)
(2026-04-14)


### Dependencies

* The following workspace dependencies were updated
  * devDependencies
    * @launchdarkly/node-server-sdk bumped from 9.10.10 to 9.10.11
  * peerDependencies
    * @launchdarkly/node-server-sdk bumped from >=9.4.3 to >=9.10.11
</details>

<details><summary>node-server-sdk-otel: 1.3.11</summary>

##
[1.3.11](node-server-sdk-otel-v1.3.10...node-server-sdk-otel-v1.3.11)
(2026-04-14)


### Dependencies

* The following workspace dependencies were updated
  * devDependencies
    * @launchdarkly/node-server-sdk bumped from 9.10.10 to 9.10.11
  * peerDependencies
    * @launchdarkly/node-server-sdk bumped from >=9.4.3 to >=9.10.11
</details>

<details><summary>node-server-sdk-redis: 4.2.23</summary>

##
[4.2.23](node-server-sdk-redis-v4.2.22...node-server-sdk-redis-v4.2.23)
(2026-04-14)


### Dependencies

* The following workspace dependencies were updated
  * devDependencies
    * @launchdarkly/node-server-sdk bumped from 9.10.10 to 9.10.11
  * peerDependencies
    * @launchdarkly/node-server-sdk bumped from >=9.4.3 to >=9.10.11
</details>

<details><summary>react-native-client-sdk: 10.15.2</summary>

##
[10.15.2](react-native-client-sdk-v10.15.1...react-native-client-sdk-v10.15.2)
(2026-04-14)


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/js-client-sdk-common bumped from 1.23.0 to 1.24.0
</details>

<details><summary>react-sdk: 0.2.0</summary>

##
[0.2.0](react-sdk-v0.1.1...react-sdk-v0.2.0)
(2026-04-14)


### Features

* adding isomorphic provider to bridge client and server
([#1218](#1218))
([d766f39](d766f39))
* support static client component rendering
([#1227](#1227))
([6b3a100](6b3a100))


### Bug Fixes

* adding wrapper name for react client
([#1199](#1199))
([f92a8f9](f92a8f9))
* **deps:** update dependency next to v16.2.3 [security]
([#1263](#1263))
([10f582a](10f582a))
* **react-sdk:** double evaluation on client side init
([#1229](#1229))
([6a4c42f](6a4c42f))


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/js-client-sdk bumped from ^4.4.1 to ^4.5.0
    * @launchdarkly/js-server-sdk-common bumped from ^2.18.3 to ^2.18.4
</details>

<details><summary>server-sdk-ai: 0.16.8</summary>

##
[0.16.8](server-sdk-ai-v0.16.7...server-sdk-ai-v0.16.8)
(2026-04-14)


### Dependencies

* The following workspace dependencies were updated
  * devDependencies
    * @launchdarkly/js-server-sdk-common bumped from 2.18.3 to 2.18.4
  * peerDependencies
    * @launchdarkly/js-server-sdk-common bumped from 2.x to 2.18.4
</details>

<details><summary>server-sdk-ai-langchain: 0.5.4</summary>

##
[0.5.4](server-sdk-ai-langchain-v0.5.3...server-sdk-ai-langchain-v0.5.4)
(2026-04-14)


### Dependencies

* The following workspace dependencies were updated
  * devDependencies
    * @launchdarkly/server-sdk-ai bumped from ^0.16.7 to ^0.16.8
  * peerDependencies
* @launchdarkly/server-sdk-ai bumped from ^0.15.0 || ^0.16.0 to ^0.16.8
</details>

<details><summary>server-sdk-ai-openai: 0.5.4</summary>

##
[0.5.4](server-sdk-ai-openai-v0.5.3...server-sdk-ai-openai-v0.5.4)
(2026-04-14)


### Dependencies

* The following workspace dependencies were updated
  * devDependencies
    * @launchdarkly/js-server-sdk-common bumped from 2.18.3 to 2.18.4
    * @launchdarkly/server-sdk-ai bumped from ^0.16.7 to ^0.16.8
  * peerDependencies
* @launchdarkly/server-sdk-ai bumped from ^0.15.0 || ^0.16.0 to ^0.16.8
</details>

<details><summary>server-sdk-ai-vercel: 0.5.4</summary>

##
[0.5.4](server-sdk-ai-vercel-v0.5.3...server-sdk-ai-vercel-v0.5.4)
(2026-04-14)


### Dependencies

* The following workspace dependencies were updated
  * devDependencies
    * @launchdarkly/server-sdk-ai bumped from ^0.16.7 to ^0.16.8
  * peerDependencies
* @launchdarkly/server-sdk-ai bumped from ^0.15.0 || ^0.16.0 to ^0.16.8
</details>

<details><summary>shopify-oxygen-sdk: 0.1.8</summary>

##
[0.1.8](shopify-oxygen-sdk-v0.1.7...shopify-oxygen-sdk-v0.1.8)
(2026-04-14)


### Bug Fixes

* **shopify:** standardizing the pre-release banner
([#1268](#1268))
([82adddb](82adddb))


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/js-server-sdk-common bumped from 2.18.3 to 2.18.4
</details>

<details><summary>vercel-server-sdk: 1.3.43</summary>

##
[1.3.43](vercel-server-sdk-v1.3.42...vercel-server-sdk-v1.3.43)
(2026-04-14)


### Dependencies

* The following workspace dependencies were updated
  * dependencies
* @launchdarkly/js-server-sdk-common-edge bumped from 2.6.16 to 2.6.17
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Primarily automated version/changelog updates across many packages;
the only functional change in-code is updating embedded SDK/version
identifiers, which is low risk but could affect user-agent/wrapper
reporting.
> 
> **Overview**
> Bumps versions and publishes release metadata across the monorepo
(manifest, `package.json`s, and changelogs), including `js-client-sdk`
`4.5.0`, `react-sdk` `0.2.0`, and multiple server/edge/provider
packages.
> 
> Updates embedded `x-release-please-version` constants used for SDK
identification (e.g., `BrowserInfo`, `NodeInfo`, edge platform info) and
updates the React client default `wrapperVersion` to `0.2.0` for
telemetry/user-agent reporting.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
a09a298. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants