FTXUI/doc/cpp-modules.md
2025-06-02 11:02:48 -04:00

2.6 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 provides an experimental support for C++20 modules to improve compilation times and code organization. The existing API has a module corresponding to each header.

Example with CMake and Ninja

import ftxui;

int main() {
  auto screen = ftxui::ScreenInteractive::TerminalOutput();
  auto button = ftxui::Button("Click me", screen.QuitClosure());
  screen.Loop(button);
  return 0;
}
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.

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

![NOTE] The module ftxui transitively imports all ftxui.* modules and thus has a dependency on those modules.

![NOTE] The list can be generated with the following command:

git grep "export module" | cut -d: -f2 | cut -d\  -f3