v0.1.0
First tagged release of animfx.nvim — an event-triggered animation registry that decouples "something happened" from "what visual effect plays." Call sites emit named events; effects register against event names independently. Rides Neovim's built-in User autocmd, so everything stays introspectable via :au User.
Core
animfx.on(event, fn)/emit(event, data, opts)/off(id)— register, fire, unregister- Effects are
pcall-isolated: one throwing effect never blocks the others - Multiple effects per event, run in registration order
emit(…, { schedule = true })defers effects to the next tick so a slow effect never blocks the emitting keymap
Effects (animfx.effects)
line_flash— full-line highlight flash, withfade = truefor a stepped fade-out; extmark-based, no leaks across rapid re-triggerssign_flash— gutter sign, visible even when the line is off-screencursor_beacon— dependency-free floating pulse (same visual as pulsar/beacon)notify_toast— animated toast via nvim-notify, falls back tovim.notifydelegate— wrap any other plugin's function as an effect, with graceful fallback
Combinators (animfx.combinators)
chain, delay, debounce, throttle, only_if, once — compose the function(data) effect shape freely.
Introspection
list()/history()and:AnimfxList,:AnimfxEmit <Event>,:AnimfxHistory:checkhealth animfx
Cross-layer bridge (animfx.remote)
Let external processes emit into a running Neovim over its RPC socket. Ready-to-wire AeroSpace and tmux hook scripts in examples/.
Quality
- 26 headless tests (
make test), CI on Neovim stable + nightly - stylua / luacheck config for local dev
Full detail in the README.