Latest news
- Release xtd 0.1.2 (beta) - Posted on March 12, 2024
- The xtd 0.2.0 (beta) is growing - Posted on November 12, 2023
- Release xtd 0.1.1 (beta) - Posted on Jully 17, 2023
- The new xtd website is online - Posted on February 9, 2023
- All news
xtd libraries architecture
xtd is composed of several libraries.
xtd.core
The xtd.core library is modern C++17⁄20 libraries of classes, interfaces, and value types that provide access to system functionality. It is the foundation on which c++ applications, components, and controls are built.
xtd.forms
The xtd.forms library contains classes for creating Windows-based applications that take full advantage of the rich user interface features available in the Microsoft Windows, Apple macOS and linux base operating system.
xtd.tunit
The xtd.tunit library is a unit-testing framework for modern C++17⁄20, inspired by Microsoft.VisualStudio.TestTools.Cpp.
Development status
- Release notes provides release notes information.
- Roadmap provides a view of the xtd roadmap.
- Kanban board provides a Kanban view for all tasks (enhancements, pull requests, bugs, questions,…).
- Development status provides information about classes and libraries development status.
- Translation status provides information about translations status.
Current release status
This project is an open source project. The developers who participate do so on their own time. It is therefore difficult to fix realese dates.
But you can follow the evolution of the development. We keep the status up to date.
Continuous Integration build status
At each commit, a build and unit tests are performed for the following configurations :
Operating system | Debug | Release |
---|---|---|
Windows (x64) | ||
Windows (x86) | ||
macOS | ||
Ubuntu | ||
iOS (**) | ||
Android (**) |
(**) xtd.core and xtd.tunit only.
Deploy to GitHub Pages | status |
---|---|
Deployment of the website | |
Deployment of the latest reference guide |
Issues status
As xtd is managed by a Kanban project, the number of open issues can be quite large. The table below gives a clearer view on the number of open bugs/questions and enhancements.
(*) There is only one enhancement for xtd 0.1.0, as project management was not yet available.
Examples
The classic first application ‘Hello World’.
Console (CLI)
hello_world_console.cpp
#include <xtd/xtd>
using namespace xtd;
auto main() -> int {
console::background_color(console_color::blue);
console::foreground_color(console_color::white);
console::write_line("Hello, World!");
}
or simply
#include <xtd/xtd>
using namespace xtd;
auto main() -> int {
console::out << background_color(console_color::blue) << foreground_color(console_color::white) << "Hello, World!" << environment::new_line();
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.20)
project(hello_world_console)
find_package(xtd REQUIRED)
add_sources(hello_world_console.cpp)
target_type(CONSOLE_APPLICATION)
Build and run
Open “Command Prompt” or “Terminal”. Navigate to the folder that contains the project and type the following:
xtdc run
Output
Forms (GUI like WinForms)
hello_world_forms.cpp
#include <xtd/xtd>
using namespace xtd::forms;
class main_form : public form {
public:
main_form() {
text("Hello world (message_box)");
button1.location({10, 10});
button1.parent(*this);
button1.text("&Click me");
button1.click += [] {
message_box::show("Hello, World!");
};
}
private:
button button1;
};
auto main() -> int {
application::run(main_form {});
}
or simply
#include <xtd/xtd>
auto main() -> int {
auto main_form = xtd::forms::form::create("Hello world (message_box)");
auto button1 = xtd::forms::button::create(main_form, "&Click me", {10, 10});
button1.click += [] {xtd::forms::message_box::show("Hello, World!");};
xtd::forms::application::run(main_form);
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.20)
project(hello_world_forms)
find_package(xtd REQUIRED)
add_sources(hello_world_forms.cpp)
target_type(GUI_APPLICATION)
Build and run
Open “Command Prompt” or “Terminal”. Navigate to the folder that contains the project and type the following:
xtdc run
Output
Windows
macOS
Linux Gnome
tunit (Unit tests like Microsoft Unit Testing Framework)
hello_world_test.cpp
#include <xtd/xtd>
#include <string>
using namespace std;
using namespace xtd::tunit;
namespace unit_tests {
class test_class_(hello_world_test) {
void test_method_(create_string_from_literal) {
auto s = string {"Hello, World!"};
valid::are_equal(13, s.size());
assert::are_equal("Hello, World!", s);
}
void test_method_(create_string_from_chars) {
auto s = string {'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!'};
valid::are_equal(13, s.size());
string_assert::starts_with("Hello,", s);
string_assert::ends_with(" World!", s);
}
};
}
auto main() -> int {
return console_unit_test().run();
}
or without helpers
#include <xtd/xtd>
#include <string>
using namespace std;
using namespace xtd::tunit;
namespace unit_tests {
class hello_world_test;
auto hello_world_test_class_attr = test_class_attribute<hello_world_test> {"unit_tests::hello_world_test"};
class hello_world_test : public test_class {
test_method_attribute create_string_from_literal_attr {"create_string_from_literal", *this, &hello_world_test::create_string_from_literal};
void create_string_from_literal() {
auto s = string {"Hello, World!"};
valid::are_equal(13, s.size());
assert::are_equal("Hello, World!", s);
}
test_method_attribute create_string_from_chars_attr {"create_string_from_chars", *this, &hello_world_test::create_string_from_chars};
void create_string_from_chars() {
auto s = string {'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!'};
valid::are_equal(13, s.size());
string_assert::starts_with("Hello,", s);
string_assert::ends_with(" World!", s);
}
};
}
auto main() -> int {
return console_unit_test().run();
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.20)
project(hello_world_test)
find_package(xtd REQUIRED)
add_sources(hello_world_test.cpp)
target_type(TEST_APPLICATION)
Build and run
Open “Command Prompt” or “Terminal”. Navigate to the folder that contains the project and type the following:
xtdc run
Output
Visual Studio Output
Gallery
Minesweeper
Game of Life
xtdc-gui
xtdc-gui - Create a new project (on macOS)
Calculator
Stopwatch
Painting
Beginners
The following project aims to simplify and guide the way beginners make their first contribution. If you are looking to make your first contribution, check out the project below.
Now you are ready to make your first contribution to xtd.