Releases: ratatui/tachyonfx
Releases · ratatui/tachyonfx
tachyonfx-v0.25.0
tachyonfx-0.25.0 - 2026-02-27
Added
CellFilter::NonEmpty: selects cells that contain a non-space symbol.Interpolation::SmoothStepandInterpolation::Spring.DiamondPattern: spatial pattern using Manhattan distance for diamond-shaped reveals.SpiralPattern: trig-free spatial pattern.InvertedPattern: wrapper pattern that inverts another pattern's output.CombinedPattern: combines two sub-patterns using a binary operation.
Fixed
- Fix negative hue values producing wrong colors in
hsl_to_rgb,hsv_to_rgb, andhsl_shift. fx::sequence:reverse()now reverses processing order of child effectsfx::parallel:reverse()now right-aligns shorter children when reversed, so that all children end together
tachyonfx-v0.24.0
tachyonfx-0.24.0 - 2026-02-14
Added
wave_sin(t): fast, branchless parabolic sine approximation using normalized cycles (1.0= one period).parabolic_sin(t): parabolic sine approximation accepting radians.parabolic_cos(t): parabolic cosine approximation accepting radians.WavePattern: spatial pattern driven by composable wave interference. Built fromWaveLayers with FM/AM modulation, configurable contrast, and transition width.BlendPattern: spatial pattern that linearly interpolates between two sub-patterns, crossfading from one to the other over the effect's lifetime.fx::saturate,fx::saturate_fg: adjusts color saturation.fx::lighten,fx::lighten_fg: increases lightness toward white.fx::darken,fx::darken_fg: decreases lightness toward black.
Changed
SimpleRng: replace LCG with SplitMix32 for improved randomness quality- Internal
sin()/cos()now useparabolic_sin/parabolic_cosacross both std and no_std builds. - Internal
sqrt,round,floor,ceilnow always use micromath (faster than std in benchmarks). rgb_to_hsl: optimized with integer pipeline (~34% faster).hsl_to_rgb: uses direct sector computation (~31% faster).rgb_to_hsv: optimized with integer pipeline (~50% faster).
Breaking
blit_bufferandblit_buffer_regionno longer skip cells withCell::skip.
Ratatui removedCell::skipafter 0.30.0; skip-cell filtering may be re-added
once the replacement API stabilises.
tachyonfx-v0.23.0
tachyonfx 0.23.0 - 2026-01-28
Changed
- Replaced
ratatuidependency withratatui-core.
Removed
EffectTimelinewidget.- Example:
fx-chart: removed along withEffectTimeline.
Deprecated
EffectSpan: scheduled for removal along withEffectTimeline.Shader::as_effect_span()andEffect::as_effect_span(): deprecated as part ofEffectSpanremoval.
tachyonfx-v0.22.0
tachyonfx 0.22.0 - 2025-12-25
Changed
- Ratatui dependency updated to 0.30.0
tachyonfx-v0.21.0
tachyonfx 0.21.0 - 2025-12-97
Added
- DSL Completion Engine: Context-aware autocompletion for DSL expressions with intelligent matching.
- Context-aware suggestions: Understands namespaces, method chains, function calls, and struct initialization.
- Fuzzy matching: Filters completions using prefix, acronym, and subsequence matching.
- Type tracking: Tracks
letbindings and suggests variables where type-appropriate. - Parameter hints: Shows expected parameter types in function calls.
Effect::with_rng()now properly supported by randomized effects for reproducible animations:fx::glitch: Controls random cell selection and glitch typesfx::dissolve,fx::dissolve_to,fx::coalesce,fx::coalesce_from: Controls random cell thresholdsfx::explode: Controls explosion forces and trajectoriesfx::slide_in,fx::slide_out: Controls random positional variancefx::sweep_in,fx::sweep_out: Controls random positional variance
DSL
SimpleRngconstructors (SimpleRng::new,SimpleRng::default) are now available in DSL expressions.
Changed
- Replaced custom math approximations with
micromathlibrary for no_std builds.
Fixed
CellIteratornow correctly iterates over buffers larger than 65535 cells.
tachyonfx-v0.20.1
tachyonfx 0.20.1 - 2025-10-19
Fixed
- Resolve
Color::Resetduring color interpolation (fade and hsl effects).
tachyonfx 0.20.0 - 2025-10-19
The docs for all effects supported by the DSL now contain live examples. Live examples link to TachyonFX FTL on click.
Added
- DSL Examples in docs: All DSL-supported effects now include interactive demo snippets in their documentation.
EffectManager::is_running(): Returns whether there are any active effects.EffectManager::cancel_unique_effect(): Cancels a running unique effect by its key.
DSL
Layoutmethods: Added.direction(Direction)and.flex(Flex).- Zero-argument validation: DSL now properly rejects arguments passed to zero-argument constructors.
Fixed
- fix
wasmfeature by updating internalweb-timereferences. DslParseErroris now exported when thedslfeature is enabled.
tachyonfx-v0.20.0
tachyonfx 0.20.0 - 2025-10-19
The docs for all effects supported by the DSL now contain live examples. Live examples link to TachyonFX FTL on click.
Added
- DSL Examples in docs: All DSL-supported effects now include interactive demo snippets in their documentation.
EffectManager::is_running(): Returns whether there are any active effects.EffectManager::cancel_unique_effect(): Cancels a running unique effect by its key.
DSL
Layoutmethods: Added.direction(Direction)and.flex(Flex).- Zero-argument validation: DSL now properly rejects arguments passed to zero-argument constructors.
Fixed
- fix
wasmfeature by updating internalweb-timereferences. DslParseErroris now exported when thedslfeature is enabled.
tachyonfx-v0.19.0
tachyonfx 0.19.0 - 2025-09-27
The documentation for most effects now contain links to interactive examples powered by
tachyonfx-ftl.
Added
fx::evolve: Creates evolving text effects that transform characters through a series of symbols.
Combine with.with_pattern()for progressive transformation.fx::evolve_into: Evolve effect variant that reveals underlying buffer content at completion (alpha=1.0).fx::evolve_from: Evolve effect variant that reveals underlying buffer content at the start (alpha=0.0).EvolveSymbolSetenum: Defines symbol progressions for evolve effects with variants:BlocksHorizontal: Horizontal block progression (▏▎▍▌▋▊▉█)BlocksVertical: Vertical block progression (▁▂▃▄▅▆▇█)CircleFill: Circle fill progression (◌◎◍●)Circles: Circle progression (·•◉●)Quadrants: Quadrant block progression (▖▘▗▝▚▞▙▛▜▟█)Shaded: Shading progression (░▒▓█)Squares: Square progression (·▫▪◼█)
Patterntrait: New pattern-based spatial effects system for controlling how effects progress across screen areas:CheckerboardPattern: Creates alternating checkerboard reveal patterns with configurable cell size and transition widthCoalescePattern: Randomized coalescing effects where cells activate at random thresholds for organic transitionsDiagonalPattern: Diagonal sweep effects in four directions (top-left to bottom-right, etc.) with smooth gradientsDissolvePattern: Randomized dissolve effects where cells deactivate at random thresholds - the reverse ofCoalescePatternRadialPattern: Radial expansion effects from configurable center points with parameterized transition widthsSweepPattern: Linear sweep effects in four cardinal directions (left-to-right, right-to-left, up-to-down, down-to-up)
Effect::with_pattern(): Applies spatial patterns to pattern-compatible effects, supporting:fx::coalesce,fx::coalesce_fromfx::dissolve,fx::dissolve_to,fx::evolve,fx::evolve_from,fx::evolve_intofx::explodefx::hsl_shift,fx::hsl_shift_fgfx::fade_from,fx::fade_from_fg,fx::fade_to,fx::fade_to_fgfx::paint,fx::paint_fg,fx::paint_bg
- Interactive Examples: DSL examples for most effects at https://junkdog.github.io/tachyonfx-ftl/ and linked from docs.
fx::paint: Applies color painting effects to foreground and background.fx::paint_fg: Paints only the foreground color.fx::paint_bg: Paints only the background color.
Breaking Changes
fx::translate: Changed fromtranslate(Option<Effect>, (i16, i16), timer)totranslate(Effect, Offset, timer).
DSL
CellFiltermethod chaining: supports.negated(),.into_static(), and.clone()methods in DSL expressions.fx::translateeffect now available in DSL expressions with full roundtrip support.- Documentation revised for conciseness and to reflect current DSL capabilities and limitations.
Changed
FilterProcessor::validator(): Changed visibility frompub(crate)topub.CellValidator: Changed visibility frompub(crate)topub.CellValidator::is_valid(): Changed visibility frompub(crate)topub.
Deprecated
FilterProcessor::predicate(): Deprecated in favor ofvalidator()method which provides better performance.fx::resize_area(): Deprecated due to poor design and functionality issues. No replacement planned.- Feature
web-time: Use thewasmfeature instead.
Fixed
- no_std compatibility: removed
simple-easingcrate dependency. - no_std compatibility: removed implicit std math function usage with feature-gated implementations.
- Fixed
Interpolation::CubicOutandInterpolation::CubicInOutincorrectly calling circular easing functions. - Fixed
Interpolation::QuintInto use correct mathematical formula. fx::remap_alpha: Fixed incomplete reset implementation that could cause state persistence across effect resets.
Removed
simple-easingdependency: replaced with internal easing implementations for better no_std compatibility.
tachyonfx-v0.18.0
tachyonfx 0.18.0 - 2025-09-07
Breaking Changes
- Timer interpolation behavior: Effects that implicitly reverse timers (like
slide_out,coalesce, etc.) now use
mirrored()instead ofreversed()to preserve interpolation curves. This affects the visual behavior of these
effects when using asymmetric interpolation curves.
Added
CellFilter::Static: optimization wrapper that treats wrapped filters as static for performance.CellFilter::into_static(): convenience method to wrap a filter inCellFilter::Static.CellFilter::negated(): convenience method to wrap a filter inCellFilter::Not.EffectTimer::mirrored(): returns a timer with reversed direction and flipped interpolation, preserving the visual
curve shape when used with effects that reverse at construction time.Interpolation::flipped(): returns an interpolation with In/Out variants swapped (e.g.,QuadInbecomesQuadOut).
Fixed
fx::effect_fn()andfx::effect_fn_buf(): Fixed panic whenreset()is called. These functions now properly
preserve and restore original state during reset operations.- Fixed issue where effects that reverse timers at construction-time would incorrectly flip interpolation curves.
tachyonfx-v0.17.1
tachyonfx 0.17.1 - 2025-08-28
Fixed
fx::expand(): Now properly resets both internal stretch effects.fx::offscreen_buffer(): Now properly delegates reset to the wrapped effect.
tachyonfx 0.17.0 - 2025-08-24
This release introduces several breaking changes, but shouldn't impact most existing codebases.
Breaking Changes
Interpolatabletrait has been simplified fromInterpolatable<T>toInterpolatable.- Effect API refactoring:
Effectno longer implementsShadertrait; methods are now direct onEffect. - Major ColorCache API overhaul: The
ColorCacheAPI has been completely redesigned for improved flexibility and
performance:- Generic signature change:
ColorCache<Context, const N: usize>fromColorCache<const N: usize> - Method signature changes:
- Old:
memoize_fg(from: Color, to: Color, alpha: f32, f: F) -> Color - New:
memoize_fg(from: Color, context: Context, f: F) -> Color - Removed
to: Colorandalpha: f32parameters, replaced with genericcontext: Contextparameter
- Old:
- Generic signature change:
- CellFilter API optimization and restructuring: Significant performance improvements through static filter analysis
and bitmask caching, with breaking API changes:- Method rename:
CellFilter::selector()→CellFilter::predicate() - Lifetime parameter added:
CellPredicatenow requires lifetime parameterCellPredicate<'_> - Ownership model change:
CellPredicatenow borrowsCellFilterinstead of owning it - Performance improvement: Static filters (Area, Position, etc.) are pre-computed as bitmasks for O(1) lookups
- Method rename:
- LruCache: The key type
Know requiresCopyin addition to existing bounds for performance optimizations.
Added
stdfeature flag: controls standard library usage. Disabling enables no-std compatibility for
embedded environments and projects like mousefood.CellIterator::for_each_cell(): Performance-optimized method for iterating over cells without division and
modulo operations. Recommended for all cell processing unless iterator combinators are needed.fx::stretch(): Creates a stretching effect that expands or shrinks rectangular areas using block characters (▏▎▍▌▋▊▉█).fx::expand(): Creates a bidirectional expansion effect that stretches outward from the center in both directions simultaneously.FilterProcessor: Automatically optimizesCellFilterevaluation by choosing between static
(pre-computed bitmask) and dynamic (per-cell evaluation) strategies. ImplementsFrom<CellFilter>.
Changed
LruCache:Vis no longer required to implementClone.EffectMangerimplementsDebugtrait.- Example restructuring: Migrated all examples to independent Cargo workspace members:
examples/commoncrate with shared utilities (gruvboxcolor theme,windowhelper)- Examples now standalone crates with their own
Cargo.toml - Run with
cargo run -p {example-name}instead ofcargo run --example {name}
Removed
- Example:
dsl-playground: as it was a poor example of the DSL and of little value. - Example:
open-window: removed due to its poor design and ergonomics. - Removed
colorsysdependency, only used for indexed color conversion.
