wxWidgets is a C++ library that lets developers create applications for Windows, macOS, Linux and other platforms with a single code base. It has popular language bindings for Python, Perl, Ruby and many other languages, and unlike other cross-platform toolkits, wxWidgets gives applications a truly native look and feel because it uses the platform's native API rather than emulating the GUI. It's also extensive, free, open-source and mature.
Latest News
wxWidgets 3.2.0 Released
Posted on
After almost 9 years since the beginning of the last wxWidgets stable release series, the first release in the new stable 3.2 series is finally available on GitHub. You will find there archives with the library sources and documentation as well as binaries for the selected Windows compilers such as Microsoft Visual C++, MinGW-w64 and TDM-GCC. You can also read the updated documentation for this version and, in particular, if you’re new to wxWidgets, you may find the installation guide a good starting point.
Changes in this release
This release is a culmination of many years of development since the last stable 3.0 release. It contains more than 15,000 commits from more than 400 unique contributors (including more than 200 with multiple contributions) and has too many improvements to list them all here, but here is a maximally condensed summary of the most important ones:
- Build system improvements: support for new compilers (up to MSVS 2022,
g++ 12, clang 14) with an even simpler way of using wxWidgets from
MSVS, with
wxwidgets.propsfile, as well as an entirely new CMake build system. - Support for native dark mode under macOS 10.14 and later, support for ARM hardware and macOS versions up to 13.
- High DPI support with the new, but almost perfectly backwards- compatible, API based on wxBitmapBundle, including per-monitor DPI and dynamic DPI changes.
- New features: HTTPS and HTTP/2 support with wxWebRequest and friends; support for freezing rows/columns in wxGrid; mouse gesture events (GSoC 2017 project); non-integer font sizes and arbitrary font weights in wxFont; fractional pen widths in wxGraphicsContext; arbitrary label windows in wxStaticBox; markup in wxDataViewCtrl items text; support for ZIP 64 files; LZMA compression; much improved accessibility support under MSW; new Edge-based wxWebView implementation; support for using native spell-checking in wxTextCtrl; new PCRE-based wxRegEx.
- New classes: wxActivityIndicator, wxAddRemoveCtrl, wxAppProgressIndicator, wxBitmapBundle, wxNativeWindow, wxPersistentComboBox, wxPowerResourceBlocker, wxSecretStore, wxTempFFile, wxUILocale and many new features in the existing classes.
- New XRC handlers for all the new and some of the existing classes.
- Significant improvements to: wxBusyInfo, wxDataViewCtrl, wxDirDialog, wxGrid, wxNotificationMessage, wxSpinCtrl, wxStaticBox, wxStyledTextCtrl, wxUIActionSimulator.
- Improvements to compile-time safety with the possibility to disable dangerous
implicit conversions between wxString and
char*strings. - Latest versions of all bundled 3rd party libraries, including all the security fixes and support for WebKit 2 and GStreamer 1.7 under Unix.
- Better, even if still perfectible, Wayland support in wxGTK.
- Revamped OpenGL support better suited to modern OpenGL (3.2+).
- Further C++11 and later support improvements, wxWidgets can be built using C++20 compilers.
- New experimental wxQt port.
- Many, many bug fixes.
Note that in spite of all these changes, wxWidgets 3.2.0 is almost fully compatible with wxWidgets 3.0 and updating the existing applications to use it shouldn’t require much effort. But please do read the (relatively short) section listing the incompatible changes in the beginning of the change log file if you’re upgrading from a previous wxWidgets version.
Feedback
Please let us know about your experience with this release via any of the following channels:
Or by commenting under this post.
Thanks to everybody who has contributed to this release and we hope that you will enjoy working with it!
Goodbye Trac
Posted on
After almost 15 years of using Trac as our bug tracker (thank you Trac
developers for providing the tool that was so helpful for us during all these
years!), we’ve just migrated all the tickets from it to GitHub Issues.
Most of the existing issues, with the exception of the very old ones, have
kept their existing numbers, so instead of
https://trac.wxwidgets.org/ticket/NNNNN you can simply use
https://github.com/wxWidgets/wxWidgets/issues/NNNNN now and we will
probably put in place an automatic redirect from the former to the latter
soon. And to report new issues, please go to
https://github.com/wxWidgets/wxWidgets/issues/new/
There are many advantages of using GitHub Issues instead of our own Trac installation, e.g. GitHub web UI is easier to use and much faster. And you also don’t need to create, or use, a separate account, as was the case for wxTrac. However this is also the main disadvantage of this change: you now need to have a GitHub account in order to report issues in wxWidgets. We hope that relatively few people will be negatively affected by this, but for those who are, please post your bug reports to our mailing lists instead.
And please also use the mailing lists to let us know if you encounter any problems after this migration!
Roundup of the Recent Changes
Posted on
A quick overview of the recent changes and improvements in wxWidgets: since 3.1.5, quite a few things have happened and this post provides a summary of the last 6 months.
The most important one is the addition of wxBitmapBundle class class,
which allows to provide several versions of the same bitmap, including the
default (used at 100% DPI, i.e. without DPI scaling at all) and
high-resolution one (used at 200% DPI scaling) as well as more variants for
the intermediate scaling factors, if necessary, and let wxWidgets
automatically select the best version to use and switch between them if the
DPI scaling changes, as it happens when moving the window between displays
using different DPI. Note that the new API is 100% backwards-compatible with
the existing one, i.e. all the existing code will continue to work and if you
provide just a single bitmap, it will be upscaled to the expected size, just
as before. But now you can also easily provide your own high resolution
version to avoid the bitmaps in your application looking blurry in high DPI.
This already works today with wxButton (and all the derived classes),
wxStaticBitmap and wxToolBar and all the other classes using bitmaps will
support the new API in wx 3.1.6.
Moreover, as a side-effect of this work, it is now possible to use SVG images
everywhere where wxBitmap is used with wxBitmapBundle::FromSVG(),
thanks to Nano SVG library integration.
The next big addition to the API is the wxUILocale class, which provides
a new and more flexible way to get locale-specific information than the old
wxLocale. Notably, the new class doesn’t rely on the – quite naive, in
retrospect – assumption that the standard C setlocale() function actually
works, which allows it to work correctly under the recent macOS, where C
locale cannot be used at all, due to bugs in Apple code. It also uses BCP
47-like identifiers for the locale instead of wxLanguage enum, which
allows it to cover all the languages supported by the OS and not just those
known to wxWidgets, and provides a new CompareString() function which
compares strings using language-specific rules. It is recommended to use this
class rather than wxLocale in all new code, especially for applications
targeting macOS, as using the old class results in a bad bug under macOS
10.15 or newer.
Other new features include:
- Add support for using native spell checking in
wxTextCtrl. - Add XRC handler for
wxStyledTextCtrl. - Implement support for undo/redo for
wxTextCtrlin wxOSX. - Add
wxImage::Change{Saturation,Brightness,HSV,Lightness}(). - Add
wxKeyEvent::IsAutoRepeat(). - Add
wxSpinCtrl::GetTextValue().
There have a few updates for the new compiler versions and other modernizations:
- wxWidgets headers have been updated to not produce any warnings when compiling in C++20 mode with gcc 11 and clang 12.
- MSVS 2022 is now supported.
- Variadic functions such as
wxPrintf()andwxLogXXX()now supportstd::string_viewarguments too. - wxMSW uses (quite old) Winsock 2 by default rather than the (absolutely ancient) Winsock 1.
A few optimizations as well:
wxMBConvwas significantly sped up under Unix systems.- Creating standard system fonts is now much faster in wxOSX.
And other than that, there were all the usual minor improvements and bug fixes:
wxMediaCtrlin wxGTK now works when using Wayland too.- Fix key event generation in
wxDataViewCtrl. - Improve handling printer settings in wxMSW and wxGTK.
- Fix mouse events when using touch events in wxGTK.
- Fix
wxDC::Blit()when using RTL layout in wxMSW. - Improve
wxSpinCtrlDoublesignificant digits handling. - Several bug fixes in the long-neglected wxUniv port.
That’s all for this “brief” summary, please don’t hesitate to try the new features and let us know if you have any questions about them or if you find any problems, so that they could be fixed before the upcoming 3.2.0 release.
Thanks in advance!
IRC Channel Moving to Libera.Chat
Posted on
As many of you might have heard, the Freenode IRC network changed management a week ago, in what can only be described as a hostile takeover. The original Freenode staff that has taken great care of us for about two decades now have all resigned from Freenode, and created Libera.Chat, which we have decided to migrate to. This decision aligns with hundreds other open source projects making the same migration now, including Ubuntu, Gentoo, Wikimedia, FreeBSD, Fedora, Arch Linux, LibreELEC, Arduino, and PostgreSQL. We understand that this may be disruptive, but believe this move will ultimately be best for everyone.
In order to ensure that our relatively small IRC community of users isn’t divided long term, we have muted our channel on Freenode, leaving a notice with updated instructions for joining our new channel on Libera.Chat, where you will find all of the same helpful and experienced wxWidgets users.
Please see our IRC Channel page for help with connecting to Libera.Chat.
Ingenuity Helicopter
Posted on
wxWidgets code probably doesn’t run on Mars (yet), but wxPython/wxWidgets is nevertheless one of the projects whose developers have been credited as contributors to the NASA Ingenuity mission.


