{"_id":"chistate","_rev":"32-0f202c57ce761c832268677b4edffd7e","name":"chistate","dist-tags":{"latest":"0.2.6"},"versions":{"0.2.5":{"name":"chistate","version":"0.2.5","keywords":["state","react","signals","zustand","react","nextjs","redux","store","management"],"author":{"name":"Rohit Ambawata"},"license":"MIT","_id":"chistate@0.2.5","maintainers":[{"name":"chinchihub","email":"contact@appsitesolutions.in"}],"dist":{"shasum":"28141efdd903123b7243e05b4bcaf9f35df03a3e","tarball":"https://registry.npmjs.org/chistate/-/chistate-0.2.5.tgz","fileCount":8,"integrity":"sha512-VluKxi7sTA46kOocsL0wP+wGoUDl8GYeAk/wyUcuwvQ1TkBtTXwkXN3ioFNvT+Ms0ntCiWxsAdA10zImKQBVKg==","signatures":[{"sig":"MEUCIGPzEMBGxUTXJFLmnMa/gUYvG8MQ5Z6AavhG91W5GluPAiEAsr+qYTHPHNrAtSZZo2HzJbVNpvV4dacuRm8AfhYg62Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37827},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"b7c10b360b5fcb5d26f167ac27377715498d8237","scripts":{"build":"tsup src/index.tsx --format cjs,esm --dts --external react"},"_npmUser":{"name":"chinchihub","email":"contact@appsitesolutions.in"},"_npmVersion":"11.12.0","description":"Reactive state. No hooks. No boilerplate.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"react":">=18","@types/react":"^18"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.2","@types/node":"^25.6.0"},"peerDependencies":{"react":">=18"},"_npmOperationalInternal":{"tmp":"tmp/chistate_0.2.5_1776612606093_0.4111484637608216","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"chistate","version":"0.2.6","author":{"name":"Rohit Ambawata"},"license":"MIT","description":"Reactive state. No hooks. No boilerplate.","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"build":"tsup src/index.tsx --format cjs,esm --dts --external react"},"keywords":["state","react","signals","zustand","react","nextjs","redux","store","management"],"devDependencies":{"@types/node":"^25.6.0","tsup":"^8.5.1","typescript":"^6.0.2"},"peerDependencies":{"react":">=18"},"dependencies":{"@types/react":"^18","react":">=18"},"type":"commonjs","gitHead":"5b8005c8a95448bffed0dbda644ada4c96118ac3","_id":"chistate@0.2.6","_nodeVersion":"20.19.5","_npmVersion":"11.12.0","dist":{"integrity":"sha512-A+dMs+14VryV/DBCS8T9MfGz6a98GSCTaLF2tGXc+SN5jfXrMKY8GZoyezCD+VRU0vOTjmbgfYKlJ2PJRzYXYA==","shasum":"423989478b41b2d900b18743a9b442ea3e43a73f","tarball":"https://registry.npmjs.org/chistate/-/chistate-0.2.6.tgz","fileCount":8,"unpackedSize":44869,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDgGrxA9JW5EUkmIkt9gYuHxOs/ZozGwYQzfV65+vKI6gIhALYaBs1ua+uLw8ipq3jKNZrlOD4vMq8BH4jIKMp/LprZ"}]},"_npmUser":{"name":"chinchihub","email":"contact@appsitesolutions.in"},"directories":{},"maintainers":[{"name":"chinchihub","email":"contact@appsitesolutions.in"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/chistate_0.2.6_1778495416328_0.33519933238483923"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-10T06:58:48.521Z","modified":"2026-05-11T10:30:16.605Z","0.0.1":"2026-04-10T06:58:48.726Z","0.0.2":"2026-04-10T12:48:11.362Z","0.0.3":"2026-04-10T13:09:16.591Z","0.0.4":"2026-04-11T12:12:11.015Z","0.0.5":"2026-04-13T05:30:44.773Z","0.0.6":"2026-04-14T13:17:17.723Z","0.1.0":"2026-04-14T14:24:58.843Z","0.1.1":"2026-04-15T03:30:29.108Z","0.1.2":"2026-04-15T03:37:56.675Z","0.1.3":"2026-04-15T08:11:29.949Z","0.2.0":"2026-04-17T12:18:52.897Z","0.2.1":"2026-04-17T12:28:04.237Z","0.2.2":"2026-04-17T12:36:06.309Z","0.2.3":"2026-04-17T12:48:38.664Z","0.2.4":"2026-04-18T16:22:07.966Z","0.2.5":"2026-04-19T15:30:06.247Z","0.2.6":"2026-05-11T10:30:16.502Z"},"author":{"name":"Rohit Ambawata"},"license":"MIT","keywords":["state","react","signals","zustand","react","nextjs","redux","store","management"],"description":"Reactive state. No hooks. No boilerplate.","maintainers":[{"name":"chinchihub","email":"contact@appsitesolutions.in"}],"readme":"# ⚡ chiState\r\n\r\n> ### Ultra-simple reactive state management for React\r\n> \r\n> **No hooks. No reducers. No providers. No boilerplate.**\r\n\r\n----------\r\n\r\n# 🚀 Quick Start (5 Seconds)\r\n\r\n```tsx\r\n\"use client\";\r\nimport { chiState, Chi } from \"chistate\";\r\n\r\nconst count = chiState(0);\r\n\r\nexport default function App() {\r\n  return (\r\n    <>\r\n      <button onClick={() => count.value++}>+</button>\r\n      <Chi value={count} />\r\n    </>\r\n  );\r\n}\r\n\r\n```\r\n\r\n✅ Click button → UI updates automatically.\r\n\r\n----------\r\n\r\n```mermaid\r\nflowchart LR\r\nA[Create State] --> B[Update value]\r\nB --> C[Reactive UI updates]\r\n\r\n```\r\n\r\n----------\r\n\r\n# 📦 Installation\r\n\r\n```bash\r\nnpm install chistate\r\n\r\n```\r\n\r\nor\r\n\r\n```bash\r\nyarn add chistate\r\n\r\n```\r\n\r\n----------\r\n\r\n# 🧠 What is chiState?\r\n\r\n`chiState` is a **fine-grained reactive state engine** for React.\r\n\r\nInstead of rerendering large component trees, it updates **only the UI that uses changed state**.\r\n\r\n### Why it matters:\r\n\r\n-   ⚡ Faster UI\r\n    \r\n-   🧹 Cleaner code\r\n    \r\n-   🎯 Less rerendering\r\n    \r\n-   🧠 Easier mental model\r\n    \r\n\r\n----------\r\n\r\n# ✨ Core API\r\n\r\n```bash\r\n# Create reactive state\r\n`chiState()`\r\n```\r\n```bash\r\n# Render reactive values\r\n`Chi`\r\n```\r\n```bash\r\n# Reactive JSX block\r\n`chiView()`\r\n```\r\n```bash\r\n# Derived state\r\n`chiComputed()`\r\n```\r\n```bash\r\n# Effects / watchers\r\n`chiLog()`\r\n```\r\n```bash\r\n# Group updates\r\n`chiBatch()`\r\n```\r\n\r\n----------\r\n\r\n# 🏗️ How It Works\r\n\r\n```mermaid\r\nflowchart TD\r\nA[chiState] --> B[State changes]\r\nB --> C[Subscribers notified]\r\nC --> D[Only used UI rerenders]\r\n\r\n```\r\n\r\n----------\r\n\r\n# 1️⃣ chiState() → Create State\r\n\r\n```tsx\r\nimport { chiState } from \"chistate\";\r\n\r\nconst count = chiState(0);\r\n\r\n```\r\n\r\n### Read Value\r\n\r\n```tsx\r\ncount.value\r\n\r\n```\r\n\r\n### Update Value\r\n\r\n```tsx\r\ncount.value++\r\ncount.value = 10\r\n\r\n```\r\n\r\n----------\r\n\r\n# 2️⃣ Chi Component → Easiest UI Binding\r\n\r\n```tsx\r\nimport { chiState, Chi } from \"chistate\";\r\n\r\nconst count = chiState(0);\r\n\r\nexport default function App() {\r\n  return (\r\n    <>\r\n      <button onClick={() => count.value++}>+</button>\r\n      <Chi value={count} />\r\n    </>\r\n  );\r\n}\r\n\r\n```\r\n\r\n----------\r\n\r\n## 🎨 Extra Props\r\n\r\n### Custom Tag\r\n\r\n```tsx\r\n<Chi value={count} as=\"h1\" />\r\n\r\n```\r\n\r\n### Class Name\r\n\r\n```tsx\r\n<Chi value={count} className=\"text-xl\" />\r\n\r\n```\r\n\r\n### Fallback\r\n\r\n```tsx\r\nconst user = chiState(null);\r\n<Chi value={user} fallback=\"Guest\" />\r\n\r\n```\r\n\r\n### Format\r\n\r\n> **Older Version-: // <= 0.1.3 (Avoid)\r\n```bash\r\n<Chi  value={price}  format={(v) =>  `₹${v}`}  />\r\n```\r\n\r\n> **Newer  Version-: // 0.2.1\r\n```bash\r\n<Chi  value={price}>\r\n{(v)=>`₹${v}`}\r\n</Chi>\r\n```\r\n\r\n#  chiAudio → Simple Music Sysytem Handler. \r\n```bash\r\ntracks = [{}] or [strings]\r\nconst player = chiAudio({playlist:tracks})\r\n  player returns = {\r\n    audio,\r\n\r\n    playing,\r\n    loading,\r\n    muted,\r\n\r\n    length,\r\n    index,\r\n    current,\r\n\r\n    currentTime,\r\n    duration,\r\n    progress,\r\n    volume,\r\n    startTime,\r\n    endTime,\r\n\r\n    play,\r\n    pause,\r\n    toggle,\r\n\r\n    next,\r\n    prev,\r\n\r\n    seekTo,\r\n    seekPercent,\r\n\r\n    setVolume,\r\n    mute,\r\n    unmute,\r\n\r\n    setIndex,\r\n    destroy,\r\n  };\r\n\r\n  USAGE: player.length.value , player.toggle ,player.prev, player.next , player.startTime.value, player.endTime.value, player.seekTo(Number(e.target.value)), player.current.value.image | name | etc.\r\n```\r\n## USE OF AUDIO LIBRARY - Simple\r\n\r\n```bash\r\n\"use client\";\r\nimport {Chi, chiAudio} from \"chistate\";\r\n\r\nconst player = chiAudio({\r\n  playlist:[\"/music/all.mp3\",\"/music/all2.mp4\"]\r\n})\r\n\r\n\r\nexport default function Home() {\r\n  return (\r\n    <main className=\"w-screen h-screen\">\r\n      <div className=\"flex gap-2.5\">\r\n        <span><Chi>{()=>player.startTime.value}</Chi></span>\r\n        <span><Chi>{()=>player.endTime.value}</Chi></span>\r\n      </div>\r\n      <div className=\"flex gap-2.5\">\r\n        <button onClick={()=>player.prev()}>Prev</button>\r\n        <button onClick={()=>player.next()}>Next</button>\r\n      </div>\r\n      <button onClick={()=>player.toggle()}>Play/Pause</button>\r\n    </main>\r\n  );\r\n}\r\n```\r\n\r\n----------\r\n\r\n# 3️⃣ chiView() → Reactive JSX Block\r\n\r\nUse when UI is more than text.\r\n\r\n```tsx\r\n\"use client\";\r\nimport { chiState, chiView } from \"chistate\";\r\n\r\nconst count = chiState(0);\r\n\r\nexport default function App() {\r\n  return chiView(() => (\r\n    <div>\r\n      <button onClick={() => count.value++}>+</button>\r\n      <h1>{count.value}</h1>\r\n    </div>\r\n  ));\r\n}\r\n\r\n```\r\n\r\n----------\r\n\r\n```mermaid\r\nflowchart LR\r\nA[State Used Inside chiView] --> B[State Changes]\r\nB --> C[Only chiView rerenders]\r\n\r\n```\r\n\r\n----------\r\n\r\n# 🔥 watch Mode\r\n\r\nInline reactive UI without manually writing `chiView`.\r\n\r\n```tsx\r\n<Chi\r\n  watch={() => (\r\n    <div>Count: {count.value}</div>\r\n  )}\r\n/>\r\n\r\n```\r\n\r\n### Great For:\r\n\r\nHere are emojis for each UI element with names:\r\n\r\n-   🏅 **Badges**\r\n    \r\n-   🔢 **Counters**\r\n    \r\n-   📍 **Status Text**\r\n    \r\n-   🧩 **Mini Widgets**\r\n    \r\n-   ✨ **Inline UI Parts**\r\n    \r\n\r\n----------\r\n\r\n# 4️⃣ chiComputed() → Derived State\r\n\r\nAuto-updating values based on other state.\r\n\r\n```tsx\r\nconst price = chiState(100);\r\nconst qty = chiState(2);\r\n\r\nconst total = chiComputed(() => price.value * qty.value);\r\n\r\n```\r\n\r\n----------\r\n\r\n```mermaid\r\nflowchart LR\r\nA[price] --> C[total]\r\nB[qty] --> C[total]\r\nC --> D[UI updates]\r\n\r\n```\r\n\r\n----------\r\n\r\n### Full Example\r\n\r\n```tsx\r\n<Chi value={total} />\r\n\r\n```\r\n\r\n----------\r\n\r\n# 5️⃣ chiLog() → Reactive Effects\r\n\r\nRun code whenever used state changes.\r\n\r\n```tsx\r\nchiLog(() => {\r\n  console.log(count.value);\r\n});\r\n\r\n```\r\n\r\n### With Cleanup\r\n\r\n```tsx\r\nchiLog(() => {\r\n  const id = setInterval(() => {\r\n    console.log(count.value);\r\n  }, 1000);\r\n\r\n  return () => clearInterval(id);\r\n});\r\n\r\n```\r\n\r\n----------\r\n\r\n# 6️⃣ chiBatch() → Group Updates\r\n\r\nMany changes → one update wave.\r\n\r\n```tsx\r\nchiBatch(() => {\r\n  count.value++;\r\n  user.value = \"Alex\";\r\n  dark.value = true;\r\n});\r\n\r\n```\r\n\r\n----------\r\n\r\n```mermaid\r\nflowchart LR\r\nA[Multiple Changes] --> B[chiBatch]\r\nB --> C[Single Render Wave]\r\n\r\n```\r\n\r\n----------\r\n\r\n# 🏠 Local vs 🌍 Global State\r\n\r\n----------\r\n\r\n## Local Scope (Internal State)\r\n\r\nUse inside component or page.\r\n\r\nBest for:\r\n\r\n>####   📝 **Forms**\r\n    \r\n>####   🪟 **Modals**\r\n    \r\n>####  ⬇️ **Dropdowns**\r\n    \r\n>####   🧩 **Widgets**\r\n    \r\n>####  ⏳ **Temporary UI**\r\n\r\n \r\n```tsx\r\nconst open = chiState(false);\r\n\r\n```\r\n\r\n----------\r\n\r\n## Global Scope (External Store)\r\n\r\nUse shared state across app.\r\n\r\n#### store.ts\r\n\r\n```tsx\r\nexport const darkMode = chiState(false);\r\nexport const cartCount = chiState(0);\r\n\r\n```\r\n\r\n#### Page.tsx\r\n\r\n```tsx\r\n<button onClick={() => darkMode.value = !darkMode.value}>\r\n  Theme\r\n</button>\r\n\r\n<Chi value={cartCount} />\r\n\r\n```\r\n\r\n----------\r\n\r\n```mermaid\r\nflowchart LR\r\nA[store.ts] --> B[Page A]\r\nA --> C[Page B]\r\nA --> D[Navbar]\r\n\r\n```\r\n\r\n----------\r\n\r\n# 📝 Example Projects\r\n\r\n### ✅ Todo App\r\n\r\nFeatures:\r\n\r\n-   Add tasks\r\n    \r\n-   Search\r\n    \r\n-   Filters\r\n    \r\n-   Edit task\r\n    \r\n-   Progress bar\r\n    \r\n-   Dark mode\r\n    \r\n-   LocalStorage\r\n    \r\n-   Computed stats\r\n   >#### GITHUB\r\n\r\n----------\r\n\r\n## 🎮 Tic Tac Toe\r\n\r\nFeatures:\r\n\r\n-   Board state\r\n    \r\n-   Winner logic\r\n    \r\n-   Scoreboard\r\n    \r\n-   New round\r\n    \r\n-   Reset all\r\n    >#### GITHUB\r\n\r\n----------\r\n\r\n# ⚡ Why It Feels Better\r\n\r\nTraditional React:\r\n\r\n```tsx\r\nconst [count, setCount] = useState(0);\r\nsetCount(prev => prev + 1);\r\n\r\n```\r\n\r\nchiState:\r\n\r\n```tsx\r\ncount.value++\r\n\r\n```\r\n\r\nSimple. Direct. Clean.\r\n\r\n----------\r\n\r\n# 📈 Performance Summary\r\n\r\n### Stress Tests Showed:\r\n\r\n>#### Only affected UI rerenders\r\n    \r\n>#### 100 isolated counters passed\r\n    \r\n>#### 10,000 counters mounted\r\n    \r\n>#### Smooth 60 FPS updates\r\n    \r\n>#### Good cleanup behavior\r\n    \r\n>#### Efficient batching\r\n    \r\n\r\n----------\r\n\r\n\r\n# 🧩 Best Practices\r\n\r\n>## Use `Chi`\r\n\r\nFor simple values.\r\n\r\n```tsx\r\n<Chi value={count} />\r\n\r\n```\r\n\r\n>## Use `chiView`\r\n\r\nFor sections / layouts.\r\n\r\n```tsx\r\nreturn chiView(() => <Dashboard />);\r\n\r\n```\r\n\r\n>## Use `chiComputed`\r\n\r\nFor totals / filtered data.\r\n\r\n>## Use `chiBatch`\r\n\r\nFor grouped updates.\r\n\r\n>##  Use Global Store\r\n\r\nFor shared app state.\r\n\r\n----------\r\n\r\n# ❌ Avoid\r\n\r\n> #####   Mutating arrays directly\r\n    \r\n> #####   Circular computed chains\r\n    \r\n> #####   Huge logic inside render\r\n    \r\n\r\nBad:\r\n\r\n```tsx\r\nitems.value.push(1)\r\n\r\n```\r\n\r\nGood:\r\n\r\n```tsx\r\nitems.value = [...items.value, 1]\r\n\r\n```\r\n\r\n----------\r\n\r\n#  FAQ\r\n\r\n### Need Provider?\r\n\r\n> ##### No\r\n\r\n### Need Context?\r\n\r\n> ##### No\r\n\r\n### Works with Next.js?\r\n\r\n> ##### Yes\r\n\r\n### TypeScript Support?\r\n\r\n> ##### Yes\r\n\r\n----------\r\n\r\n## 🏁 Final Example\r\n\r\n```tsx\r\n\"use client\";\r\n\r\nimport {\r\n  chiState,\r\n  chiComputed,\r\n  Chi\r\n} from \"chistate\";\r\n\r\nconst count = chiState(1);\r\n\r\nconst double = chiComputed(\r\n  () => count.value * 2\r\n);\r\n\r\nexport default function App() {\r\n  return (\r\n    <div>\r\n      <button onClick={() => count.value++}>\r\n        +\r\n      </button>\r\n\r\n      <p>Count: <Chi value={count} /></p>\r\n      <p>Double: <Chi value={double} /></p>\r\n    </div>\r\n  );\r\n}\r\n\r\n```\r\n\r\n----------\r\n\r\n## ❤️ Summary\r\n\r\nIf you want:\r\n\r\n> #####   ⚡ Simpler React state\r\n    \r\n> #####   🎯 Less rerenders\r\n    \r\n> #####   🧼 No boilerplate\r\n    \r\n> #####   🧠 Easy mental model\r\n    \r\n> #####   🚀 Reactive power\r\n    \r\n\r\n---\r\n\r\n  \r\n\r\n### ⚡ Why chistate?\r\n\r\n  \r\n\r\n> ##### No boilerplate\r\n\r\n >##### No providers\r\n\r\n >##### No reducers\r\n\r\n >##### Just variables\r\n\r\n  \r\n\r\n---\r\n### ⭐ Support\r\n\r\n  \r\n\r\n> ##### If you like it, give a ⭐ on [Github!](https://github.com/rohitLovesKrishna/chistate)\r\n\r\n### Contributing\r\n> ##### For usage related query feel free to contact \"admin@appsitesolutions.in\"\r\n##### Made with ❤️ by Rohit Ambawata\r\n\r\n----------\r\n\r\n# 📄 License\r\n\r\nMIT","readmeFilename":"README.md"}