Skip to content

Update dependency ArthurSonzogni/ftxui to v7 (ftxui) - #211

Open
mcmarius wants to merge 4 commits into
ftxuifrom
renovate/ftxui-arthursonzogni-ftxui-7.x
Open

mcmarius wants to merge 4 commits into
ftxuifrom
renovate/ftxui-arthursonzogni-ftxui-7.x

Conversation

@mcmarius

Copy link
Copy Markdown
Owner

This PR contains the following updates:

Package Update Change
ArthurSonzogni/ftxui major 6.1.9 → 7.0.3
ArthurSonzogni/ftxui major v6.1.9 → v7.0.3

Release Notes

ArthurSonzogni/ftxui (ArthurSonzogni/ftxui)

v7.0.3

Compare Source

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

Compare Source

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

Compare Source

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

Compare Source

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: ArthurSonzogni/FTXUI@v6.1.9...v7.0.0


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate CLI.

renovate-bot and others added 4 commits September 24, 2026 00:24
set_compiler_flags() compared the value of the RUN_SANITIZERS keyword against
the literal string "TRUE", so callers that pass an option variable, e.g.
`RUN_SANITIZERS ${USE_ASAN}` (which expands to ON/OFF), never matched and the
sanitizer flags were silently dropped: CI jobs configured with -DUSE_ASAN=ON
built and ran completely uninstrumented binaries.

Use a real boolean test so that ON/OFF, TRUE/FALSE and 1/0 all behave as
expected. Omitting RUN_SANITIZERS still defaults to running the sanitizers.
Recent glibc implements tcsetattr() through the termios2 ioctl, so memcheck no
longer reports the syscall parameter as ioctl(TCSETS) but as ioctl(generic),
and it additionally reports an 8 byte read of an uninitialized value inside
___cbaud_to_speed(). Both come from libraries that ignore the return value of
tcgetattr() and then hand the untouched struct termios to tcsetattr(), which
happens whenever stdin is not a tty (e.g. when the executable is fed from a
file in CI).

Add narrow suppressions for these call stacks so scripts/run_valgrind.sh keeps
passing on recent distributions. The existing entry is kept as is, since it is
what older distributions used to report.
- include <thread>, <chrono> and <string> explicitly: the v7 headers do not
  provide them transitively anymore, so std::thread was not declared
- use ftxui::App (and <ftxui/component/app.hpp>) instead of ScreenInteractive,
  which was renamed in v7 (the old name only survives as a compatibility alias)
- link Threads::Threads explicitly: v7 dropped the PUBLIC Threads::Threads link
  it used to propagate, while the example still spawns a thread; without this
  the link may fail on targets that need an explicit thread library (winpthread
  with MinGW)
@mcmarius
mcmarius force-pushed the renovate/ftxui-arthursonzogni-ftxui-7.x branch from 2f6d86b to a10d445 Compare September 24, 2026 10:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants