twinBASIC Update: November 26, 2025

Highlights include an announcement of the upcoming Black Friday sale dates (tB perpetual licenses, anyone?) and bug fixes for the recently released UDT enhancements.

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:


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.

WaynePhillipsEA: Our Black Friday event will be from Fri 28th Nov - Fri 5th Dec.

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 for CType(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 CType dereferencing 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 ZeroMemory operations 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 cRegFree class 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.

Releases · WaynePhillipsEA/twinbasic
Contribute to WaynePhillipsEA/twinbasic development by creating an account on GitHub.

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

All original code samples by Mike Wolfe are licensed under CC BY 4.0