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":"in print · rated 4.5+","rules":[{"id":"in-print","rule":{"config":true,"field":"isInPrint","type":"BooleanRule"}},{"id":"has-rating","rule":{"field":"averageRating","type":"ExistsRule"}},{"id":"rating","rule":{"config":{"max":5,"min":4.5},"field":"averageRating","type":"RangeRule"}}],"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