Releases: TrigenSoftware/nano_kit
Release list
v1.2.0
Features
- agera,intl,kida,nanoviews,query,router,svelte-kit: rename
ValueOrAccessortoSignalish(#210) (c42723a) - agera,kida,nanoviews: bottom-up deferred effect scopes (#189) (dd3169f)
- agera,nanoviews: add
show_with pausable effect scopes (#225) (4c2490d) - agera: add
selectorto wake only the keys whose answer changed (#200) (ac6b35f) - agera: derive mounted state from the graph instead of counting subscribers (#191) (9c43fce)
- agera: keep the source cold when observing through a derivation (#199) (ecc0434)
- kida,store: move tasks from
@nano_kit/storetokida(#220) (2e5c07c) - nanoviews: add
as_to hand a row through a transform (#207) (2891ec4) - nanoviews: add
match_for a cascade of conditions (#219) (1065b20) - nanoviews: add
props$to read any prop in accessor form (#212) (3cd1d77) - nanoviews: expose
swap_, the blockif_andswitch_are built on (#203) (9fc639f) - nanoviews: hand the tracking key to the row (#217) (34948cd)
- nanoviews: let an effect attribute name the element it sits on (#206) (215f157)
- nanoviews: rename
$$children,$$slotand$$slotsto a trailing$(#209) (47f794b), references #188 - nanoviews: rename effect attributes from
$$nametoname$(#188) (468a293) - nanoviews: rename the truthy and falsy narrowing types (#211) (577c49d)
Bug Fixes
- agera,kida,nanoviews,query: run user reducers and event handlers untracked (#193) (03c78db)
- kida: keep a
resolvedfactory unstarted until the first read (#221) (bc13a53) - kida: keep a child write in the caller's context (#198) (0816533)
- kida: type
toAccessorby what it actually returns (#208) (024e812) - nanoviews: apply multi-word and custom style properties (#195) (3270183)
- nanoviews: fire every
on*prop, not just the bubbling ones (#204) (42e613b) - nanoviews: show the
for_placeholder when there is no array at all (#205) (6e6568b)
Performance Improvements
- agera,kida,store: replace
morphwith the signal constructor protocol (#197) (23b3370) - agera,nanoviews: cut allocations and graph work on the binding paths (#196) (3d1c93b)
- benchmark-nanoviews: take the row key and drop
record(#218) (66e9ee3) - nanoviews: clear a row range with
replaceChildren(#216) (5942baf) - nanoviews: create the effect attribute registry on first use (#213) (4113217)
- nanoviews: wake only the rows whose value changed (#202) (c71cc9c)
v1.1.0
✨ Highlights
Self-closing tags in rich text (@nano_kit/intl)
rich (and mapTags) now understand self-closing tags like <br/> and <br /> — handy for line breaks and other void elements in translations. Handlers for such tags are called with empty chunks. Unknown self-closing tags are still stripped as markup.
const [$t] = messages('pages', {
sticker: rich({
br: () => '\n'
})
})
// 'First line<br/>second line' → ['First line', '\n', 'second line']Rich tag handlers receive an unique index (@nano_kit/intl)
Every tag handler now gets an unique index as the second argument — use it as a key for framework nodes:
const [$t] = messages('pages', {
sticker: rich({
title: (chunks, i) => <strong key={i}>{chunks}</strong>,
br: (_, i) => <br key={i} />
})
})No more key warnings and Children.toArray(t.sticker) workarounds in React.
Bonus: mapTags is now reentrant — nested calls from tag handlers no longer clobber the outer call's parsing state.
Features
v1.0.0
Nano Kit 1.0 🎉
After a year of alphas and betas, Nano Kit is stable. It is a lightweight, modular state management ecosystem: a signals-based store, data fetching, routing, i18n, and SSR — separate packages, take only what you need. Works with React, Preact, and Svelte, with ready-made integrations for Next.js and SvelteKit.
Why Nano Kit
- Fast. Reactivity is powered by Agera, our fork of alien-signals — one of the fastest reactivity algorithms around. In benchmarks it runs within ~3% of alien-signals itself — ~3.4M subscription updates per second, roughly 1.4× faster than svelte/store and rxjs, 4.5× faster than nanostores, and an order of magnitude ahead of mobx, valtio, and jotai.
- Small. The whole store is ~5 kB min+brotli, a single signal — ~1.6 kB. A real React app with Nano Kit + DI bundles smaller than the same app with TanStack Query or Reatom, and our SSR stack ships 237 kB of frontend JS where TanStack Start ships 375 kB — see bundle size comparisons.
- Dependency injection out of the box. Swap services for tests, SSR, or different platforms without context plumbing — it costs about 1 kB.
- SSR without a meta-framework. Streaming-friendly renderer, hydration, cookies and locale injection — a full SSR app fits in one small hono server.
- TypeScript-first. Strictly typed stores and typed route params, TypeScript 7 ready.
Where to start
- 📚 Documentation — guides for every package
- 🎓 Tutorial — build your first app step by step
- 🌤️ Examples — the same weather and Rick and Morty apps implemented across React, Preact, Svelte, Next.js, SvelteKit, and TanStack stacks, so you can compare like for like
Credits
Kida is inspired by Nano Stores, Agera builds on alien-signals — thanks to both communities.