twinBASIC Update: November 26, 2025
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
Black Friday Sale Dates Announced
Wayne Phillips announced the dates for the annual twinBASIC Black Friday sale: Friday, November 28, to Friday, December 5.
No details yet on what the specific deals will be, but a splash screen at twinbasic.com offers some hints:
Perpetual licence deals... discounts... upgrades... all sorts of possibilities!
Discord Chat Summary
* Auto-generated via Claude-Sonnet-4.5
Overview
This week saw significant technical discussions around performance optimization, memory management, and advanced pointer operations in twinBASIC. The community explored sophisticated techniques for working with arrays, memory, and type casting, while Wayne confirmed upcoming Black Friday subscription promotions and addressed several implementation details around Variants and UDTs.
Performance & Resource Management
- dazzling_hare_31443 identified a startup performance issue when embedding PNG images in ImageList components, experiencing 5-10 second delays on first run. The community suggested this relates to resource loading and antivirus scanning of embedded images.
- yereverluvinunclebert_49972 recommended storing images in external folders rather than embedded resources to avoid antivirus false positives, which have historically flagged embedded images as potential malware vectors.
- Discussion emerged around inter-process communication strategies, with jpbrown advocating for SQLite databases over shared memory or sockets for multi-process data synchronization, citing performance benefits and built-in transaction support.
Advanced Type Casting & Memory Operations
- xelniya and deletedewd explored sophisticated pointer arithmetic and array overlay techniques, with xelniya demonstrating in-place string manipulation using
CType(Of T)for reinterpret casting. - waynephillipsea introduced a generic wrapper pattern using
UDTWrap(Of T)to eliminate the need for primitive-specific wrapper types, and discussed future syntax simplification:(ptr + i * 2) As UDTWrap(Of Integer)as syntactic sugar forCType(Of T)(Expression). - xelniya proposed C#-style ref locals as a safer alternative to traditional pointers, suggesting
Dim char As ref Integer = CType(Of Integer)((ptr + i * 2))for cleaner type-punning operations. - fafalone highlighted inconsistencies in
CTypedereferencing behavior, noting it only dereferences for UDT/Long combinations, suggesting the need for separate operators for dereferencing vs. direct assignment.
Bug Reports & IDE Issues
- deletedewd reported erratic Undo (Ctrl-Z) behavior in beta 907, which sokinkeso traced back to code formatting and missing undo points—an issue present since beta 783.
- deletedewd noted that duplicate interfaces with identical names no longer generate diagnostics errors, a change from previous behavior.
- waynephillipsea clarified that Variants containing UDTs are not yet supported, explaining why certain
ZeroMemoryoperations that previously worked should not have been allowed.
AI & Documentation
- flurreey reported that Claude AI is now recognizing twinBASIC syntax without explicit prompting, correctly identifying tB-specific features like class and description syntax—a sign of growing language visibility.
RegFree COM & Excel Integration
- sniperhgy sought guidance on RegFree ActiveX DLL usage in 64-bit Excel, noting that manifest-based approaches working in 32-bit Excel fail in 64-bit versions.
- deletedewd provided a complete
cRegFreeclass implementation for registration-free COM activation, compatible with twinBASIC, VB6, and VBA 32/64-bit environments. - waynephillipsea noted that regsvr32 targeting HKCU hive (twinBASIC's default) requires no admin permissions, offering an alternative to RegFree approaches.
Business & Community
- waynephillipsea announced Black Friday subscription promotions running November 28 - December 5, 2025.
- Community members continued exploring twinBASIC's expanding feature set, with particular enthusiasm around enhanced UDTs, pointer operations, and the
[ArrayBoundsChecks(False)]attribute for procedure-level optimization.
Conclusion
The week demonstrated twinBASIC's growing sophistication in low-level memory operations and type manipulation, with community members pushing the boundaries of what's possible with pointer arithmetic and type casting. Wayne's introduction of generic wrapper patterns and discussion of future syntax improvements shows continued language evolution toward cleaner, more expressive code. The RegFree COM discussion highlighted twinBASIC's practical deployment scenarios, while AI recognition of tB syntax marks an important milestone in the language's broader visibility. With Black Friday promotions approaching and ongoing refinements to core features, the project continues its steady march toward v1 release.
Around the Web
Nothing noteworthy to report.
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."
-
Improved User-Defined Type (UDT) handling: Fixed multiple issues with ByVal UDT parameters, including code generation errors on X64, proper functioning in type libraries, and correct handling in Type_Assignment operations
-
Resolved UDT lifecycle issues: Type_Initialize and Type_Terminate events now fire reliably and only once per object lifecycle, fixing sporadic double-firing bugs
-
Enhanced control stability: Addressed crashes in Timer controls when forms are unloaded during timer events, and fixed a race condition in ComboBox destruction that could cause crashes
WARNING: The following issues are present in each of the releases below:
- IMPORTANT: This is an interim/experimental release. It includes significant changes, so some instability is to be expected.
- NOTE: CustomControls are currently broken in this release (e.g. Samples 6 and 8)
- NOTE: Some regressions are expected due to the significant architectural changes in this release
BETA 906
- fixed: byval-UDT codegen error on X64 in some circumstances [ VanGoghGaming, discord ]
- fixed: Type_Terminate not always firing for an inline ByVal UDT upgrade-assignment [ VanGoghGaming, discord ]
BETA 907
- fixed: Type_Assignment with a ByRef RHS param now works as expected [ VanGoghGaming, discord ]
- fixed: Type_Initialize/Type_Terminate could be fired twice, incorrectly, depending on the direction of the wind [ VanGoghGaming, discord ]
BETA 908
- fixed: ByVal UDT params now output correctly in generated type libraries and can be consumed by tB [ VanGoghGaming, discord ]
- fixed: (regression since BETA 896) Timer control could cause a crash in some instance, if the hosted form was unloaded during the timer event [ Don, discord ]
- fixed: ComboBox destruction could lead to potential crash due to race condition in WM_DESTROY handling