twinBASIC Update: March 24, 2026
Highlights include an XInput demo (for processing gamepad input) and a Direct3D demo with HLSL shaders and other advanced features (both from fafalone).
On April 23, 2021, I helped Wayne Phillips introduce the world to twinBASIC at the Access DevCon Vienna conference. I boldly predicted that twinBASIC (along with the Monaco editor) would replace VBA and its outdated development environment by 2025. With that goal in mind, this weekly update is my attempt to keep the project fresh in the minds of the VBA development community.
Every Sunday Monday week, I will be providing updates on the status of the project, linking to new articles discussing twinBASIC, and generally trying to increase engagement with the project. If you come across items that should be included here, please leave a comment below.
Here are some links to get involved with the project:
- Custom twinBASIC IDE Installation Guide
- twinBASIC Discord Server (chat about the project)
- twinBASIC Wiki (list of new features not in VBx)
- GitHub Issue Tracker (report bugs)
- twinBASIC/VBx LinkedIn Group
Highlights
Quiet Week
This was a quiet week on the official news front, with no new releases and no glimpses behind the scenes of Wayne's ongoing development. We know from past updates that Wayne is currently heads down, working (primarily?) on a feature that will allow 32-bit ActiveX DLLs to run in a 64-bit environment. I think it's safe to assume that is a...significant...technical challenge.
Discord Chat Summary
* Auto-generated via Claude-Sonnet-4.6
Overview
This week's discussion centered on three major themes: a significant IDE infrastructure decision involving the move from WebView2 to CEF, a community-driven performance benchmarking exercise using a VB6 PC emulator, and fafalone's success resolving a long-standing VB6 drag-and-drop limitation in twinBASIC. Community engagement was steady, with a healthy mix of developer announcements, technical troubleshooting, and exploratory projects.
IDE Infrastructure: CEF Migration
- waynephillipsea confirmed that working CEF-based versions of the twinBASIC IDE already exist. The key advantage over WebView2 is the ability to place code directly in the renderer process, enabling significantly more performant IPC between the IDE and the backend compiler.
- In response to a suggestion to use a fixed (non-evergreen) version of WebView2 for stability, waynephillipsea acknowledged it would have helped had the CEF decision not already been made, but the architectural benefits of CEF make it the clearly superior path forward.
Performance Benchmarking: VB6 PC Emulator
- greatquux discovered that BasicBox, a 486-class PC emulator written entirely in VB6, compiles out of the box in twinBASIC — but currently runs at less than 10% of the performance of a VB6-compiled build, making it a useful real-world benchmark for identifying optimization opportunities.
- waynephillipsea investigated the bottleneck and identified the
OPL3_Generatefunction as a significant contributor; commenting it out produced a meaningful performance improvement. He noted that full parity will likely require the forthcoming LLVM optimized compiler. - Community member jimdrew, who wrote the world's first Pentium emulation in the early 1990s, proposed optimizations around boundary checking for
U32Add/U32Suband noted a potential case table issue causing branch prediction problems in the compiled output. - fafalone confirmed the project compiles but observed severe slowdowns in practice, including a memory test that ran for over 12 minutes in tB versus 5 seconds in VB6.
Drag & Drop: VB6 Limitation Resolved
- fafalone reported successfully implementing file drag-and-drop in twinBASIC using a custom class implementing
IDataObject/IDropSource— something that consistently crashed in VB6 despite years of attempts. - twinBASIC's native HRESULT handling was highlighted as removing the "annoying vtable swapping" that was required in VB6 to return correct HRESULTs from interface implementations.
- A demo is planned; the only current friction is that it requires both WinDevLib and WinDevLibImpl. fafalone noted he is looking forward to tB supporting
Implementsfor interfaces that use[PreserveSig].
Community Development: Desktop Widgets with GDI+
- yereverluvinunclebert shared progress on a desktop widget system that renders multi-layer transparent PNG images onto the desktop, with image and layout data read from an extracted PSD XML descriptor and loaded into a dictionary for fast GDI+ rendering.
- The project uses a custom window rather than a standard tB form, and the developer noted that twinBASIC's advanced collections made the implementation meaningfully easier than an equivalent VB6 approach.
- Next steps include adding per-layer event handling and hit-testing with click-through support for transparent regions.
HTTP Compression & Modern Networking
- A discussion arose around replacing
MSXML2.XmlHttpwithWinHttpRequestdue to TLS requirements from cloud provider changes, with a side question about handling gzip-compressed responses. - waynephillipsea pointed to the official Sample 18 (libdeflate) as a starting point for raw DEFLATE compression, while noting that HTTP typically wraps DEFLATE with gzip headers.
- deletedewd proposed the WinRT
HttpClientclass as the most modern alternative, noting that itsHttpBaseProtocolFilter.AutomaticDecompressionproperty handles gzip transparently and is enabled by default.
Custom Windows & Event Handling
- A community discussion explored the practical use cases for
CreateWindowExover standard tB/VB6 forms, including smaller executable size, custom entry points, and finer rendering control. fafalone noted a multithreadedMediaEngineproject that crashed with a tB form but ran reliably with a custom window. - yereverluvinunclebert raised the question of whether event handling for custom windows and low-level objects could be made less arcane for general users. waynephillipsea confirmed the topic has been discussed internally.
Conclusion
This was a technically rich week for the twinBASIC community. The confirmation of working CEF-based IDE builds marks meaningful progress toward a more performant development environment, while fafalone's drag-and-drop breakthrough illustrates how twinBASIC is resolving long-standing VB6 limitations in a practical way. The BasicBox benchmarking thread has organically created a useful regression test for compiler performance, with the LLVM backend on the horizon as the expected solution for compute-intensive VB6 ports. Community exploration of custom windowing, GDI+ rendering, and modern HTTP APIs continues to demonstrate the breadth of real-world applications being built with twinBASIC.
Around the Web
XInput Demo (Gamepad input)
From fafalone in show-and-tell:
XInput is a very simple API to use, but since I've never seen VBx/twinBASIC code for it before, I thought I'd post a quick demo. This covers all the basic gamepad features, including getting battery info (Win10+) and making the controller vibrate.

Direct3D 12 Demo
Also from fafalone in show-and-tell:
With Claude's help I created a demo of using Direct3D 12 in twinBASIC (first demo for 12 in either tB or VBx!). It's fairly advanced, using HLSL shaders etc, since basics are well covered in DX7-11 demos others have made.
Requires an updated WinDevLib (v9.3.676+), since I just implemented ByVal UDTs for D3D12 for this project, so the code was more consistent.

Changelog
Here are the updates from the past week. You can also find this information by visiting the GitHub twinBASIC Releases page.
- No new releases this week.