SDKs
Each implementation ships its own evaluator + bucketing function. The cross-implementation drift corpus at tests/corpus/rules.json runs through all of them in CI — if any implementation disagrees with the server, CI fails on every implementation simultaneously.
TypeScript / Node
npm install @philiprehberger/pennantBrowser + Node 22+. SSE primary, polling fallback, localStorage persistence.
View source ↗React
npm install @philiprehberger/pennant @philiprehberger/pennant-react`useBool`/`useString`/`useNumber`/`useJson` hooks with selective re-render via `useSyncExternalStore`.
View source ↗PHP / Laravel
composer require philiprehberger/pennantLaravel service provider auto-registers; `@pennant` Blade directive + `Pennant` facade. PHP 8.3+.
View source ↗Python / Django / FastAPI
pip install pennantDjango middleware + `flag_required` decorator; FastAPI dependency. Python 3.10+.
View source ↗v2 SDKs — open ports
These are next, gated on buyer signal. Each follows the same shape — port the bucketing function first, then the rule evaluator, then the client. The corpus is the contract; the rest is mechanical.
- Vue 3 composable
- Svelte store
- Go module
- Ruby gem
- Java / Kotlin
- iOS / Swift
- .NET / C#