{"id":15887842,"url":"https://github.com/chriscerie/roact-spring","last_synced_at":"2026-02-08T08:31:57.979Z","repository":{"id":37792827,"uuid":"451002013","full_name":"chriscerie/roact-spring","owner":"chriscerie","description":"A modern spring-physics based animation library for react-lua based on react-spring","archived":false,"fork":false,"pushed_at":"2024-07-01T07:36:16.000Z","size":4014,"stargazers_count":71,"open_issues_count":21,"forks_count":19,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-25T18:37:50.490Z","etag":null,"topics":["lua","react","roblox","ui"],"latest_commit_sha":null,"homepage":"https://www.chrisc.dev/roact-spring/","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chriscerie.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-01-23T04:17:47.000Z","updated_at":"2025-10-10T05:23:20.000Z","dependencies_parsed_at":"2024-01-13T22:51:06.344Z","dependency_job_id":"189bf26d-7d84-4f7e-a1b9-161be73af26d","html_url":"https://github.com/chriscerie/roact-spring","commit_stats":{"total_commits":93,"total_committers":8,"mean_commits":11.625,"dds":"0.16129032258064513","last_synced_commit":"f0e8c4a5cfea6415c97f1df4fbce8fc0fd6e77d5"},"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/chriscerie/roact-spring","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chriscerie%2Froact-spring","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chriscerie%2Froact-spring/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chriscerie%2Froact-spring/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chriscerie%2Froact-spring/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chriscerie","download_url":"https://codeload.github.com/chriscerie/roact-spring/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chriscerie%2Froact-spring/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29225477,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T06:05:31.539Z","status":"ssl_error","status_checked_at":"2026-02-08T05:58:33.853Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["lua","react","roblox","ui"],"created_at":"2024-10-06T06:05:18.683Z","updated_at":"2026-02-08T08:31:57.964Z","avatar_url":"https://github.com/chriscerie.png","language":"Lua","funding_links":[],"categories":["Motion"],"sub_categories":["Ripple \u003cimg src=\"luau.svg\" width=\"18px\" /\u003e\u003cimg src=\"roblox-ts.svg\" width=\"18px\" /\u003e"],"readme":"\u003ca href=\"https://www.chrisc.dev/roact-spring/\"\u003e\n  \u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://i.imgur.com/1Ta6WRv.png\" width=\"200\" /\u003e\n  \u003c/p\u003e\n\u003c/a\u003e\n\n\u003ch1 align=\"center\"\u003eroact-spring\u003c/h1\u003e\n\u003ch3 align=\"center\"\u003eA modern spring-physics based \u003c/br\u003e animation library for Roact inspired by react-spring\u003c/h3\u003e\n\n\u003cbr\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/chriscerie/roact-spring/actions/workflows/docs.yml\"\u003e\n    \u003cimg src=\"https://github.com/chriscerie/roact-spring/workflows/docs/badge.svg\" alt=\"Deploy Docs Status\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://badge.fury.io/js/@rbxts%2Froact-spring\"\u003e\n    \u003cimg src=\"https://badge.fury.io/js/@rbxts%2Froact-spring.svg\" alt=\"npm version\" height=\"18\"\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n## Why roact-spring\n\n### Declarative and imperative\n`roact-spring` is the perfect bridge between declarative and imperative animations. It takes the best of both worlds and packs them into one flexible library.\n\n### Fluid, powerful, painless\n`roact-spring` is designed to make animations fluid, powerful, and painless to build and maintain. Animation becomes easy and approachable, and everything you do look and feel natural by default.\n\n### Versatile\n`roact-spring` works with most data types and provides extensible configurations that makes it painless to create advanced animations.\n\n## Installation\n\n### Wally\n\n`roact-spring` has two packages to support [react-lua](https://github.com/jsdotlua/react-lua) and [legacy Roact](https://github.com/Roblox/roact). It's crucial to install the correct package or you **will** encounter bugs. To install, add the latest version of roact-spring to your wally.toml:\n\n#### With react-lua\n```console\nReactSpring = \"chriscerie/react-spring@\u003cversion\u003e\"\n```\n\nNote: react-lua packages under the scope jsdotlua must use react-spring \u003e= 2.0. react-lua packages under the legacy scope corepackages must use react-spring v1.\n\n#### With legacy Roact\n```console\nRoactSpring = \"chriscerie/roact-spring@\u003cversion\u003e\"\n```\n\n### roblox-ts\n\n`roact-spring` is also available for roblox-ts projects. Install it with [npm](https://www.npmjs.com/package/@rbxts/roact-spring):\n```console\nnpm i @rbxts/roact-spring\n```\n\n## Getting Started\n\nGetting started with roact-spring is as simple as:\n\n### Declarative\n```lua\nlocal toggle, setToggle = React.useState(false)\nlocal styles = RoactSpring.useSpring({\n    transparency = if toggle then 1 else 0,\n})\n\n-- Later\nsetToggle(function(prevState)\n    return not prevState\nend)\n```\n\n### Imperative\n\n```lua\nlocal styles, api = RoactSpring.useSpring(function()\n    return {\n        position = UDim2.fromScale(0.3, 0.3),\n        rotation = 0,\n    }\n})\n\n-- Later\napi.start({\n    position = UDim2.fromScale(0.5, 0.5),\n    rotation = 45,\n    config = { tension = 170, friction = 26 },\n})\n```\n\nMore information can be found in roact-spring's official [documentation](https://www.chrisc.dev/roact-spring/).\n\n## Demos\n\nThese demos are publicly available. Click on each gif to go to their source.\n\n### Draggable element\n\n\u003ca href=\"stories/hooks/useSpringDrag.story.lua\"\u003e\n  \u003cimg src=\"https://media.giphy.com/media/R2bJ57MNTdP7vmP6Ez/giphy.gif\" width=\"300\" /\u003e\n\u003c/a\u003e\n\n### Draggable list\n\n\u003ca href=\"stories/hooks/useSpringsList.story.lua\"\u003e\n  \u003cimg src=\"https://media.giphy.com/media/4qOEZ93YjhfKtSlx7b/giphy.gif\" width=\"300\" /\u003e\n\u003c/a\u003e\n\n### Staggered list\n\n\u003ca href=\"stories/hooks/useTrailList.story.lua\"\u003e\n  \u003cimg src=\"https://media.giphy.com/media/XfG0GNKGCKang91lLN/giphy.gif\" width=\"300\" /\u003e\n\u003c/a\u003e\n\n### Staggered text\n\n\u003ca href=\"stories/hooks/useTrailText.story.lua\"\u003e\n  \u003cimg src=\"https://media.giphy.com/media/9llkynmhlsUvZCupPz/giphy.gif\" width=\"300\" /\u003e\n\u003c/a\u003e\n\n### Trailing elements\n\u003ca href=\"stories/hooks/useTrailFollow.story.lua\"\u003e\n  \u003cimg src=\"https://media.giphy.com/media/BS20XRr522AJgkCyZR/giphy.gif\" width=\"300\" /\u003e\n\u003c/a\u003e\n\n## License\n\n`roact-spring` is available under the MIT license. See [LICENSE](LICENSE) for details.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchriscerie%2Froact-spring","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchriscerie%2Froact-spring","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchriscerie%2Froact-spring/lists"}