FAQ & Non-Goals
Frequently asked questions
Is Kin Store production-ready?
The core API (createStore, .use(), derive), the official plugins, and
the React bindings are all covered by tests that run on every publish. That
said, the project is young: small community, short track record. Weigh those
as real inputs to your own risk assessment, not something the docs will talk
you out of.
Does it work outside React?
@kintools/store-core and @kintools/store-plugins have zero framework
dependency: a store is a plain value with get/set/merge/subscribe,
usable from any JS/TS environment (vanilla, a framework's own reactivity, a
worker, a Node/Deno backend). @kintools/store-react is the only official
framework binding published today.
Is there official Vue, Svelte, or Solid support?
Not today. Nothing in the architecture is React-specific (useStore is a
thin useSyncExternalStore wrapper), so a similar binding for another
framework is plausible future work, but no such package exists or is
published yet. subscribe is plain enough to wire into another framework's
reactivity by hand in the meantime.
Does it work with SSR / Next.js?
See the Next.js example. SSR mainly changes two
things: where the store instance lives (constructed per-request or via a
provider, not a module-level singleton shared across requests) and when
persist is allowed to touch localStorage (skipped on the server, hydrated
explicitly on the client).
Is there a DevTools integration?
The official devtools plugin connects a store to
the Redux DevTools Extension for state inspection, time-travel via
jump-to-state, and reset/commit/rollback. It's opt-in like every other
plugin; a store that never registers it carries no devtools code.
Can methods be async?
Yes. A method is just a function with full access to get/set/merge via
this. There's no separate synchronous-only concept it needs to route through
first; an async fetchTodos(): Promise<void> method can await and then call
this.set/this.merge once the result is ready.
How does Kin Store handle server state, caching, and refetching?
It doesn't, on purpose. createStore (with or without .use()) models
state your client owns; server-owned data (cached responses, request dedup,
background refetch) is TanStack Query's job, not Kin Store's. See the
TanStack Query examples for two ways to split the two:
client state as one store with methods, or one createStore per field.
Does persist or broadcast handle conflict resolution for concurrent edits?
No. persist writes state to storage and reads it back; broadcast mirrors
state across tabs with last-write-wins by wall-clock time, so if two tabs
change state within the same millisecond, one change is silently dropped.
Neither merges concurrent edits. For state that genuinely needs that
(real-time collaborative editing), reach for a CRDT library instead.
What's the bundle size?
createStore is 592 B gzipped and derive is 460 B, each measured
independently since you only pay for what you import. Plugins and the React
bindings add their own (small) cost on top only when imported.
Where do I ask a question or report a bug?
GitHub Discussions for questions and design feedback, Issues for bugs.
Non-goals
Kin Store has no request cache, no dedup, no background refetch; server
state (cached responses, in-flight data) is TanStack Query's job, and
createStore only ever models what the client owns.
State changes only through set, merge, or a method that calls one of
them. Nothing mutates a draft behind your back unless you explicitly opt into
the immer plugin, so there's no implicit,
proxy-based reactivity happening anywhere by default.
It's also not a schema-validation library: state shape is whatever
TypeScript type you give createStore, and validating external input (an API
response, a form submission) is left to a dedicated library. And it's not
multi-framework yet; @kintools/store-react is the only official binding,
with no Vue, Svelte, or Solid package. If you're interested in Kin Store and
want bindings for other frameworks, please
file an issue.
Neither persist nor broadcast does conflict resolution beyond
last-write-wins, so don't reach for either as a substitute for a CRDT on
state that genuinely needs merged concurrent edits.
Finally, Kin Store isn't trying to out-feature Redux. There's no built-in
serializable action log format, no time-travel outside the devtools
plugin, and no code-generation step. The comparison page
covers those tradeoffs directly.