Kkwaenggwari · Open source

Built small.Rings loud.

Open-source state and motion tools for React and React Native. Three focused packages that work from the first import and grow only as far as you need.

  • 3 packages
  • React · React Native
  • TypeScript declarations
  • ISC license

Press the gong. Each tool answers the ring in its own way.

01 · The tools

Three instruments.One beat.

Each one does a single job all the way through. Use them alone, or together — they are made to fit.

restate

StateReact + React Native

Share it with one hook.Save it when you decide.

Components read the same value without a Provider, actions, or reducers. They re-render only when their selection changes, and saving or restoring happens exactly when you say so.

  • Shared without a Provider
  • Subscribe to just the part you select
  • Explicit saves to IndexedDB or MMKV
Install
npm install @kkwaenggwari/restate

Live

Two components, one store

Press a button on either side. Both panels read the same restate() value and change together; the shipping badge only listens to a selection.

Header

2 in cart

Product list

2 in cart

Animated

Motion engineReact DOM

One valueconducts the whole screen.

Use the timing, spring, and interpolate you know from React Native Animated on React DOM. One value drives the style of many elements, with no React render per frame.

  • The React Native Animated API you know
  • Interruptions keep position and velocity
  • Cleans up when its owner goes away
Install
npm install @kkwaenggwari/animated

Live

One Value, twelve shapes

The slider changes a single Value. The position, turn, size, and corners of all twelve shapes are derived from it. Press the spring, then grab the slider mid-flight.

Animated Chorus

Finished componentsReact · React Native

The hard interactions,already finished.

Rolling numbers, a highlight that travels, lists that move only what changed, sheets and swipe actions. Pass your data — no provider or setup call — on React and React Native.

  • Numbers, tabs, lists, and sheets
  • The same import on web and native
  • New input continues from what is on screen
Install
npm install @kkwaenggwari/animated-chorus @kkwaenggwari/animated

Live

A dashboard that only needs data

Pick a period: MotionHighlight travels to it, MotionNumber rolls, ProgressRing fills, and MotionList moves only the rows that changed.

TodayThis weekThis month

Visits

1,284

  1. Home
  2. Pricing
  3. Docs
  4. Blog

Sample data

02 · Ensemble

One strike.Everything moves.

This stage is built with Animated. A single Value holding your scroll progress conducts the position, turn, scale, and opacity of 48 shapes at once.

  1. 01
    Ring

    Scattered points gather into the rings of a gong.

  2. 02
    Split

    The ring divides three ways and takes on each tool's color.

  3. 03
    Shape

    They become state's links, motion's trajectory, and the chorus's pillars.

  4. 04
    Beat

    Everything lines up and lands on the same beat.

progress1.00

03 · Principles

Small,all the way through.

Start with one import

No wrapping provider or global setup up front. Add capabilities only when your app asks for them.

Only what needs it

Only the components whose selection changed, the elements that use a value, and the rows that moved are updated.

Responsible to the end

Interrupted motion continues from what is on screen, and subscriptions and animations are released when their owner goes away.

Typed and documented

Every package ships TypeScript declarations, and the documentation reads in 39 languages.

04 · The name

Kkwaenggwari,the gong that starts the band.

Say it kweng-gwah-ree. In Korean pungmul, the lead kkwaenggwari (꽹과리) player sets the beat for the whole ensemble. Our tools aim for the same: small but clear, keeping your whole app on one beat.

kkwaenggwariKkwaenggwari takes its name from the kkwaenggwari (꽹과리), a small Korean gong played with a mallet. Its bright, clear ring inspired the name for these small open-source tools.