{"id":"blinkybool/feather","name":"feather","scope":"blinkybool","platform":"roblox","description":"Mirrored from the Wally registry.","version":"0.1.0","latest":"0.1.0","versions":["0.1.0","0.2.0-rc1"],"license":"MIT","licenseRating":"safe","licenseCaveats":["License identified from the packaged LICENSE file; the manifest declared none."],"licenseVerified":true,"dependencies":{},"integrity":"48924c65f8eac13a7759f6bb766634de68789f0384b7475f474ccea14e7adbc9","likes":0,"downloads":0,"install":"forest install blinkybool/feather","url":"https://forest.dev/p/roblox/blinkybool/feather","files":"https://api.forest.dev/ai/package/roblox/blinkybool/feather/files","readme":"<div align=\"center\">\n\t<h1>Feather <img src=\"feather.svg\"/></h1>\n\t<p>A featherweight declarative instance manager for Roblox.</p>\n\t<a href=\"https://blinkybool.github.io/feather/\"><strong>Docs</strong></a>\n\t<br/>\n\t<a href=\"https://blinkybool.github.io/feather/api/\"><strong>API</strong></a>\n\t<div></div>\n\t<br/>\n</div>\n<!--moonwave-hide-before-this-line-->\n\nRoact is great for managing a hierarchy of instances as a function of some underlying state, but when handling tens of thousands of instances, the memory usage becomes a problem.\n\nFeather lets you manage instances with the same `component + props` logic as Roact, using the absolute bare minimum amount of memory usage in the virtual tree, while still being performant.\nThe key is to not store any host props in the virtual tree, and rely just on the props in function components, which typically have a smaller memory footprint.\n\nThe tradeoff is that we can no longer detect which props need to be updated in host components, so they must all be updated. Performance is restored by giving function components their old props table, so they can determine which children/props must be updated.\n\n* [sine-pixel](https://github.com/blinkybool/feather/blob/main/test/pringle.story.lua) ![sine-pixel.story](docs/sine-pixel.gif)\n\n* [pringle](https://github.com/blinkybool/feather/blob/main/test/pringle.story.lua) ![pringle.story](docs/pringle.gif)","readmeTruncated":false}