github ArthurSonzogni/FTXUI v7.0.0

6 hours ago

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

New Contributors

Full Changelog: v6.1.9...v7.0.0

Don't miss a new FTXUI release

NewReleases is sending notifications on new releases.