Animated .ani cursors are great for busy and working states and an active liability everywhere else. A pointer that wiggles when you are trying to read is a usability bug. The rules below keep your animation tasteful.
Frame count
Stay under twelve frames per loop. Eight is ideal. More than twelve and the file size balloons and the loop point becomes obvious.
Frame rate
Encode timing in JIFFIES (1/60s). Two to four jiffies per frame works for spinners; six to eight jiffies per frame works for breathing-style ambient motion. Anything faster than two jiffies per frame is a strobe.
Loop point
The first and last frame must be visually identical, or you will see a hard “snap” every loop. The cleanest trick is to design the animation as a true cycle (a wheel rotating, a flame breathing) so the loop point falls naturally.
Tooling
RealWorld Cursor Editor is the de facto standard on Windows for assembling .ani files from a folder of frames. On Linux, the xcursorgen command-line tool reads a config file describing each frame’s offset, hotspot, and timing, then emits the final theme.
Animation only where it makes sense
Animate: busy, working, progress. Do not animate: pointer, hand, text, crosshair, move. Resist the urge to add sparkles to your default arrow — your future self will thank you.
More guides
- How to Install Custom Cursors on Windows 11 (and Windows 10)
- Custom Cursors on macOS: What Actually Works in 2025
- Installing X11 and Wayland Cursor Themes on Linux
- Browser-Only Custom Cursors with the CSS cursor Property
- Design Your Own 16x16 Pixel-Art Cursor (Beginner Tutorial)
- Cursor Pack Licensing, Plain English: CC0, CC BY, and Commercial Use
- Choosing a Palette for Retro Cursors: NES, Game Boy, PICO-8, and Beyond
- Cursor Readability: Five Rules That Keep Pixel Pointers Usable
- Cursors for Streamers: Visibility, Branding, and Chat-Friendly Pointers