FTXUI/doc/cpp20-modules.md
tattwamasi 994915dbb9
Some checks failed
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (cl, cl, windows-latest) (push) Has been cancelled
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (clang, clang++, macos-latest) (push) Has been cancelled
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (clang, clang++, ubuntu-latest) (push) Has been cancelled
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (gcc, g++, macos-latest) (push) Has been cancelled
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (gcc, g++, ubuntu-latest) (push) Has been cancelled
Build / CMake, ${{ matrix.compiler }}, ${{ matrix.os }} (cl, Windows MSVC, windows-latest) (push) Has been cancelled
Build / CMake, ${{ matrix.compiler }}, ${{ matrix.os }} (gcc, Linux GCC, ubuntu-latest) (push) Has been cancelled
Build / CMake, ${{ matrix.compiler }}, ${{ matrix.os }} (llvm, llvm-cov gcov, Linux Clang, ubuntu-latest) (push) Has been cancelled
Build / CMake, ${{ matrix.compiler }}, ${{ matrix.os }} (llvm, llvm-cov gcov, MacOS clang, macos-latest) (push) Has been cancelled
Build / Test modules (llvm, ubuntu-latest) (push) Has been cancelled
Documentation / documentation (push) Has been cancelled
Add ftxui convenience/umbrella module to cmake rules to fix #1083 (#1085)
* Add the umbrella module ftxui to the cmake module build.

* Update cpp20 modules documentation.
2025-07-27 11:39:46 +02:00

2.9 KiB

@page cpp20-modules C++20 Modules

Warning

This feature is still in development, and the API may change in future releases. Your contribution is needed to help us improve the compatibility and usability of C++20 modules in FTXUI. If you encounter any issues or have suggestions, please open an issue.

FTXUI experimentally supports C++20 modules to reduce compilation times and improve code organization. Each header has a corresponding module.

Use the FTXUI_BUILD_MODULES option to build the FTXUI project itself to provide C++ 20 modules, for example with CMake and Ninja:

cmake \
    -DCMAKE_GENERATOR=Ninja \
    -DFTXUI_BUILD_MODULES=ON \
    ..

ninja

Note

To use modules, you need a C++20 compatible compiler, CMake version 3.20 or higher, and use a compatible generator like Ninja. Note that Makefile generators do not support modules.

Then, in your own code you can consume the modules and code as normal:

import ftxui;

int main() {
  auto screen = ftxui::ScreenInteractive::TerminalOutput();
  auto button = ftxui::Button("Click me", screen.QuitClosure());
  screen.Loop(button);
  return 0;
}

Note, the ftxui convenience module which simply pulls together all the modules:

export import ftxui.component;
export import ftxui.dom;
export import ftxui.screen;
export import ftxui.util;

You can instead import only the module(s) you need if desired.

To properly find and link the modules with CMake, use target_link_libraries to get the right compiler, linker, etc. flags.

target_link_libraries(my_executable
    #...whatever...
    PRIVATE ftxui::modules
)

Module list

The modules directly reference the corresponding header, or a group of related headers to provide a more convenient interface. The following modules are available:

  • ftxui
    • ftxui.component
      • ftxui.component.Animation
      • ftxui.component.CapturedMouse
      • ftxui.component.Component
      • ftxui.component.ComponentBase
      • ftxui.component.ComponentOptions
      • ftxui.component.Event
      • ftxui.component.Loop
      • ftxui.component.Mouse
      • ftxui.component.Receiver
      • ftxui.component.ScreenInteractive
      • ftxui.component.Task
  • ftxui.dom
    • ftxui.dom.Canvas
    • ftxui.dom.Deprecated
    • ftxui.dom.Direction
    • ftxui.dom.Elements
    • ftxui.dom.FlexboxConfig
    • ftxui.dom.LinearGradient
    • ftxui.dom.Node
    • ftxui.dom.Requirement
    • ftxui.dom.Selection
    • ftxui.dom.Table
  • ftxui.screen
    • ftxui.screen.Box
    • ftxui.screen.Color
    • ftxui.screen.ColorInfo
    • ftxui.screen.Deprecated
    • ftxui.screen.Image
    • ftxui.screen.Pixel
    • ftxui.screen.Screen
    • ftxui.screen.String
    • ftxui.screen.Terminal
  • ftxui.util
    • ftxui.util.AutoReset
    • ftxui.util.Ref