twinBASIC Update: March 31, 2026
Highlights include the release of twinBASIC Fusion Technology, enabling 32-bit ActiveX controls in 64-bit environments, plus an async MsgBox class and WinRT Composition demo.
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
twinBASIC Fusion Arrives!!!
From Wayne in Discord:
🚀 BETA 976 is now available!
This release introduces the long-awaited “Fusion” technology - enabling 64-bit projects to host certain 32-bit ActiveX controls via an automatically generated out-of-process host EXE.
📝 Early notes
- Full documentation available here (the docs are a work in progress)
- The additional host EXE is generated automatically when needed - typically when opening a project where the required ActiveX control isn’t available for the current architecture.
- Not all ActiveX controls will behave correctly with Fusion - expect some limitations.
❌ Currently NOT supported
- Windowless controls
- Container controls
- Controls that depend on other sited controls
⚠️ Known current limitations
- No tab navigation between controls
- Property pages are not yet accessible
Common control properties not yet supported
ToolTipText,CausesValidation,DragMode,DragIconHelpContextID,WhatsThisHelpIDTabStop,TabIndexAdditional notes
- Mouse events are not yet OLE-translated, so their signatures differ from standard ActiveX expectations
- Two new per-type-library options are now available in the COM References list (more details coming soon)
twinBASIC Fusion Technology: More Info
The AI recap below was generated by Claude-Sonnet-4.6 from the Discord chat and official documentation.
BETA 976 introduced twinBASIC Fusion, a long-awaited compatibility layer that finally breaks the bitness barrier for ActiveX controls.
Historically, ActiveX controls had to match the architecture of their host application — meaning 32-bit controls simply could not be used in a 64-bit project. Fusion eliminates that restriction.
The magic happens through an automatically generated out-of-process host EXE. When twinBASIC detects that a referenced ActiveX control isn't available for the current architecture, it silently generates a companion executable to host the control in a separate process. All method calls, property access, and events are transparently marshalled across a custom IPC layer — your code interacts with the control as if it were running in-process.
Fusion supports several modes configurable per type library, including automatic cross-bitness bridging, forced 32-bit or 64-bit hosting, and even same-bitness out-of-process execution for isolation purposes. An Async Events option is also available to help prevent deadlocks with controls that are sensitive to re-entrancy.
For deployment, the generated host EXE simply needs to sit alongside your main executable. A runtime override via App.FusionHostEXEPath is available for custom deployment layouts.
Current limitations include no support for windowless or container controls, missing tab navigation, and some unsupported properties (ToolTipText, TabStop, TabIndex, and others). Mouse event signatures also currently differ from standard ActiveX expectations, though this is flagged for a future fix.
Full documentation is available on the twinBASIC wiki. Note that Fusion has currently been tested on Windows 10 and 11 only.
Discord Chat Summary
* Auto-generated via Claude-Sonnet-4.5
Overview
The week of March 24–31, 2026 was headlined by the release of Beta 976, which introduced the landmark "ActiveX Fusion" technology enabling 64-bit projects to host 32-bit ActiveX controls through an automatically generated out-of-process host executable. Alongside this major feature debut, the community engaged in substantive technical discussions around UDT handling, pointer semantics, and COM interface debugging. The week closed with a wide-ranging conversation about the prospects of twinBASIC becoming open source.
Feature Development: ActiveX Fusion Technology
- waynephillipsea announced and released Beta 976 featuring "Fusion" technology, which automatically generates an out-of-process host EXE allowing 64-bit projects to use 32-bit ActiveX controls — and vice versa. Same-bitness out-of-process hosting is also supported.
- Current limitations include no support for windowless controls, container controls, or controls dependent on other sited controls. Tab navigation, property pages, and several common properties such as
ToolTipText,TabStop, andTabIndexare not yet implemented. - waynephillipsea confirmed that multiple Fusion controls can be hosted simultaneously, currently all sharing a single spawned external process, with configurable options planned for a future release.
- Initial documentation was published to the twinBASIC GitHub wiki shortly after release.
IDE & Development Infrastructure
- waynephillipsea noted that the engineering work behind Fusion has broader payoffs: proper command-line compilation is now nearly ready for public release as a result of internal changes, and the custom IPC layer developed for Fusion will serve future multithreading support — designed cross-platform without reliance on COM.
- waynephillipsea introduced
IUnsupportedInterface, a special twinBASIC interface that can be implemented on any class to monitor unmatchedQueryInterfacecalls, providing a targeted debugging tool for COM interface implementations. deletedewd confirmed he had already been using it in hiscAwaitimplementation to identify Completed Handler IIDs. - waynephillipsea clarified that
.resfile importing still requires a VBP import, but that image resources such as PNGs can be managed directly via the Resources folder in the Project Explorer panel.
Language Enhancements & Technical Discussions
- waynephillipsea confirmed that
CType(Of T)(ptr)does not produce a copy when used inline in expressions. wqweto clarified that assigning the result to a variable does produce a stack-based copy, and offered optimization patterns including usingWith CType(Of T)(ptr)to avoid unnecessarymemcpyemissions. - waynephillipsea acknowledged that the
If()ternary function currently promotes UDT arguments to Variant even when both result types match. wqweto suggested this could be special-cased for matching UDT types, and deletedewd offered the immediate workaround of usingVarPtron both branches. - fafalone demonstrated that UDT methods are transparent to
LenBand memory layout, enabling aLARGE_INTEGERunion substitute using property accessors over aLongLongfield. TheUDTWrap(Of T)generic pattern — previously recommended by waynephillipsea — was identified as a useful general-purpose workaround for dereferencing pointers toByRef-typed parameters, such asByRef Singlein COM interfaces.
Community Discussion: Open Source
- A community question about whether twinBASIC would become open source prompted an extensive discussion. fafalone argued that 25 years of failed community attempts to build a VB6 successor demonstrate the lack of a sufficient pool of volunteer compiler developers, and that a substantial portion of twinBASIC — including many built-in packages and controls — is already open source.
- okas_o noted that twinBASIC is Wayne's livelihood, making open-sourcing the compiler financially untenable, and that Wayne has previously discussed placing the source in escrow to be released in the event of his death.
- mansellan expressed interest in contributing to IDE development if that portion is eventually opened up, noting the IDE presents no comparable "special sauce" concerns to the compiler itself.
Community Contributions
- yereverluvinunclebert shared progress on a custom widget system built in twinBASIC, using PSD-sourced images extracted via COM and an XML descriptor, GDI+ rendering on a full-screen transparent form, and subclassed mouse event handling for hit-testing against image boundaries including transparent areas.
- deletedewd shared a demo of the WinRT Composition namespace working on a tB Form, expanding the set of publicly available modern Windows API examples for the community.
Conclusion
Beta 976 represents a significant milestone with the debut of ActiveX Fusion technology, directly addressing a long-standing pain point for developers maintaining 32-bit ActiveX dependencies in modern 64-bit projects. The infrastructure built to support Fusion is already delivering secondary benefits in the form of command-line compilation and a new IPC layer with multithreading implications. The week's technical discussions demonstrated the community's continued depth, from nuanced COM interface debugging to UDT memory layout strategies, while the open-source conversation reflected the broader community investment in twinBASIC's long-term sustainability and direction.
Around the Web
cMsgBoxAsync - A drop-in async MsgBox class
From fafalone in show-and-tell:
Even though it's not the best way of handling things, a lot of people ask about a MsgBox that doesn't halt execution, and it's a good way to get into simple multithreading in tB.
WinRT Composition Demo
Posted by VanGoghGaming in show-and-tell:
Here's a small demo showcasing the use of Composition in twinBASIC. There's no XAML involved here, it can be used directly on a Form thus enhancing your current user interface with various visual elements all hardware accelerated. This demo contains a fading circle shape with a radial gradient brush bouncing around the edges of the form.
The downloadable twinBASIC sample project is available in Discord here.
Changelog
Here are the updates from the past week. You can also find this information by visiting the GitHub twinBASIC Releases page.
AI-Generated Changelog Summary
* Auto-generated via Claude-Sonnet-4.5, sorted in order of its opinion of "most impactful changes."
Major Features
- twinBASIC Fusion Technology (Alpha): A groundbreaking feature that enables 64-bit applications to host certain 32-bit ActiveX controls through an out-of-process bridging mechanism. This removes the traditional limitation requiring ActiveX controls to match the host application's architecture, allowing legacy 32-bit controls to work in modern 64-bit applications via transparent IPC communication.
Language & Compiler Improvements
-
Enhanced Type Inference: The
Dimstatement with inline assignment now properly infers the type from the assigned value (e.g.,Dim A = 5&is now equivalent toDim A As Long = 5) instead of defaulting to Variant. -
Conditional Compilation Fix: Resolved an edge case where underscore characters at the end of lines were incorrectly treated as line continuators within inactive conditional compilation blocks.
Control & Form Fixes
-
MDIForm Compilation Error: Fixed compiler error in MDIForm when the 'Printers' feature is disabled in project settings.
-
Control Property Corrections: Fixed the ComboBox.List property to preserve the current ListIndex, and corrected ActiveX control Visible property-get to properly consider parent containers.
-
Form Naming Conflict: Resolved an issue where having a control named 'New' would prevent form compilation even without defining a 'New' constructor.
WARNING: The following issues are present in each of the releases below:
- This is a BETA release under active development. It is not recommended for production use.
BETA 976
- added: (alpha state) twinBASIC Fusion technology to allow some 32-bit ActiveX controls to be used in 64-bit projects (documentation to follow)
BETA 977
- renamed: App.AxHostEXEPath to FusionHostEXEPath for consistency
- renamed: renamed project setting 'ActiveX Hosting EXE Output Path' to 'ActiveX Fusion Host EXE Output Path' for consistency
- note: Fusion documentation now temporarily available at https://github.com/twinbasic/documentation/wiki/twinBASIC-Fusion-Technology
BETA 978
- fixed: FileDialogDemo broken in recent builds [ fafalone, discord ]
- improved: Dim with an inline assignment now uses the inferred type, rather than defaulting to Variant, e.g.
Dim A = 5&is the same asDim A As Long = 5[ wqweto, discord ] - fixed: edge case of underscore character at end of line treated as line continuator incorrectly inside inactive conditional compilation blocks [#2339]
- fixed: compiler error inside MDIForm when 'Printers' feature is disabled in project settings [#2333]
- updated: 1 language pack (Spanish)
- special thanks to our community members for the new/updated language packs (marcos_lm)
BETA 979
- fixed: (regression) command-line import/export feature has been broken for a while
- fixed: having a control named 'New' would cause a form to not compile, despite not defining a 'New' constructor [ vinicio, discord ]
- fixed: ComboBox.List property-let was not preserving the current ListIndex [ kimpos, discord ]
- fixed: ActiveX control Visible property-get was not taking into consideration the parent container [ kimpos, discord ]