Engine portability
The same filter state, in all 6 stacks
Every vertical reads its state from the same ?f parameter, through a serializer whose
decode detects its own format tag. A link built here opens in any of them — React, Vue, Svelte,
Angular, or no framework at all — and reproduces the identical result set.
h~{"label":"condos · active · under $750k","rules":[{"id":"price","rule":{"config":{"max":750000,"min":0},"field":"priceUsd","type":"RangeRule"}},{"id":"property-type","rule":{"config":{"set":["condo"]},"field":"propertyType","type":"InSetRule"}},{"id":"status","rule":{"config":{"set":["active"]},"field":"status","type":"InSetRule"}}],"version":1}- React RTK React 19
Adds the optional Redux mirror via redux-bridge — the engine stays the source of truth.
@filter-enginez/react-signalssignals - React plain React 19
The same app with no store library at all, proving the Redux mirror is optional.
@filter-enginez/react-signalssignals - SvelteKit SvelteKit 5
Runs the isomorphic core in SvelteKit’s own server tier, with a zero-JS SSR fallback.
@filter-enginez/svelte-signalssignals - Vue Vue 3
Holds the engine in shallowRef — Vue’s deep proxy would break its signals.
@filter-enginez/vue-signalssignals - Angular Angular 22
Zoneless and standalone; consumes the engine’s Observables natively, so the binding is DI only.
@filter-enginez/angular-rxjsrxjs - Vanilla None
/books goes through reactive-signals, /books-raw through the bare core — the pair shows what the adapter buys.
no binding — bare corenone
Links are full navigations by design: four of the six hydrate ?f only at mount, so a
client-side transition would leave their engines untouched. Back to the dataset hub