Pennantportfolio demo

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/pennant

Browser + 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/pennant

Laravel service provider auto-registers; `@pennant` Blade directive + `Pennant` facade. PHP 8.3+.

View source ↗

Python / Django / FastAPI

pip install pennant

Django 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#