twinBASIC Update: August 28, 2022

Highlights include improvements to code selector boxes in the IDE, IntelliSense improvements, and better support for "kernel mode" (i.e., device drivers).

twinBASIC Update: August 28, 2022

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, 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, tweet me @NoLongerSet or email me at mike at nolongerset dot com.

Here are some links to get involved with the project:


Improvements to Code Selector Boxes in the IDE

The code selector boxes at the top of the IDE are now sorted alphabetically, rather than in declaration order.  Also, there are three new shortcut keys for forcing each box to drop down:

  • [Ctrl] + [1]: force dropdown of the component selector (useful if you have multiple Class or Module declarations in the same .twin file)
  • [Ctrl] + [2]: force dropdown of the list of implemented interfaces and WithEvents-enabled objects within the selected component from dropdown 1
  • [Ctrl] + [3]: force dropdown of the list of methods (functions and subs) within the selected interface or object from dropdown 2


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.


  • added: project setting 'Optimizer: Constant Function Folding'
  • added: attribute [ ConstantFoldable ], applicable to standard module procedures
  • fixed: codegen bug involving non-copy string movement, leading to double-free in some instances
  • fixed: (regression) global variable initializers not running in compiled EXEs/DLLs [ and ]
  • added: support for 'Any' datatype in Interface members [ fafalone, discord ]
  • improved: 'String' datatype in kernel mode now doesn't produce SysAllocString/SysFreeString for standard assignments, allowing to work with string literals in kernel mode


  • fixed: some important Collection class implementation edge cases [ KarlSevenSeven ]


  • fixed: whitespace rendering in several parts of the IDE [ ]
  • improved: intellisense is now better scoped when writing an assignment to a UDT member [ ]
  • improved: intellisense will no longer accidentally trigger 'False' when writing boolean assignments after pressing spacebar
  • improved: code selector combos are now alphabetically sorted [ ]

BETA 100

  • fixed: (regression since BETA 97) intellisense crash when writing parameters in interface member declarations [ ]
  • improved: all project templates now include a reference to 'OLE Automation' much like all VB6 project templates [ fafalone, discord ]
  • improved: removed setting 'COM Threading Model' and replaced with 'COM Initialization' allowing for choosing OleInitialize (default), CoInitialize(STA) or CoInitializeEx(MTA)

BETA 101

  • fixed: (regression) some edge cases involving taking references of variant arrays [ ]
  • fixed: auto-created function prototypes for Implements members were sometimes incorrect [ ]
  • improved: tweaked the back-color used alongside error squiggles in the editor in the LIGHT theme for better contrast [ ]
  • improved: tweaked ALT key handling in the IDE [ ]
  • improved: CTRL+[1/2/3] can now be used to drop down the code selector comboboxes [ ]

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