Skip to content

Releases: ratatui/tachyonfx

tachyonfx-v0.25.0

27 Feb 09:36
34c9243

Choose a tag to compare

tachyonfx-0.25.0 - 2026-02-27

Added

  • CellFilter::NonEmpty: selects cells that contain a non-space symbol.
  • Interpolation::SmoothStep and Interpolation::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, and hsl_shift.
  • fx::sequence: reverse() now reverses processing order of child effects
  • fx::parallel: reverse() now right-aligns shorter children when reversed, so that all children end together

tachyonfx-v0.24.0

14 Feb 19:55
6d9b67d

Choose a tag to compare

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 from WaveLayers 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 use parabolic_sin/parabolic_cos across both std and no_std builds.
  • Internal sqrt, round, floor, ceil now 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_buffer and blit_buffer_region no longer skip cells with Cell::skip.
    Ratatui removed Cell::skip after 0.30.0; skip-cell filtering may be re-added
    once the replacement API stabilises.

tachyonfx-v0.23.0

28 Jan 11:17
bbcab7d

Choose a tag to compare

tachyonfx 0.23.0 - 2026-01-28

Changed

  • Replaced ratatui dependency with ratatui-core.

Removed

  • EffectTimeline widget.
  • Example: fx-chart: removed along with EffectTimeline.

Deprecated

  • EffectSpan: scheduled for removal along with EffectTimeline.
  • Shader::as_effect_span() and Effect::as_effect_span(): deprecated as part of EffectSpan removal.

tachyonfx-v0.22.0

26 Dec 10:42
5863d55

Choose a tag to compare

tachyonfx 0.22.0 - 2025-12-25

Changed

  • Ratatui dependency updated to 0.30.0

tachyonfx-v0.21.0

07 Dec 17:29
a9d2e01

Choose a tag to compare

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 let bindings 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 types
    • fx::dissolve, fx::dissolve_to, fx::coalesce, fx::coalesce_from: Controls random cell thresholds
    • fx::explode: Controls explosion forces and trajectories
    • fx::slide_in, fx::slide_out: Controls random positional variance
    • fx::sweep_in, fx::sweep_out: Controls random positional variance

DSL

  • SimpleRng constructors (SimpleRng::new, SimpleRng::default) are now available in DSL expressions.

Changed

  • Replaced custom math approximations with micromath library for no_std builds.

Fixed

  • CellIterator now correctly iterates over buffers larger than 65535 cells.

tachyonfx-v0.20.1

19 Oct 12:44
15933f3

Choose a tag to compare

tachyonfx 0.20.1 - 2025-10-19

Fixed

  • Resolve Color::Reset during color interpolation (fade and hsl effects).

tachyonfx 0.20.0 - 2025-10-19

image

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

  • Layout methods: Added .direction(Direction) and .flex(Flex).
  • Zero-argument validation: DSL now properly rejects arguments passed to zero-argument constructors.

Fixed

  • fix wasm feature by updating internal web-time references.
  • DslParseError is now exported when the dsl feature is enabled.

tachyonfx-v0.20.0

19 Oct 07:42
0a70f1c

Choose a tag to compare

tachyonfx 0.20.0 - 2025-10-19

image

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

  • Layout methods: Added .direction(Direction) and .flex(Flex).
  • Zero-argument validation: DSL now properly rejects arguments passed to zero-argument constructors.

Fixed

  • fix wasm feature by updating internal web-time references.
  • DslParseError is now exported when the dsl feature is enabled.

tachyonfx-v0.19.0

27 Sep 18:12
c760ab0

Choose a tag to compare

tachyonfx 0.19.0 - 2025-09-27

interactive-examples

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).
  • EvolveSymbolSet enum: 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 ( ·▫▪◼█)
  • Pattern trait: 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 width
    • CoalescePattern: Randomized coalescing effects where cells activate at random thresholds for organic transitions
    • DiagonalPattern: Diagonal sweep effects in four directions (top-left to bottom-right, etc.) with smooth gradients
    • DissolvePattern: Randomized dissolve effects where cells deactivate at random thresholds - the reverse of CoalescePattern
    • RadialPattern: Radial expansion effects from configurable center points with parameterized transition widths
    • SweepPattern: 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_from
    • fx::dissolve, fx::dissolve_to,
    • fx::evolve, fx::evolve_from, fx::evolve_into
    • fx::explode
    • fx::hsl_shift, fx::hsl_shift_fg
    • fx::fade_from, fx::fade_from_fg,
    • fx::fade_to, fx::fade_to_fg
    • fx::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 from translate(Option<Effect>, (i16, i16), timer) to translate(Effect, Offset, timer).

DSL

  • CellFilter method chaining: supports .negated(), .into_static(), and .clone() methods in DSL expressions.
  • fx::translate effect 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 from pub(crate) to pub.
  • CellValidator: Changed visibility from pub(crate) to pub.
  • CellValidator::is_valid(): Changed visibility from pub(crate) to pub.

Deprecated

  • FilterProcessor::predicate(): Deprecated in favor of validator() method which provides better performance.
  • fx::resize_area(): Deprecated due to poor design and functionality issues. No replacement planned.
  • Feature web-time: Use the wasm feature instead.

Fixed

  • no_std compatibility: removed simple-easing crate dependency.
  • no_std compatibility: removed implicit std math function usage with feature-gated implementations.
  • Fixed Interpolation::CubicOut and Interpolation::CubicInOut incorrectly calling circular easing functions.
  • Fixed Interpolation::QuintIn to use correct mathematical formula.
  • fx::remap_alpha: Fixed incomplete reset implementation that could cause state persistence across effect resets.

Removed

  • simple-easing dependency: replaced with internal easing implementations for better no_std compatibility.

tachyonfx-v0.18.0

07 Sep 12:24
8bec9ae

Choose a tag to compare

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 of reversed() 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 in CellFilter::Static.
  • CellFilter::negated(): convenience method to wrap a filter in CellFilter::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., QuadIn becomes QuadOut).

Fixed

  • fx::effect_fn() and fx::effect_fn_buf(): Fixed panic when reset() 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

28 Aug 10:03
09fbfdc

Choose a tag to compare

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

  • Interpolatable trait has been simplified from Interpolatable<T> to Interpolatable.
  • Effect API refactoring: Effect no longer implements Shader trait; methods are now direct on Effect.
  • Major ColorCache API overhaul: The ColorCache API has been completely redesigned for improved flexibility and
    performance:
    • Generic signature change: ColorCache<Context, const N: usize> from ColorCache<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: Color and alpha: f32 parameters, replaced with generic context: Context parameter
  • 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: CellPredicate now requires lifetime parameter CellPredicate<'_>
    • Ownership model change: CellPredicate now borrows CellFilter instead of owning it
    • Performance improvement: Static filters (Area, Position, etc.) are pre-computed as bitmasks for O(1) lookups
  • LruCache: The key type K now requires Copy in addition to existing bounds for performance optimizations.

Added

  • std feature 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 optimizes CellFilter evaluation by choosing between static
    (pre-computed bitmask) and dynamic (per-cell evaluation) strategies. Implements From<CellFilter>.

Changed

  • LruCache: V is no longer required to implement Clone.
  • EffectManger implements Debug trait.
  • Example restructuring: Migrated all examples to independent Cargo workspace members:
    • examples/common crate with shared utilities (gruvbox color theme, window helper)
    • Examples now standalone crates with their own Cargo.toml
    • Run with cargo run -p {example-name} instead of cargo 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 colorsys dependency, only used for indexed color conversion.