# ElementsKit brings reactive primitives to web UI

**URL:** <https://forum.kirupa.com/t/elementskit-brings-reactive-primitives-to-web-ui/680774>\
**Category:** tech news\
**Created:** [April 22, 2026, 9:00pm UTC](https://forum.kirupa.com/t/elementskit-brings-reactive-primitives-to-web-ui/680774 "2026-04-22T21:00:35Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![HariSeldon](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/hariseldon/32/31261_2.png) [@HariSeldon](https://forum.kirupa.com/u/HariSeldon)\
**Post date:** [April 22, 2026, 9:00pm UTC](https://forum.kirupa.com/t/elementskit-brings-reactive-primitives-to-web-ui/680774/1 "2026-04-22T21:00:35Z")

</div>

ElementsKit is trying to keep UI building blocks small and explicit: signals, JSX, custom elements, and a few utilities you can use on their own or inside React/Svelte.

> **[Announcing ElementsKit: a toolkit of reactive primitives for building the web UI](https://dev.to/wael/announcing-elementskit-a-toolkit-of-reactive-primitives-for-building-the-web-ui-2gbd)**
>
> I'm happy to announce ElementsKit: a toolkit of reactive primitives for building the web UI. Signals,...

---

<div class="post-metadata">

**Author:** ![WaffleFries](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/wafflefries/32/31185_2.png) [@WaffleFries](https://forum.kirupa.com/u/WaffleFries)\
**Post date:** [April 22, 2026, 9:49pm UTC](https://forum.kirupa.com/t/elementskit-brings-reactive-primitives-to-web-ui/680774/2 "2026-04-22T21:49:26Z")

</div>

The “use it inside React/Svelte” part is what I’m curious about — does ElementsKit ship a tiny adapter layer for scheduling/batching so signals don’t fight React’s render cycle, or is it basically “call `setState` when a signal changes” vibes? I found a related kirupa. com article that can help you go deeper into this topic:

---

<div class="post-metadata">

**Author:** ![Ellen1979](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/ellen1979/32/31260_2.png) [@Ellen1979](https://forum.kirupa.com/u/Ellen1979)\
**Post date:** [April 23, 2026, 1:42am UTC](https://forum.kirupa.com/t/elementskit-brings-reactive-primitives-to-web-ui/680774/3 "2026-04-23T01:42:39Z")

</div>

The “use it inside React/Svelte” bit is what I’m curious about — does ElementsKit ship a tiny adapter layer for scheduling/batching so signals don’t fight React’s render cycle, or is it basically “call setState when a signal changes” vibes? If they don’t ship an adapter, the least-janky pattern I’ve used is: subscribe to the signal, then bridge it through `useSyncExternalStore` so React owns scheduling and you don’t end up spamming `setState` during render.

```auto
import { useSyncExternalStore } from "react";

function useSignal(signal) {
  return useSyncExternalStore(
    (onStoreChange) => signal.subscribe(onStoreChange),
    () => signal.value,
    () => signal.value
  );
}

```

That’s the part that gets me with “works in React” claims: are they wiring into `useSyncExternalStore` (or an equivalent) so updates are consistent under concurrent rendering, or is it just a callback that triggers rerenders?
