Splitstreamportfolio demo

SDKs

Five SDK packages in v0.1 — TypeScript, React, PHP (Laravel-ready), Python (Django + FastAPI), and the growth umbrella. Every SDK that ships a port of the bucketing function round-trips the same corpus in CI. Drift is a build failure.

@philiprehberger/splitstream

Source ↗

TypeScript core client. Sticky-assignment cache, buffered tracking, runs in Node or the browser. Pure-TS SHA-256 keeps bucket() synchronous everywhere.

npm install @philiprehberger/splitstream
Bundle: 11.6 KB ESMTests: 11 vitest tests · bucketing corpus drift catcher

@philiprehberger/splitstream-react

Source ↗

React adapter — SplitstreamProvider + useExperiment hook with per-experiment subscription (changing one experiment’s variant doesn’t re-render the others).

npm install @philiprehberger/splitstream-react
Bundle: 1.4 KB ESMTests: typecheck-clean, peer dep on react>=18

@philiprehberger/growth

Source ↗

Umbrella for Pennant + Splitstream. Reads the Pennant kill-switch flag, gates Splitstream.assign() if on. Same five-line shape on both docs sites.

npm install @philiprehberger/growth
Bundle: 3.6 KB ESM + /react 0.6 KBTests: 9 vitest tests

philiprehberger/splitstream (Packagist)

Source ↗

PHP SDK with Laravel service provider, Splitstream facade, @experiment Blade directive. Session-backed sticky cache via LaravelSessionStorage.

composer require philiprehberger/splitstream
Bundle: Guzzle-backed; ext-intl + ext-curlTests: 9 PHPUnit tests, 332 assertions

splitstream-sdk (PyPI)

Source ↗

Python SDK with optional Django middleware and FastAPI dependency factory. Thread-safe via threading.Lock. Context-manager support.

pip install splitstream-sdk
Bundle: httpx-backed; pure PythonTests: 10 pytest tests

v2 SDK roadmap

Vue 3, Svelte, Go, and Mobile (iOS / Android) SDKs are deferred to v2 — same posture as Pennant. The bucketing corpus is the machine-checkable contract; whichever language ports next inherits it.