Wt, C++ Web Toolkit

Overview

What is Wt ?

Wt is a C++ library for developing web applications. It consists of:

  • libwt, a widget/rendering library
  • libwthttp, an (async I/O) HTTP/WebSockets server
  • libwtfcgi, a FastCGI connector library (Unix)
  • libwtisapi, an ISAPI connector library (Windows)
  • libwttest, a test connector environment

It also contains a C++ ORM, which can be used in a web application (obviously), but can also be used on its own:

  • libwtdbo, a C++ ORM
  • libwtdbopostgres, PostgreSQL backend
  • libwtdbosqlite3, Sqlite3 backend
  • libwtdbomysql, MySQL and MariaDB backend
  • libwtdbomssqlserver, Microsoft SQL Server backend
  • libwtdbofirebird, Firebird backend

For more information, see the homepage.

Dependencies

To build Wt from source you will need at least CMake (>= 3.1), and boost (version >= 1.50).

Optionally, you may want to add:

  • OpenSSL for SSL and WebSockets support in the built-in httpd, the HTTP(S) client, and additional cryptographic hashes in the authentication module
  • Haru PDF library which is used for painting to PDF
  • GraphicsMagick which is used for painting to PNG, GIF (on Windows, Direct2D can be used instead)
  • PostgreSQL for the PostgreSQL Dbo backend
  • MySQL or MariaDB for the MySQL Dbo backend
  • An ODBC driver for the Microsoft SQL Server Dbo backend, and unixODBC on Unix-like platforms
  • Firebird for the Firebird Dbo backend
  • Pango for improved font support in PDF and raster image painting. On Windows, DirectWrite can be used instead.
  • ZLib for compression in the built-in httpd.

For the FastCGI connector, you also need:

Building

Generic instructions for Unix-like platforms or Windows platforms.

Bug Reporting

Bugs can be reported here http://redmine.webtoolkit.eu/projects/wt/issues/new

Demos, examples

The homepage, itself a Wt application, contains also various examples.

License

Wt is available under two licenses:

  • the GNU General Public License, Version 2, with OpenSSL exception. Only version 2 of the GPL applies. See the LICENSE file for more information.
  • a commercial license, which does not require you to distribute the source code of your application. Request a quotation online or contact [email protected] for more information.

See doc/licenses.md for an exhaustive list of the licenses used by Wt, source code from external sources included in Wt and common (optional) external dependencies.

Comments
  • CMake: Export Wt package

    CMake: Export Wt package

    The IMPORTED targets:

    • Wt::Wt
    • Wt::Ext
    • Wt::Test
    • Wt::HTTP
    • Wt::FCGI
    • Wt::Isapi
    • Wt::Dbo
    • Wt::DboSqlite3
    • Wt::DboPostgres
    • Wt::DboFirebird
    • Wt::DboMySQL

    Usage in CMake project:

    find_package(Wt) add_executable(hello hello.cpp) target_link_libraries(hello Wt::HTTP)

    Use the NEW behavior for the policy CMP0022 to export relocatable Config-file package

    Use Boost IMPORTED targets if defined

    Update minimum required CMake version to 2.8.12

    opened by podsvirov 23
  • Add traverse() method for WAbstractItemModel

    Add traverse() method for WAbstractItemModel

    Add a method to traverse the whole sub tree of a valid index using the iterative approach. The method is implemented in WAbstractItemModel but a convenience function is added to WModelIndex. For each new visited index, a callback function is called. The callback is declared like this: std::function<bool(const Wt::WModelIndex &)> The parameter is a const reference to the currently traversed index. The return value indicates if the traversing should be continued or interrupted. 'true' means interrupt, 'false' means do not interrupt. When the traversing is finished, the last traversed index is returned.

    opened by ekondayan 11
  • Client side clock/timezone offset time feature in WEnvironment using JavaScript

    Client side clock/timezone offset time feature in WEnvironment using JavaScript

    This commit adds the feature to get the client's clock time and client's time by applying a timezone offset to UTC time in Wt::WEnvironment.

    Boot.min.js was compressed on http://javascriptcompressor.com/ There may be some places where there are Tab indents instead of 2 spaces :)

    opened by SaiFi0102 9
  • Perfect forwarding for Signal parameters

    Perfect forwarding for Signal parameters

    This fix allows you to pass move-only objects as signal parameters. To do this, they are wrapped in std::forward(). In other words the parameters are perfectly forwarded.

    An example use cases where this can be useful:

    Example emiting: button->clicked().connect( [this] { my_signal.emit(std::make_unique<Wt::WText>("Send this text widget by a signal")); });

    Example Slot :

    void contentLoad(std::unique_ptr<Wt::WWidget> widget) { root()->addWidget(std::move(widget)); }

    opened by ekondayan 7
  • fix compiler warning and optimization

    fix compiler warning and optimization

    fix compiler warning and optimization

    clang++ was warning that adding a char to a string does not append to the string, so I changed it to std::string.push_back(c);

    I also changed the loop into a switch statement, allowing for better compiler optimization than the loop.

    opened by matiu2 7
  • Implement

    Implement "RESTRICT" foreign key constraint in Wt::Dbo module

    The RESTRICT foreign key constraint is supported by all the major databases. It is a must have feature for quite a lot of database schemes. It's implementation in the Wt::Dbo module is very straight forward process, so there is no apparent reason no to do so.

    Tested:

    1. Wt compiles successfully
    2. SQLite3 - SQL generation for the tables works as expected
    opened by ekondayan 5
  • CMake is not able to find boost components using wt-config.cmake

    CMake is not able to find boost components using wt-config.cmake

    The expression

    find_package(Boost QUIET COMPONENTS "@Boost_COMPONENTS@")
    

    results in

    find_package(Boost QUIET COMPONENTS "program_options;filesystem;thread")
    

    according to the CMake documentation [1] and [2] is a list with one entry "program_options;filesystem;thread" and CMake is unable to find the component "program_options;filesystem;thread"

    The correct form is

    find_package(Boost QUIET COMPONENTS program_options;filesystem;thread)
    

    Then CMake interprets program_options;filesystem;thread as a list with three entries.

    [1] https://cmake.org/cmake/help/latest/command/find_package.html?highlight=components [2] https://cmake.org/cmake/help/latest/command/list.html

    opened by StefanRommel 5
  • HTTP PATCH support for Wt 3.7

    HTTP PATCH support for Wt 3.7

    This patchset adds support for making Http Patch requests using Wt::Http::Client. This patchset allows WResource to respond to Http Patch requests. This patchset expands Wt::Http::Redirection support to allow for Method preserving redirection - e.g. Http 307/308 with a POST results in a Post. This patchset expands Wt::Http::Redirection support to allow for Method translating redirection - e.g. Http 301/302 with a POST results in a Get.

    opened by jamal-fuma 5
  • Fix WTimePicker segfault on construction

    Fix WTimePicker segfault on construction

    Constructors which do not take a WTimeEdit as parameter segfault due to dereferencing uninitialised timeEdit_ variable. Issue fixed by default initialising timeEdit_ in these cases

    opened by shiftee 5
  • Added WCompositeWidget::formWidgetImpl() as an alternative to

    Added WCompositeWidget::formWidgetImpl() as an alternative to "WCompositeFormWidget":

    -Added feature to add WFormModel::validator to WCompositeWidget's WFormWidget Impl by WTemplateFormView -Made the WCompositeWidget::setDisabled function similar to WWebWidget::setDisabled so that propagateSetEnabled should only be called when isEnabled() has changed -Should have fixed WCompositeWidget::setDisabled so that it doesn't call impl_->propagateSetEnabled() twice, since impl_->setDisabled() should also call the same function -Added WTemplate::Functions::fwId() to get WCompositeWidget::formWidgetImpl()'s ID or WObject::id() -Added a test in WSuggestionPopup::forEdit so that multiple calls to forEdit shouldn't cause trouble

    opened by SaiFi0102 5
  • Fix mysql backend build

    Fix mysql backend build

    This fix helps to specify full path to the mysqlclient library.

    For example, on ubuntu 18.04 the path to mysqlclient is /usr/lib/x86_64-linux-gnu/. This means that in release 4.0,4 I can not build mysq backend. My request helps to fix this issue.

    opened by akapust1n 4
  • Fixed WFormWidget placeholder not updating on locale change

    Fixed WFormWidget placeholder not updating on locale change

    I found that the placeholder text of a WLineEdit widget, that was set by WLineEdit::setPlaceholderText(WString::tr("...")) does not update when changing the WApplication's locale, as described in Issue 11156.

    This pull request contains a proposed fix for that issue.

    opened by skoehler47 0
  • Touch up documentation on Wt::WSignal

    Touch up documentation on Wt::WSignal

    The documentation was missing qualifications concerning under which conditions the signal would NOT be disconnected. That is, for instance if you pass a lambda function object (which doesn't inherit from Wt::Core::observable), Wt::WSignal has no way to unregister or disconnect the signal.

    opened by limitedAtonement 4
  • Improved performance of adding rows and columns to the WTable

    Improved performance of adding rows and columns to the WTable

    The issue was the calling of WTableRow::rowNum() for every added cell, which iterated over the whole table.

    The methods WTableRow::createCell(), WTableRow::insertColumn() and WTableRow::expand() got the new row argument defaulting to -1 that WTable can use when creating new elements with WTable::insertRow() and WTable::insertColumn(). These methods are called by WTable::expand() so the performance improvement affects every operation that expands the table.

    The performance of populating a new table row by row is increased with this commit from O(n^2+n) to O(n).

    opened by jakub-w 2
Releases(4.9.0)
Zenotech 6 Oct 21, 2022
Insight Toolkit (ITK) is an open-source, cross-platform toolkit for N-dimensional scientific image processing, segmentation, and registration

ITK: The Insight Toolkit C++ Python Linux macOS Windows Linux (Code coverage) Links Homepage Download Discussion Software Guide Help Examples Issue tr

Insight Software Consortium 1.1k Dec 26, 2022
Microsoft Cognitive Toolkit (CNTK), an open source deep-learning toolkit

The Microsoft Cognitive Toolkit is a unified deep learning toolkit that describes neural networks as a series of computational steps via a directed graph.

Microsoft 17.3k Jan 6, 2023
VNOpenAI 31 Dec 26, 2022
Wt, C++ Web Toolkit

What is Wt ? Wt is a C++ library for developing web applications. It consists of: libwt, a widget/rendering library libwthttp, an (async I/O) HTTP/Web

null 1.5k Dec 30, 2022
MaixPy3 is a Python3 toolkit based on cpython

MaixPy3 is a Python3 toolkit based on cpython, which simplifies the development of applications on Linux AI edge devices through Python programming.

Sipeed 139 Jan 2, 2023
🐸 Coqui STT is an open source Speech-to-Text toolkit which can run in real time on devices ranging from a Raspberry Pi 4 to high power GPU servers

Coqui STT ( ?? STT) is an open-source deep-learning toolkit for training and deploying speech-to-text models. ?? STT is battle tested in both producti

Coqui.ai 1.7k Jan 2, 2023
DyNet: The Dynamic Neural Network Toolkit

The Dynamic Neural Network Toolkit General Installation C++ Python Getting Started Citing Releases and Contributing General DyNet is a neural network

Chris Dyer's lab @ LTI/CMU 3.3k Dec 31, 2022
OpenVINO™ Toolkit repository

This toolkit allows developers to deploy pre-trained deep learning models through a high-level C++ Inference Engine API integrated with application logic.

OpenVINO Toolkit 3.9k Dec 31, 2022
A Modern C++ Data Sciences Toolkit

MeTA: ModErn Text Analysis Please visit our web page for information and tutorials about MeTA! Build Status (by branch) master: develop: Outline Intro

null 656 Dec 25, 2022
使用基于ONNXRuntime的Lite.AI.ToolKit 🚀🚀🌟 C++工具箱来跑RobustVideoMatting的一些案例

RobustVideoMatting.lite.ai.toolkit ?? ?? ?? 1. 简介 使用Lite.AI.ToolKit C++工具箱来跑RobustVideoMatting的一些案例(https://github.com/DefTruth/lite.ai.toolkit) . 整理不

DefTruth 77 Dec 13, 2022
C++ Live Toolkit are tools subset used to perform on-the-fly compilation and running of cpp code

C++ Live Toolkit CLT (C++ Live Toolkit) is subset of tools that are very light in size, and maintained to help programmers in compiling and executing

MondeO 1 Jan 4, 2022
An Open-Source Analytical Placer for Large Scale Heterogeneous FPGAs using Deep-Learning Toolkit

DREAMPlaceFPGA An Open-Source Analytical Placer for Large Scale Heterogeneous FPGAs using Deep-Learning Toolkit. This work leverages the open-source A

Rachel Selina Rajarathnam 25 Dec 5, 2022
ClanLib is a cross platform C++ toolkit library.

ClanLib ClanLib is a cross platform toolkit library with a primary focus on game creation. The library is Open Source and free for commercial use, und

Kenneth Gangstø 309 Dec 18, 2022
Mobile Robot Programming Toolkit (MRPT) provides C++ libraries aimed at researchers in mobile robotics and computer vision

The MRPT project 1. Introduction Mobile Robot Programming Toolkit (MRPT) provides C++ libraries aimed at researchers in mobile robotics and computer v

MRPT 1.6k Dec 24, 2022
A powerful and versatile dynamic instrumentation toolkit.

MIGI Migi(My Ideas Got Incepted) is a powerful and versatile dynamic instrumentation toolkit. How it works By injecting Python scripts into target hos

nomads 5 Oct 22, 2022
Gesture Recognition Toolkit (GRT) is a cross-platform, open-source, C++ machine learning library designed for real-time gesture recognition.

Gesture Recognition Toolkit (GRT) The Gesture Recognition Toolkit (GRT) is a cross-platform, open-source, C++ machine learning library designed for re

Nicholas Gillian 793 Dec 29, 2022
YOLO5Face.lite.ai.toolkit

???? YOLO5Face 2021 with MNN/NCNN/TNN/ONNXRuntime C++ !

DefTruth 36 Nov 11, 2022