Releases: ArthurSonzogni/FTXUI
Release list
v7.0.3
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
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. byanimation::Animator), as in
FTXUI 6. Receiving an event no longer implicitly triggers an animation
frame. - Bugfix:
App::PostEventis 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 wholeApplifetime, retaining every
subsequent event (including every mouse move).
Dom
- Performance:
textcomputes its requirement once and renders only the
visible lines. This makes scrolling a large text inside aframe
significantly faster. Thanks @patlefort. See #1309. - Performance:
textselection 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
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_SESSIONenvironment variable for WSL compatibility). See #1305. - Feature: Honor the
NO_COLORenvironment 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 asPalette256instead ofTrueColor; 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::RGBor other color constants are constructed globally/statically beforemain(). 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
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:CMake:#include <ftxui/ftxui.hpp>
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:
Thanks @mikomikotaishi for PR #1015.import ftxui; import ftxui.component; import ftxui.dom; import ftxui.screen; import ftxui.util;
- 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_tfor ABI layout stability. - ABI: Add reserved virtual methods to
ScreenandNodefor future
extensibility without breaking ABI.
General
-
Breaking (Renames):
Pixelis renamed toCell.Imageis renamed toSurface.ScreenInteractiveis renamed toApp.PixelAtmethod is renamed toCellAt.
Compatibility aliases and headers are provided to avoid breaking existing code.
-
Breaking. Move to
std::string_viewinstead ofconst 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
sigactionfor 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,SIGSYSas crash signals, andSIGQUIT,SIGHUPas deferred termination signals) and fix async-signal-safety issues in crash paths. - Bugfix: Fix
Inputcursor visibility when using a customRendereron nested containers. See #1220. Thanks @nmarks99. - Fix
Inputcursor positioning and scroll stability. See #1196. Thanks @739C1AE2. - Fix
Inputsupport 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
\nwithintext()andvtext(). Thanks
@mikomikotaishi in #1215. - Bugfix:
dboxnow 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/dboxto 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
gaugein a flexible now takes the available space in the
opposite direction. Thanks @Ardet696 in #1203. - Feature: Add parameterized
_factorvariants of flex decorators. These allow
specifying custom grow/shrink factors:
flex_factor(grow, shrink),flex_grow_factor(grow),
flex_shrink_factor(shrink), withxandyaxis variants.
Usage:element | flex_grow_factor(3).
Screen
- Performance: Collapse the per-row cursor walk-up in the non-clear
Screen::ResetPositioninto a single parameterized CSI cursor-up
(\x1B[<n>A) instead of emitting one\x1B[1Aper 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:- Skipping calling
string_widthfor cells with single-byte data (the
primary driver for performance gains). - Pre-allocating memory for the output string.
- 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.
- Skipping calling
What's Changed
- Add documentation about Bazel by @ArthurSonzogni in #1045
- Add modules support by @mikomikotaishi in #1015
- Fix comment typos in Maybe component by @ArthurSonzogni in #1052
- Fix comment bug by @ArthurSonzogni in #1053
- Fix minor typo in terminal comment by @ArthurSonzogni in #1054
- Fix typos and grammar in docs and comments by @ArthurSonzogni in #1055
- Improve module documentation by @ArthurSonzogni in #1056
- Remove @InGroup from class member docs by @ArthurSonzogni in #1058
- Add docs for additional install methods by @ArthurSonzogni in #1059
- Bug: ScreenInteractive::FixedSize screen stomps on the history terminal output by @zozowell in #1064
- Stop using Sender/Receiver in TerminalInputParser. by @ArthurSonzogni in #1073
- Remove redundant member from ButtonBase by @mirion-dev in #1076
- Fix
Examples(fromREADME.md) section link by @deyna256 in #1079 - Add ftxui convenience/umbrella module to cmake rules to fix #1083 by @tattwamasi in #1085
- Remove threads 2 by @ArthurSonzogni in #1091
- Fix: Use of max() min() collides with predefined macros in Windows build by @solosTec in #1084
- Fix slider Up key press. by @ArthurSonzogni in #1099
- Improve example style. by @ArthurSonzogni in #1101
- Add new project to the list by @d06i in #1102
- Fixed bug in component/button example: by @m00se-3 in #1107
- Improved the installation method via Conan. by @xiaoditx in #1106
- fixed a typo by @nodeluna in #1110
- Add tic-tac-toe as an example project using FTXUI by @birland in #1109
- Fix use of uninitialized cursor variable by @bearzly in #1111
- Add comprehensive GitHub Copilot instructions for FTXUI development by @Copilot in #1121
- Add explicit include for std::max by @meekee7 in #1124
- Fix CMake 3.12 compatibility by adding required install destinations by @ArthurSonzogni in #1127
- Updated bazel build example section in README by @h-queiroz in #1128
- Add 'typing-speed-test' to README.md by @ymcx in #1126
- Add min_size and max_size options to ResizableSplit component by @Copilot in #1132
- Add versioned documentation by @ArthurSonzogni in #1123
- Mitigate integer overflow in ComputeShrinkHard by @its-pablo in #1138
- Add
Merge()specializations to support moreElementcontainers by @nbusser in #1117 - Adds opt-in support for applications that need to read piped data from stdin while still receiving interactive keyboard input by @HarryPehkonen in https://github.com/ArthurSo...
v6.1.9
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
dboxbehavior from ftxui 5.0.0. To apply bgcolor
blending between the two layers, a newdboxBlendwill be added.
v6.1.8
v6.0.2
- BugFix: Fix major crash on Windows affecting all components. See #1020
- BugFix: Fix focusRelative.
v6.0.1
v6.0.0
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 defaultCtrl+Chandler. - Feature: Add
ScreenInteractive::ForceHandleCtrlZ(false)to allow component
to fully override the defaultCtrl+Zhandler. - Feature: Add
Mouse::WeelLeftandMouse::WeelRightevents on supported
terminals. - Feature: Add
Event::DebugString(). - Feature: Add support for
Input's insert mode. AddInputOption::insert
option. Added by @mingsheng13. - Feature: Add
DropdownOptionto configure the dropdown. See #826. - Feature: Add support for Selection. Thanks @clement-roblot. See #926.
- See
ScreenInteractive::GetSelection(). - See
ScreenInteractive::SelectionChange(...)listener.
- See
- 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
- Detect when the mouse move, as opposed to being pressed.
- 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:
Inputonchangewas 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
ResizeableSplitkeyboard navigation. Fixed by #842. - Bugfix: Fix
Menufocus. 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
Dropdownwith no entries. - Bugfix: Fix crash in
LinearGradientdue to float precision and an off-by-one
mistake. See #998.
Dom
- Feature: Add
italicdecorator. For instance:auto italic_text = text("Italic text") | italic;
Proposed by @KenReneris in #1009.auto italic_text = italic(text("Italic text"));
- Feature: Add
hscroll_indicator. It display an horizontal indicator
reflecting the current scroll position. Proposed by @ibrahimnasson in
issue 752 - Feature: Add
extend_beyond_screenoption toDimension::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
selectionColordecorator. - See
selectionBackgroundColordecorator. - See
selectionForegroundColordecorator. - See
selectionStyle(style)decorator. - See
selectionStyleResetdecorator.
- See
- 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()
- Add
Util
- Feature: Support arbitrary
AdapterforConstStringListRef. See #843.
Build
- Support for cmake's "unity/jumbo" builds. Fixed by @ClausKlein.
v5.0.0
Component
- Breaking: MenuDirection enum is renamed Direction
- Breaking: GaugeDirection enum is renamed Direction
- Breaking: Direction enum is renamed WidthOrHeight
- Breaking: Remove
ComponentBasecopy constructor/assignment. - Breaking: MenuOption::entries is renamed MenuOption::entries_option.
- Breaking:
Ref<{Component}Option>becomes{Component}Optionin component constructors. - Feature:
ResizeableSplitnow support arbitrary element as a separator. - Feature:
inputis now supporting multiple lines. - Feature:
inputstyle 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
hyperlinkdecorator. For instance:See the OSC 8 page.auto link = text("Click here") | hyperlink("https://github.com/FTXUI")
FTXUI support proposed by @aaleino in #662.
Screen
- Breaking:
WordBreakPropertybecomes 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_WARNINGoptions 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