{"id":"tyleratstarboard/stream","name":"stream","scope":"tyleratstarboard","platform":"roblox","description":"A reactive state library for Roblox","version":"1.0.0","latest":"1.0.0","versions":["1.0.0"],"license":"MIT","licenseRating":"safe","licenseCaveats":[],"licenseVerified":true,"dependencies":{},"integrity":"c482411db6c992515b6c7961052be9ed0236cc74cc79cf95b4860be13bcbb33b","likes":0,"downloads":0,"install":"forest install tyleratstarboard/stream","url":"https://forest.dev/p/roblox/tyleratstarboard/stream","files":"https://api.forest.dev/ai/package/roblox/tyleratstarboard/stream/files","readme":"<div align=\"center\">\n\n# Stream\n\n**A reactive state library for Roblox**\n\n[Documentation & Examples](https://TylerAtStarboard.github.io/Stream) · [Releases](https://github.com/TylerAtStarboard/Stream/releases/latest)\n\n---\n\n</div>\n\n## What is Stream?\n\nStream is a simple and small reactive state library for Roblox that I built for my games, inspired by libraries like [Fusion](https://elttob.uk/Fusion/0.2/). It gives you **values** that hold state, **computeds** that derive from them automatically, and **scopes** that clean everything up when you're done. It also ships with a built-in [Iris](https://github.com/SirMallard/Iris) debugger for inspecting your reactive graph at runtime.\n\n<div align=\"center\">\n\n<img width=\"1568\" height=\"1121\" alt=\"ApplicationFrameHost_H9mL0Cpyfc\" src=\"https://github.com/user-attachments/assets/d05c45e7-2980-41b3-a563-97e32f5b6396\" />\n\n</div>\n\n\n\n## What Stream is not\n\nStream is **not** a UI library. I don't enjoy creating UI entirely in code, so it doesn't include springs, tweens, component constructors, or any other UI-specific tooling. It does one thing — reactive state — and tries to provide a clean way to bind that state to Instances or anything else. If you need animation or a full UI framework, you won't find it here\n\n\n### \"How does this compare to\"\nI don't intend to benchmark Stream against the libraries mentioned above, or compete with them — they serve different use cases with only some overlapping behavior.\nNevertheless, I hope some developers find Stream useful :)\n\n\n## Quick Example\n\n```luau\nlocal Stream = require(ReplicatedStorage.Stream)\n\nlocal scope = Stream.Scope(\"UI\", \"HealthBar\")\n\nlocal hp = scope:Value(100)\nlocal label = scope:Computed(function()\n    return hp:get() .. \" HP\"\nend)\n\nscope:Bind(textLabel){\n    Text = label,\n}\n\nhp:set(75) -- textLabel.Text updates to \"75 HP\"\n\nscope:Destroy() -- cleans up everything\n```\n\n## Installation\n\n### Wally\n\nAdd to your `wally.toml`:\n\n```toml\n[dependencies]\nStream = \"TylerAtStarboard/stream@1.0.0\"\n```\n\nThen run:\n\n```sh\nwally install\n```\n\n### GitHub Releases\n\nDownload the latest `.rbxm` from [Releases](https://github.com/TylerAtStarboard/Stream/releases/latest) and drop it into your project.\n\n### Example Place\n\nOpen `StreamExamplePlace.rbxl` in Studio to see Stream in action with the debugger enabled.\n\n## Documentation\n\nFull API reference, examples, and debugger guide:\n\n**[https://TylerAtStarboard.github.io/Stream](https://TylerAtStarboard.github.io/Stream)**\n\n## License\n\n[MIT](LICENSE)\n","readmeTruncated":false}