Skip to content

Releases: ArthurSonzogni/FTXUI

v7.0.3

Choose a tag to compare

@github-actions github-actions released this 06 Aug 07:35
f921fad

Component

  • Bugfix: Fix incorrect mouse position in non-alternate-screen modes. The
    cursor position request (used to convert mouse coordinates from screen
    space to frame space) could be sent asynchronously, after the cursor had
    already moved away from the frame's origin, causing the terminal's reply to
    be misread as the wrong offset. Regressed by the 7.0.2 throttle fix, which
    made the request's 500ms throttle actually engage for the first time. See
    #1310.

v7.0.2

Choose a tag to compare

@github-actions github-actions released this 01 Aug 16:40
59e8fbb

Component

  • Bugfix: Fix high CPU usage (app and terminal emulator, e.g. tmux) caused by a
    cursor position request/reply feedback loop redrawing the screen at ~60fps in
    the non-alternate-screen modes. See #1302.
  • Animation frames are now produced only when requested via
    animation::RequestAnimationFrame() (e.g. by animation::Animator), as in
    FTXUI 6. Receiving an event no longer implicitly triggers an animation
    frame.
  • Bugfix: App::PostEvent is now thread safe again, as documented. Since the
    7.0.0 event loop rework it pushed into an unsynchronized buffer, racing with
    the main loop when called from another thread.
  • Bugfix: Fix unbounded memory growth in the event buffer. A receiver used
    during terminal setup was kept for the whole App lifetime, retaining every
    subsequent event (including every mouse move).

Dom

  • Performance: text computes its requirement once and renders only the
    visible lines. This makes scrolling a large text inside a frame
    significantly faster. Thanks @patlefort. See #1309.
  • Performance: text selection now only visits and stores the selected line
    range, instead of scanning and allocating one entry per line of the whole
    text on every frame.

v7.0.1

Choose a tag to compare

@github-actions github-actions released this 14 Jul 12:12
c100eab

Minor release to fix bugs introduced by v7.0.0

Screen

  • Bugfix: Restore TrueColor support on Windows Terminal (default to TrueColor on Windows and check WT_SESSION environment variable for WSL compatibility). See #1305.
  • Feature: Honor the NO_COLOR environment variable (https://no-color.org). When set and non-empty, colors degrade to the terminal's default colors.
  • Bugfix: Apple's Terminal.app (TERM_PROGRAM=Apple_Terminal) is now reported as Palette256 instead of TrueColor; it does not support 24bit colors.
  • Bugfix: An empty terminal name or terminal emulator name is now treated as unidentified by Terminal::ComputeColorSupport, instead of implying TrueColor support.
  • Bugfix (Windows): Downgrade color support when the console rejects VT processing (legacy consoles), instead of emitting TrueColor escape sequences.
  • Bugfix: Avoid segmentation fault / crash during static initialization if Color::RGB or other color constants are constructed globally/statically before main(). See #1303.

Build

  • Bugfix: Fix build failure when an older FTXUI is installed in a system
    include path (e.g. MacPorts upgrade). A CMake deduplication quirk was
    promoting the project's own -I include/ to -isystem, causing package
    managers' -I/opt/local/include (which may contain stale headers) to
    win. See #1299, #1300.

v7.0.0

Choose a tag to compare

@github-actions github-actions released this 13 Jun 21:50
d120f34

7.0.0 (2026-06-13)

Doc

  • Fix broken Doxygen output. See @markmandel in #1029.
  • Use Doxygen awesome. Add our own theme.
  • Break the documentation into several pages.

Build

  • Feature: Support amalgamated version.
    This provides a single-header (ftxui.hpp) and single-source (ftxui.cpp)
    version of the library, as well as a truly single-file header-only version
    (ftxui_all.hpp).
    This is the easiest way to vendor FTXUI into your project.
    See #1252.
  • Feature: Support umbrella header and target.
    Usage:
    #include <ftxui/ftxui.hpp>
    CMake: target_link_libraries(your_target PRIVATE ftxui::ftxui)
    Bazel: deps = ["@ftxui//:ftxui"]
    See #1252.
  • Feature: Support C++20 modules.
    This requires:
    • Using the Ninja or MSVC generator
    • A recent Clang/GCC/MSVC compiler.
    • Cmake 3.28 or higher.
      Usage:
    import ftxui;
    import ftxui.component;
    import ftxui.dom;
    import ftxui.screen;
    import ftxui.util;
    Thanks @mikomikotaishi for PR #1015.
  • Consolidate C++20 code into named modules to reduce compile times and improve flexibility. Thanks @mikomikotaishi in #1221.
  • Feature: Support Meson build system. Thanks @Mintonmu in #1259.
  • Remove dependency on 'pthread'.
  • Bugfix: Bazel target @ftxui is now visible. Thanks @dskkato in #1157.
  • ABI: Explicitly size all public enums to uint8_t for ABI layout stability.
  • ABI: Add reserved virtual methods to Screen and Node for future
    extensibility without breaking ABI.

General

  • Breaking (Renames):

    • Pixel is renamed to Cell.
    • Image is renamed to Surface.
    • ScreenInteractive is renamed to App.
    • PixelAt method is renamed to CellAt.
      Compatibility aliases and headers are provided to avoid breaking existing code.
  • Breaking. Move to std::string_view instead of const std::string& where
    applicable. This yields better interoperability with string literals and
    avoids unnecessary copies. Thanks @mikomikotaishi for PR #1154

Component

  • Feature: Improved signal handling. Upgrade signal interception to use POSIX sigaction for robust signal masking and cleanup handler preservation. Protect against double terminal restoration on exit using atomic raw-state tracking. Add support for additional POSIX signals (SIGBUS, SIGSYS as crash signals, and SIGQUIT, SIGHUP as deferred termination signals) and fix async-signal-safety issues in crash paths.
  • Bugfix: Fix Input cursor visibility when using a custom Renderer on nested containers. See #1220. Thanks @nmarks99.
  • Fix Input cursor positioning and scroll stability. See #1196. Thanks @739C1AE2.
  • Fix Input support for non-ASCII characters in password mode. See #1196. Thanks @739C1AE2.
  • Performance: Mitigate cursor flickering during redraw in App. See #1196. Thanks @739C1AE2.
  • Feature: POSIX Piped Input Handling.
    • Allows FTXUI applications to read data from stdin (when piped) while still receiving keyboard input from the terminal.
    • Enabled by default.
    • Can be disabled using App::HandlePipedInput(false).
    • Only available on Linux and macOS.
      Thanks @HarryPehkonen for PR #1094.
  • Fix App::FixedSize screen stomps on the preceding terminal
    output. Thanks @zozowell in #1064.
  • Fix vertical ftxui::Slider. The "up" key was previously decreasing the
    value. Thanks @its-pablo in #1093 for reporting the issue.
  • Fix Windows UTF-16 key input handling. Emoji and other code points outside the
    Basic Multilingual Plane (BMP) are now correctly processed. Thanks @739C1AE2
    in #1160 for fixing the issue.
  • Fix Input style is now colorschem agnostic. Thanks @Smail in #1170 for reporting
    and fixing the issue.
  • Fix App::Post(..) is now thread safe. Thanks @739C1AE2 in
    ~1183 for reporting the issue. This regressed in non released versions.

Dom

  • Feature: Support newline \n within text() and vtext(). Thanks
    @mikomikotaishi in #1215.
  • Bugfix: dbox now propagates focus from top-most layers to bottom-most
    layers, matching the visual representation. See #1213. Thanks @vtnerd.
  • Feature: Support for table border decorators. This allows for instance to
    color the border of a table. Thanks @Sckab in #1186 for proposing it.
  • Fix integer overflow in ComputeShrinkHard. Thanks @its-pablo in #1137 for
    reporting and fixing the issue.
  • Add specialization for vbox/hbox/dbox to allow a container of Element as
    as input. Thanks @nbusser in #1117.
  • Bugfix: In the gridbox, add the children to the tree so that the default
    behaviors inherited from Node are correctly implemented. Thanks KenReneris for
    #1070.
  • Update: The gauge in a flexible now takes the available space in the
    opposite direction. Thanks @Ardet696 in #1203.
  • Feature: Add parameterized _factor variants of flex decorators. These allow
    specifying custom grow/shrink factors:
    flex_factor(grow, shrink), flex_grow_factor(grow),
    flex_shrink_factor(shrink), with x and y axis variants.
    Usage: element | flex_grow_factor(3).

Screen

  • Performance: Collapse the per-row cursor walk-up in the non-clear
    Screen::ResetPosition into a single parameterized CSI cursor-up
    (\x1B[<n>A) instead of emitting one \x1B[1A per row. This reduces the
    per-frame escape bytes during steady-state redraw (e.g. ~197 -> 6 bytes for a
    50-row screen, ~33x). On-screen output is unchanged.
  • Performance: Optimize Screen::ToString(), Color::Print() and
    string_width().
    This was achieved by:
    1. Skipping calling string_width for cells with single-byte data (the
      primary driver for performance gains).
    2. Pre-allocating memory for the output string.
    3. Optimizing the ASCII path for string width calculation.
      Benchmarks show a significant improvement:
    • Basic rendering: ~27% faster.
    • Text rendering: ~27% faster.
    • Styled rendering: ~38% faster.
      Thanks @killerdevildog for initiating (2) in #1188.

What's Changed

Read more

v6.1.9

Choose a tag to compare

@github-actions github-actions released this 07 May 20:49
5cfed50

Build

If all goes well (pending), ftxui should appear in the Bazel central repository.
It can be imported into your project using the following lines:

MODULE.bazel

bazel_dep(name = "ftxui", version = "6.1.9")

Thanks @robinlinden and @kcc for the reviews.

dom

  • Bugfix: Restore the dbox behavior from ftxui 5.0.0. To apply bgcolor
    blending between the two layers, a new dboxBlend will be added.

v6.1.8

Choose a tag to compare

@github-actions github-actions released this 01 May 09:33
784f53f

Build

  • Feature: Support bazel build system. See #1032.
    Proposed by Kostya Serebryany @kcc

Component

  • Bugfix: Fix a crash with ResizeableSplit. See #1023.
    • Clamp screen size to terminal size.
    • Disallow ResizeableSplit with negative size.

Dom

  • Bugfix: Disallow specifying a negative size constraint. See #1023.

v6.0.2

Choose a tag to compare

@github-actions github-actions released this 30 Mar 01:28
09eb2f7
  • BugFix: Fix major crash on Windows affecting all components. See #1020
  • BugFix: Fix focusRelative.

v6.0.1

Choose a tag to compare

@github-actions github-actions released this 28 Mar 11:34
ee24bec

Please do not use. Prefer v6.0.2 or newer.

Same as v6.0.0.

Due to a problem tag v6.0.0 was replaced. This isn't a good practice and affect
developers that started using it in the short timeframe. Submitting a new
release with the same content is the best way to fix this.

See #1017 and #1019.

v6.0.0

Choose a tag to compare

@github-actions github-actions released this 27 Mar 21:36
327f43b

6.0.0 (2025-03-23)

Please do not use. Prefer v6.0.2 or newer.

Component

  • Feature: Add support for raw input. Allowing more keys to be detected.
  • Feature: Add ScreenInteractive::ForceHandleCtrlC(false) to allow component
    to fully override the default Ctrl+C handler.
  • Feature: Add ScreenInteractive::ForceHandleCtrlZ(false) to allow component
    to fully override the default Ctrl+Z handler.
  • Feature: Add Mouse::WeelLeft and Mouse::WeelRight events on supported
    terminals.
  • Feature: Add Event::DebugString().
  • Feature: Add support for Input's insert mode. Add InputOption::insert
    option. Added by @mingsheng13.
  • Feature: Add DropdownOption to configure the dropdown. See #826.
  • Feature: Add support for Selection. Thanks @clement-roblot. See #926.
    • See ScreenInteractive::GetSelection().
    • See ScreenInteractive::SelectionChange(...) listener.
  • Bugfix/Breaking change: Mouse transition:
    • Detect when the mouse move, as opposed to being pressed.
      The Mouse::Moved motion was added.
    • Dragging the mouse with the left button pressed now avoids activating
      multiple checkboxes.
    • A couple of components are now activated when the mouse is pressed,
      as opposed to being released.
      This fixes: #773
      This fixes: #792
  • Bugfix: mouse.control is now reported correctly.
  • Feature: Add ScreenInteractive::FullscreenPrimaryScreen(). This allows
    displaying a fullscreen component on the primary screen, as opposed to the
    alternate screen.
  • Bugfix: Input onchange was not called on backspace or delete key.
    Fixed by @chrysante in chrysante in PR #776.
  • Bugfix: Propertly restore cursor shape on exit. See #792.
  • Bugfix: Fix cursor position in when in the last column. See #831.
  • Bugfix: Fix ResizeableSplit keyboard navigation. Fixed by #842.
  • Bugfix: Fix Menu focus. See #841
  • Feature: Add ComponentBase::Index(). This allows to get the index of a
    component in its parent. See #932
  • Feature: Add EntryState::index. This allows to get the index of a menu entry.
    See #932
  • Feature: Add SliderOption::on_change. This allows to set a callback when the
    slider value changes. See #938.
  • Bugfix: Handle Dropdown with no entries.
  • Bugfix: Fix crash in LinearGradient due to float precision and an off-by-one
    mistake. See #998.

Dom

  • Feature: Add italic decorator. For instance:
    auto italic_text = text("Italic text") | italic;
    auto italic_text = italic(text("Italic text"));
    Proposed by @KenReneris in #1009.
  • Feature: Add hscroll_indicator. It display an horizontal indicator
    reflecting the current scroll position. Proposed by @ibrahimnasson in
    issue 752
  • Feature: Add extend_beyond_screen option to Dimension::Fit(..), allowing
    the element to be larger than the screen. Proposed by @LordWhiro. See #572 and
    #949.
  • Feature: Add support for Selection. Thanks @clement-roblot. See #926.
    • See selectionColor decorator.
    • See selectionBackgroundColor decorator.
    • See selectionForegroundColor decorator.
    • See selectionStyle(style) decorator.
    • See selectionStyleReset decorator.
  • Breaking change: Change how "focus"/"select" are handled. This fixes the
    behavior.

Screen

  • Feature: Add Box::IsEmpty().
  • Feature: Color transparency
    • Add Color::RGBA(r,g,b,a).
    • Add Color::HSVA(r,g,b,a).
    • Add Color::Blend(Color).
    • Add Color::IsOpaque()

Util

  • Feature: Support arbitrary Adapter for ConstStringListRef. See #843.

Build

  • Support for cmake's "unity/jumbo" builds. Fixed by @ClausKlein.

v5.0.0

Choose a tag to compare

@github-actions github-actions released this 19 Aug 14:43
cdf2890

Component

  • Breaking: MenuDirection enum is renamed Direction
  • Breaking: GaugeDirection enum is renamed Direction
  • Breaking: Direction enum is renamed WidthOrHeight
  • Breaking: Remove ComponentBase copy constructor/assignment.
  • Breaking: MenuOption::entries is renamed MenuOption::entries_option.
  • Breaking: Ref<{Component}Option> becomes {Component}Option in component constructors.
  • Feature: ResizeableSplit now support arbitrary element as a separator.
  • Feature: input is now supporting multiple lines.
  • Feature: input style is now customizeable.
  • Bugfix: Support F1-F5 from OS terminal.
  • Feature: Add struct based constructor:
    Component Button(ButtonOption options);
    Component Checkbox(CheckboxOption options);
    Component Input(InputOption options);
    Component Menu(MenuOption options);
    Component MenuEntry(MenuEntryOption options);
    Component Radiobox(RadioboxOption options);
    Component Slider(SliderOption<T> options);
    Component ResizableSplit(ResizableSplitOption options);
  • Feature: Add ScreenInteractive::TrackMouse(false) disable mouse support.

Dom

  • Feature: Add hyperlink decorator. For instance:
    auto link = text("Click here") | hyperlink("https://github.com/FTXUI")
    See the OSC 8 page.
    FTXUI support proposed by @aaleino in #662.

Screen

  • Breaking: WordBreakProperty becomes a uint8_t enum. This yields a 0.8%
    performance improvement.
  • Breaking: Remove user defined Pixel constructor and equality operator.
  • Performance: 19% faster on benchmarks.

Build

  • Check version compatibility when using cmake find_package()
  • Add FTXUI_DEV_WARNING options to turn on warnings when building FTXUI
  • Turn OFF by default FTXUI_BUILD_DOCS
  • Turn OFF by default FTXUI_BUILD_EXAMPLE

Contributors

@ArthurSonzogni, @BurningEnlightenment, @GermanAizek, @LeeKyuHyuk,
@LostInCompilation, @ProkopRandacek, @Ruebled, @SpaceIm, @StefanRvO, @avighnac,
@cblack-dev, @clement-roblot, @dev-null-undefined, @hzeller , @jubalh, @lefticus
, @lexika979, @mavam, @mingsheng13, @mr-mocap, @niosus, @p5quared, @robinlinden, @v1nns, @yrashk