twinBASIC Update: March 17, 2026
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
Emergency WebView2 Fix Released
Posted by Wayne in Discord:
Looks like a WebView2 update has occurred that causes [some twinBASIC controls to appear visually hidden during design time, but show up correctly at runtime]. The tB IDE uses CSS data-uri's for some images (e.g.background-image: url('data:image/png;base64...')), however this new version of WebView2 is not rendering these images if we don't provide a full mime type, e.g.background-image: url('data:image;base64...')is no longer rendering at all. All previous versions of twinBASIC IDE affected once WebVIew2 has been updated.
This just further strengthens our position for why we need to move away from WebView2 for the IDE, and use Chromium (CEF) instead, which gives us much more control and stability.
Within 90 minutes, Wayne had released an interim update (BETA 974) that addressed this critical issue.
This emergency update does not include any support for hosting 32-bit ActiveX controls on 64-bit forms – that work is still ongoing and will be released next week.
And that, boys and girls, is why you maintain a stable release branch in your version control repository separate from your working development branch. That's what allows you to quickly apply and roll out a critical bug fix without worrying about whether you will break anything by releasing a half-complete new feature.
Discord Chat Summary
* Auto-generated via Claude-Sonnet-4.5
Overview
This week's discussions centered on unsigned integer support and union types, random number generation improvements, and a critical WebView2 compatibility issue that prompted an emergency IDE release. The community also explored advanced graphics rendering techniques using Cairo and GDI+, while clarifying twinBASIC's approach to asynchronous programming.
Language Features & Roadmap
- waynephillipsea confirmed unsigned integers are planned but require extensive testing, likely arriving after the v1 release
- Union type support remains a significant need for the community, particularly for Windows API interop scenarios where multiple unions exist within structs
- fafalone emphasized the limitations of current workarounds using CType and separate UDTs, noting alignment issues that make proper union support essential
- Native multi-threading syntax (async/await style) is planned for post-v1.0, though low-level APIs like
CreateThreadwork without VB6's limitations
Random Number Generation
- Community discussion revealed confusion about integer types and ranges, with fafalone clarifying that LongLong (64-bit signed) already supports values up to 9.2 quintillion
- Multiple superior alternatives to VB's
Rndfunction were shared, includingBCryptGenRandomfor cryptographic-quality randomness and WinRT'sCryptographicBufferStatics.GenerateRandomNumberfor simpler usage - deletedewd contributed a software-based RNG algorithm adapted from Olaf's code that supports seeding for reproducible sequences, important for gaming applications
Critical WebView2 Issue & Emergency Release
- waynephillipsea identified a breaking change in recent WebView2 updates affecting CSS data-uri rendering in the IDE when full MIME types aren't specified
- This incident reinforced the decision to migrate from WebView2 to Chromium (CEF) for better control, stability, and cross-platform support
- Beta 974 was released as an emergency update to address the WebView2 breakage, with the planned 32-bit ActiveX control hosting feature postponed to the following week
- wqweto noted the correct MIME type for JPEG images is
image/jpegnotimage/jpgfor developers using data URIs
Graphics & Rendering Development
- yereverluvinunclebert_49972 made progress implementing transparent PNG rendering using both Cairo and GDI+ simultaneously, working toward replicating RichClient functionality
- Successfully resolved flickering issues with GDI+ rendering on the desktop, though Cairo-based images still exhibit some flicker when other Cairo widgets are nearby
- Demonstrated handling images as byte streams stored in dictionaries, extracting them as stdPicture or byte streams depending on the rendering engine
Conclusion
The week highlighted twinBASIC's ongoing evolution with clear roadmap items for unsigned integers and native threading, while the WebView2 incident demonstrated the team's responsiveness to critical issues. Community members continue pushing the boundaries of graphics programming, and the discussions around RNG improvements show the community's willingness to share practical solutions. The move toward CEF for the IDE represents a strategic shift toward greater stability and cross-platform capabilities, reinforcing the project's long-term vision.
Around the Web
AlgDataStruct
Posted by okaso in show-and-tell:
Algorithms and data structures for tB. Arrays, Maps, Hashes, Trees, etc.
This project is in design and internal dogfooding phase. I have many questions to ask about design decisions and other features. I'd like this to be a high-quality, 100% tested package that is a go-to.
There are basic ValueArray and ObjectArray types that wrap dynamic arrays and allow easy item append, finding items, etc. I have implemented both as fixed base-1, i.e. elements are numbered from 1 up. Is this reasonable, or should these support arbitrary lower index. Should negative indices be supported?
I could not find full source code yet for the project, beyond the link to the GitHub Gist in okaso's follow-up response reproduced below:
For general discussion: https://gist.github.com/KubaO/f01f62b008f937d4ce7a9f3079cb5987
This is the complete reference manual page for the array types in AlgDataStruct. All of this is implemented and has full branch level test coverage.
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."
-
Fixed ListBox and ComboBox item insertion edge cases: Resolved issues where items couldn't be added to ListBox/ComboBox controls through undocumented methods, including the
List(index)assignment approach when the indexed location is empty (Issue #2217) -
Improved IDE workflow for form designers: Opening a form designer now automatically resets the running project if runtime forms are open, allowing the designer to launch properly
-
Fixed multiple MDI and modal form handling issues: Resolved ALT-TAB switching quirks when MDIForm has additional modal forms on top, and corrected control visibility property behavior to properly reflect parent visibility
-
Addressed IDE display and designer problems: Fixed IDE display issues caused by WebView2 updates and resolved regression in BETA 973 where Report designer showed all controls as red blocks
-
Fixed form timer regression: Form timers now properly restart when reopening a form
-
Enhanced ActiveX control compatibility: Resolved CodeJock TabControl design-time issues, Windows Media Player initialization problems with extended paths, and corrected LostFocus event firing behavior when closing hosting forms
WARNING: The following issues are present in each of the releases below:
- IMPORTANT: This is a BETA release under active development. It is not recommended for production use.
- INTERIM RELEASE TO MITIGATE RECENT WEBVIEW2 BREAKAGES
BETA 974
- fixed: (regression) Form timers would not restart when reopening a Form
- fixed: CodeJock TabControl not working at design time [ kimpos, private ]
- fixed: control drag box rendering (DragMode) can glitch if controls are moved in response to DragOver events [ kimpos, private ]
- fixed: Control.Visible property-get not properly reflecting parentage visibility [ kimpos, private ]
- fixed: MDIForm with additional modal form on top could cause ALT-TAB switching quirks [ kimpos, private ]
- fixed: quirk with Windows Media Player control where AX won't initialize if current directory is an extended path (\?\ prefixed)
- improved: opening a form designer will now reset the running project if runtime forms are open, to allow the designer to open
- fixed: IDE display problems with recent changes issued via WebView2 updates
BETA 975
- fixed: ActiveX LostFocus events should not fire when closing the hosting form [ kimpos, private ]
- fixed: (regression in BETA 973) Report designer showing all controls as red blocks
- fixed: some edge cases around adding ListBox and ComboBox items through undocumented methods [#2217]
- fixed: CALLSTACK panel could sometimes leave a lingering entry when restarting the compiler
- fixed: recent changes to typelibrary parsing resulted in some projects unable to load [ kimpos, private ]