{"full_name":"juliangarnier/anime","owner":"juliangarnier","name":"anime","url":"https://github.com/juliangarnier/anime","description":"JavaScript animation engine","homepage":"https://animejs.com","topics":[],"language":"JavaScript","license":"MIT","avatar":"https://avatars.githubusercontent.com/u/1268691?u=6c8197e1598f447f61c4e869ec656bd2be6fc3c8&v=4","created_at":"2016-03-13T21:37:45Z","pushed_at":"2026-11-02T22:25:55Z","metrics":{"stars":74478,"forks":5073,"watchers":791,"issues":857,"prs":224,"releases":37,"issues_open":null,"issues_closed":null,"prs_open":null,"prs_closed":null,"prs_merged":null,"discussions":39},"growth":{"day":{"stars":24,"forks":5,"base_day":"2026-11-09"}},"history":{"dates":["2026-11-09","2026-11-10"],"stars":[74454,74478],"forks":[5068,5073],"watchers":[791,791],"issues_open":[null,null],"prs_open":[null,null]},"boards":{},"same_owner":[],"issues":[{"number":1047,"title":"[FEATURE] Add MCP","comments":9,"created_at":"2025-07-17T02:23:43Z"},{"number":548,"title":"[BUG] querySelectorAll() in external SVG breaks [NodeList] for attribute 'targets:'","comments":8,"created_at":"2019-03-03T19:04:03Z"},{"number":1197,"title":"[DOCS] v2 and v3 documentation sets are not accessible on animejs.com","comments":6,"created_at":"2026-10-12T00:10:03Z"},{"number":688,"title":"Start animation when element is in viewport.","comments":6,"created_at":"2020-05-19T08:02:53Z"},{"number":1013,"title":"[BUG] duration: 0 in keyframes not properly handled","comments":5,"created_at":"2025-05-21T11:39:54Z"},{"number":991,"title":"[FEATURE] labelToScroll for Scroll-Driven Navigation","comments":5,"created_at":"2025-04-16T01:01:44Z"},{"number":817,"title":"[FEATURE] Add pause to timeline","comments":5,"created_at":"2022-05-10T22:35:19Z"},{"number":624,"title":"Height: auto","comments":5,"created_at":"2019-10-22T17:21:29Z"}],"discussions":[{"number":1198,"title":"Reusable anime instance for different onUpdate() functions","comments":1,"category":"Q&A","created_at":"2026-10-19T18:15:46Z"},{"number":1183,"title":"Adding and removing CSS classees with Stagger + onBegin / onComplete","comments":4,"category":"Q&A","created_at":"2026-07-12T20:12:24Z"},{"number":1166,"title":"SVG Paths","comments":0,"category":"General","created_at":"2026-04-23T00:10:10Z"},{"number":1156,"title":"Setting up AnimeJS via direct download","comments":2,"category":"Q&A","created_at":"2026-03-20T17:31:17Z"},{"number":1155,"title":"How to reset WAAPI inline styles after completion?","comments":0,"category":"Q&A","created_at":"2026-03-09T17:46:34Z"},{"number":1150,"title":"Thumbs Up to Layout","comments":2,"category":"General","created_at":"2026-02-28T04:28:33Z"},{"number":1146,"title":"Layout and React","comments":1,"category":"General","created_at":"2026-02-15T21:47:30Z"},{"number":1145,"title":"mouse enter / mouse leave animation","comments":0,"category":"Q&A","created_at":"2026-02-10T08:39:15Z"}],"latest_release":{"name":"v4.5.0","tag":"v4.5.0","published_at":"2026-06-22T14:57:08Z","body":"## New Features\r\n\r\n- **Adapters**\r\n  - New `registerAdapter()` API to extend `animate()` and `utils.set()` to non-DOM targets (learn more: https://animejs.com/documentation/adapters)\r\n- **Three.js adapter**\r\n  - New built-in three.js adapter, imported as a side-effect from `animejs/adapters/three`, to animate `Object3D`, materials, lights, cameras, audio nodes, `UniformNode` (TSL) and instanced meshes (learn more: https://animejs.com/documentation/adapters/three)\r\n- **Stagger**\r\n  - Auto-grid mode now supports 3D layouts, using `{x, y, z}` coordinates or an explicit `grid: [columns, rows, depth]` triplet\r\n  - The `from` parameter now accepts `[x, y, z]` normalized coordinates and `axis` now accepts `'z'` for 3D grid origins\r\n  - New `jitter` parameter to add a random offset to staggered values, either a single number or a `[start, end]` range\r\n  - New `seed` parameter to make `jitter` and `from: 'random'` reproducible\r\n\r\n## Bug Fixes and improvements\r\n- **Color**\r\n  - Color animations now blend RGB channels in pseudo-linear space for smoother, more even transitions (intermediate colors differ slightly from previous versions)\r\n- **Render**\r\n  - Fix a flicker that could appear randomly between iterations of reversed loops\r\n  - Fix a flicker that could appear randomly on alternate loops when using non-integer duration values\r\n- **Timeline**\r\n  - Fix a backward seek leaving a timeline child stuck at its end value when all its properties share the same delay\r\n  - Fix a timeline child whose delay is longer than its duration overwriting a later sibling's value on a forward seek\r\n  - Fix stale values when seeking a timeline whose children animate the same property through delayed tweens, most visible with staggered `jitter` delays\r\n  - Fix an implicit `from` value resolving to a stale value when an overridden tween sits earlier in the chain\r\n  - Improve performance when building large timelines with many overlapping `.add()` calls on the same property, and fix a case where such a timeline could cancel itself\r\n- **Keyframes**\r\n  - Fix a floating point precision issue producing incorrect intermediate values in keyframe arrays\r\n  - Fix scrubbing backward past the start of a keyframe sequence not restoring the first keyframe's `from` value\r\n  - Fix scrubbing forward past the end of a keyframe sequence leaving the target stuck on a previous keyframe's value\r\n  - Fix sequential keyframes occasionally detected as overlapping because of floating point drift, leaving the target stuck on the wrong value when scrubbing\r\n- **Animation**\r\n  - Fix function-based and CSS variable `from` values in object form (`{ from, to }`) not re-resolving on `refresh()`\r\n  - Fix `stretch()` not correctly scaling animations that use keyframes\r\n- **Scroll**\r\n  - Fix a `getBoundingClientRect` crash that could happen when a scroll container resized before its target was ready\r\n- **Engine**\r\n  - More accurate frame scheduling that no longer drops frames arriving slightly early because of `requestAnimationFrame` jitter\r\n  - Faster `engine.speed` and `engine.timeUnit` updates that skip unnecessary work when the value does not actually change\r\n"},"readme":true,"readme_zh":false,"news":[],"stale":false,"snapshot_at":"2026-11-10T09:35:25Z","history_start":"2026-09-06"}