twinBASIC Update: December 23, 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

Supporter/VIP Roles Added to Discord Server

Posted by Wayne in Discord:


twinBASIC Licence Holders

We’ve recently added Supporter / VIP roles to the Discord, but not many people have assigned theirs so far.

It’s very much in your interest to do this, because these roles are how we’ll be rolling out new Discord features, including:

  • 🐞Bug report prioritisation
  • 💬Supporter / VIP-only lounge channels and polls
  • 🚀Early access to certain discussions and experiments
  • ⚡Clearer visibility when asking for help

Nothing changes right now if you don’t do it–but as we add more features, roles are how Discord will know who gets access to what.

How to get your role
It’s very simple:

  1. Click in the normal chat input box in the #general channel (at the bottom)
  2. Type: /supporter
  3. Follow the on-screen steps

When prompted, enter the email address you used when registering for the licence.

That’s it–no public messages, everything is handled privately.

If you’ve already done this, you’re all set 👍

If you haven’t, now’s a good time—it’ll save you missing out later as more supporter features come online.


More Details on the Discord Supporter Roles

Generated by Claude-Opus-4.5

Wayne Phillips launched the TWINSERV bot this week on the twinBASIC Discord server, enabling license holders to claim their roles by typing /supporter in any server channel.

The system verifies users against their registered email addresses and assigns color-coded usernames according to their license tier. Dedicated lounge channels are now open for each tier within the Discord server, with plans to use these roles for bug report prioritization, early access features, and enhanced visibility when seeking help. If you're a license holder who hasn't joined the Discord server yet or hasn't activated your role, now's the time.

Future Discord features will be gated by these roles, so claiming yours ensures you won't miss out as more supporter benefits roll out.

The four Discord role tiers available on the twinBASIC server

The Discord role system includes four distinct tiers:

  • Moderator (purple)
  • VIP Gold Supporter (orange)
  • VIP Silver Supporter (blue; limited Black Friday promotion, returning after website revamp in the new year)
  • Supporter (green - Ultimate/Pro editions)

Each tier receives its own dedicated lounge channel on the Discord server and will gain access to tier-specific features as they're rolled out.

Example Discord profile showing both moderator and Supporter role badges

Once activated, your role badges display prominently beneath your Discord username. These visual indicators help community members quickly identify fellow supporters and contributors, fostering recognition and facilitating more targeted discussions in the tier-specific lounge channels.

How to Claim Your Supporter Role

Type /supporter in any Discord channel to begin the authorization process
  1. Join the twinBASIC Discord server if you haven't already: https://discord.com/invite/UaW9GgKKuE
  2. Type /supporter in any channel's chat input box
  3. Select the /supporter command from the TWINSERV bot when it appears in the dropdown menu
Enter the email address associated with your twinBASIC license purchase
  1. Enter the email address you used when purchasing your twinBASIC license in the form that appears
  2. Check your email for a 6-digit authorization code from TWINSERV
  3. Enter the code when prompted to complete the verification

Important: You must use the same email address associated with your license purchase. If you don't remember which email you used, contact Wayne Phillips directly in the Discord server and he can add alternative email addresses to your account. A new website with user logins and access to purchase history is planned for 2026, which will make managing your account details easier.

Discord Chat Summary

* Auto-generated via Claude-Sonnet-4.5

Overview

The week of December 17-23, 2025 saw significant community engagement around the new Discord Supporter role system, continued technical discussions about language features, and impressive progress on documentation infrastructure. The community demonstrated strong enthusiasm for twinBASIC's PNG support and enhanced Collection capabilities, while Wayne Phillips maintained his characteristic responsiveness to both technical issues and community needs.

Discord Supporter Role System

Wayne Phillips introduced the TWINSERV bot allowing license holders to claim Supporter/VIP Discord roles via the /supporter command. The system authenticates users through their registered email addresses and assigns color-coded roles (green for Supporter, blue/gold for VIP tiers). Several users encountered email mismatches between their registration and PayPal addresses, which Wayne resolved individually. The rollout included dedicated Supporter and VIP lounge channels, with future plans for bug report prioritization and early access features. Wayne made a notable gesture offering a free license to community member Snow32 if they can avoid being banned for three months.

Language Features & Syntax Improvements

Wayne Phillips renamed the [PreserveSig] attribute to [UsesHRESULT(Boolean)] for improved clarity after community feedback about counterintuitive syntax. Extensive discussions explored memory access patterns using CType(Of T)(), with Wayne demonstrating elegant solutions using generic UDT wrappers. The community explored HRESULT handling in VBA/twinBASIC interfaces, particularly around IEnumVARIANT implementation challenges, with consensus that vtable swapping or twinBASIC's Err.ReturnHResult remain the practical solutions.

Built-in Features & Collections

Community member yereverluvinunclebert discovered twinBASIC's native PNG support works seamlessly with Collections, eliminating the need for complex GDI+ code required in VB6. Testing revealed twinBASIC Collections outperform Scripting.Dictionary in speed benchmarks from 2023. The enhanced Collection includes an .Exists method, though it remains immutable (add/delete only, no in-place updates) unlike Scripting.Dictionary. Users discussed alternatives including Cristian Buse's Dictionary replacement and WinRT collections for scenarios requiring update capabilities.

IDE & Development Tools

Discussion emerged around implementing an Object Browser for exploring TypeLibraries and Packages, with Wayne noting it's "probably 1 day of work" but deprioritized. The GlobalSearch add-in provides interim functionality for cross-reference searches. Users explored workflow differences between VB6's MZ-Tools find and Monaco's search capabilities. Wayne addressed a persistent ACCESS_VIOLATION error through iterative beta releases (941-943), demonstrating the challenge of debugging without reproducible test cases.

Documentation Infrastructure

Community member okas_o announced significant progress on comprehensive documentation at docs.twinbasic.com, emphasizing manual creation over AI generation due to legal and ethical concerns. The community explored mdBook (Rust-based) and MyST Parser (Python-based) as potential platforms for migrating from GitHub Wiki to a searchable, indexed documentation site. Both tools support static HTML generation and GitHub Pages deployment, with plans to establish docs.twinbasic.com as the canonical documentation source.

Community Engagement & AI Discussion

JimDrew shared impressive results using Google AI Studio to convert VB6 graphics code to GDI calls, achieving 30x performance improvements (6 seconds to 200ms), with twinBASIC compilation further improving to 94ms. The community discussed AI's role in development, comparing it to calculator adoption—useful when properly directed but requiring foundational knowledge. Discussion touched on potential for AI-generated twinBASIC books, though consensus favored human-authored comprehensive guides focusing on new features and modern capabilities rather than VB6 compatibility alone.

Conclusion

The week demonstrated twinBASIC's maturation through both technical capabilities and community infrastructure. The Supporter role system establishes a framework for future feature rollouts and community prioritization, while the documentation initiative addresses a critical need for comprehensive, searchable reference materials. Technical discussions revealed the depth of twinBASIC's modern features—from native PNG support to generic UDT wrappers—that eliminate complex workarounds required in VB6. Wayne's consistent engagement, from resolving individual email mismatches to iterative bug fixes, exemplifies the project's community-focused development approach as it approaches the v1 milestone.

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."

Key Improvements & Additions

  • Tab Management Enhancement: Middle-click on IDE tab elements now closes the tab, improving workflow efficiency.

  • Compiler Warning for Erase Statement: New compiler warning TB0031 "Suspicious Use Of Erase" alerts when the Erase statement is used on function return values (previously a compile error).

  • Resource Handling Improvement: STRING resource folders without .json files are now treated as regular folders rather than resource string tables, resolving issues with LoadResData in compiled DLLs.

Significant Fixes

  • UserControl Event Exposure: Fixed regression where UserControls exposing events weren't working in other hosts when compiled to ActiveX OCX, and corrected improper exposure of UserControl base methods via ActiveX interfaces.

  • UDT Function Returns: Resolved issue where UDT return values from functions couldn't be passed directly as arguments to imported ANSI APIs without intermediate variables.

  • Modal Form Behavior: Multiple fixes addressing modal form closure issues, parent form focus problems, and control event firing when forms are reloaded.

  • ARM Licensing: Fixed license key persistence issues on ARM systems when switching between Win32/Win64 compilation modes.


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.

BETA 932

  • 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
  • fixed: (regression) UserControls that expose events not working in other hosts (compiled to AX OCX)
  • fixed: some IDE errors as reported via automatic error reports

BETA 933

  • 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
  • fixed: (regression) UserControls were exposing all UserControl base methods via AX interfaces, not matching VBx
  • updated: Sample 4 VBE Toolwindow to account for changes above
  • fixed: on ARM systems, the licence key for the IDE would have to be re-entered when switching between Win32/Win64
  • fixed: attempting to Build very quickly after switching to 64-bit mode could prevent the licence being applied, leading to a nag screen being embedded in the executable incorrectly
  • fixed: applying hot-change project settings could cause the IDE to override the settings of the next opened project in the same session
  • fixed: spurious 'revealLineInEditor' messages in the DEBUG CONSOLE in recent builds [ FullValueRider, discord ]
  • fixed: for an imported and unsaved VBP, App.Path would incorrectly return a path with a trailing backslash when run in the IDE [ Jim Mack ]
  • fixed: some IDE errors as reported via automatic error reports

BETA 934

  • 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
  • fixed: Printer.Font = "Something" was not working, required .Name suffix [ PT, private ]
  • added: compiler warning TB0031 "Suspicious Use Of Erase", where Erase statement is used on a function return value (previously a compile error in tB) [ PT, private ]
  • improved: middle-click on IDE tab elements closes the tab [ wqweto, discord ]
  • fixed: some IDE errors as reported via automatic error reports

BETA 935

  • fixed: some modal form closure issues regarding parent form being brought to the foreground incorrectly [ Don, discord ]
  • fixed: (regression) some control events would not fire when a form is reloaded [ Don, discord ]
  • fixed: Custom controls Samples 6 and 8 now working again after the big BETA 909 changes

BETA 936

  • fixed: a further glitch involving modal dialogs on destruction [ Don, private ]

BETA 937

  • fixed: compiler restart when using the report designer would leave the designer inoperable
  • fixed: native MonthView control did not self-resize on first placement of new controls
  • fixed: for self-resized controls, the form designer mini-toolbar position would not be correct after the self-resize
  • fixed: Image control alpha transparency support sometimes not working [ sokinkeso, private ]

BETA 938

  • fixed: ActiveX controls placed on a container ActiveX control could fail if the form is reloaded [ kimpos, private ]

BETA 939

  • fixed: incorrect handling of Label AutoSize height when a blank caption is set [ Ubehage, discord ]
  • fixed: ANSI UDT issue when passing a function UDT return value directly to an ANSI API [#2272]

BETA 940

  • improved: when STRING resource folder does not contain .json files, it is now treated as a regular folder rather than a resource string table [#2280]
  • fixed: (regression) Export after save project setting was being ignored since BETA 809

BETA 941

  • fixed: some IDE errors as reported via automatic error reports

BETA 942

  • fixed: some IDE errors as reported via automatic error reports

BETA 943

  • fixed: some IDE errors as reported via automatic error reports