twinBASIC Update: June 27, 2021

Highlights include support for external version control, the official launch of the code prettifier, and support for resources and visual styles via manifest files.

twinBASIC Update: June 27, 2021

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.


There were some major developments in the twinBASIC world this week, including support for external version control; the official launch of the prettifier (now enabled by default); and support for resources and visual styles via manifest files.

Version Control Support!!!!

This one is a huge deal for me.  The lack of usable version control was a major issue.  It kept me from really diving in and putting twinBASIC through its paces.  twinBASIC now supports external version control via import and export flags.

I call it external version control because it is not yet integrated into VS Code.  The import and export flags will simply extract the text files embedded in the .twinproj container files into plain, UTF-8 text files in a destination folder location.  The extracted text files can then be diffed, merged, or committed in the version control platform of your choice (Git, Mercurial, SVN, etc.).

The catch is that you need to pass the import and export flags to the twinBASIC executable.  The executable is buried in a versioned subfolder of the VS Code extensions folder.  This means that the location of the twinBASIC exe will change every time there is a new release of twinBASIC (which happens more than once a day on average).

To address this issue, I built a batch file that automatically finds and runs the latest twinBASIC executable.  As long as you have the twinBASIC VS Code extension installed, the batch file should just work.

How to Use Version Control with twinBASIC
You can now extract the embedded text files from .twinproj containers for use in version control. I wrote a batch file to make the process even easier.

While VS Code integrated version control is not yet available, it is on the project roadmap.

Code Prettifier Matures

Speaking of version control, one thing that gives twinBASIC a huge leg up on VBA in terms of version control is its improved implementation of identifier letter casing.  

Whereas VBA forces global updates with complete disregard for identifier scope, twinBASIC uses intelligent letter casing updates.  The authoritative letter casing occurs within the declaration line.  All other lines of code are then updated to match.

This feature is known as the code "prettifier" in twinBASIC, and as of v0.10.2477, it is enabled by default.

Resource Support

Here's Wayne's announcement from the relevant GitHub issue:

You can now create an embedded manifest in twinBASIC very easily. Just create a MANIFEST folder in the Resources folder, and inside it create a new file called #1.xml. Copy and paste the manifest from the following txt file.

As soon as you build your EXE with the manifest embedded you'll now see that visual styles are applied, e.g. to MsgBox calls.

The next tB update will include a VS code command for generating this manifest file for you.

This currently doesn't affect code running in the IDE, since the manifest would need to be applied to the compiler EXE. However, tB will soon read the manifest in your resource data, and turn ON/OFF visual styles for you, for code running in the IDE, based on that manifest file.

Shortly after the initial announcement, Wayne announced an automated process for creating the Resource Manifest file.  The copy-paste step from above is no longer necessary:


We now have a VS Code command of 'twinBASIC: Create Resource Manifest (Visual Styles)' available by right-clicking on the Resources folder, or via the command palette (F1).

Around the Web

Support for EXE/DLL embedded resources

Wayne started a new discussion around how best to implement resource embedding:

The Sample 5 project has been updated to show how to create a ribbon with an embedded image for the button.



Join the discussion here: Support for EXE/DLL embedded resources

Raise all Terminate events on Stop?

There was a new comment on a discussion from the early days of the twinBASIC release:


One option - this is what python does - is to have a soft stop (interrupt) and a hard stop (suspend). For a python terminal app, ctrl+c raises a KeyboardInterrupt Exception which can be caught and handled, and is no worse than any other exception. Meanwhile ctrl+z suspends the process without any other code running, pull the rug out like stop button/end. The KeyboardInterrupt Exception also derives from a different base class to the others so it must be caught explicitly, meaning it generally does a pretty good job of bringing down a program safely.

Join the discussion here: To raise all Terminate events on Stop


Here are the updates from the past week.  You can also find this information by installing the twinBASIC VS Code extension and clicking on the Changelog tab of the extension page:

[v0.10.2799, 27th June 2021]

[v0.10.2781, 26th June 2021]

[v0.10.2780, 26th June 2021]

[v0.10.2773, 25th June 2021]

[v0.10.2600, 23rd June 2021]

[v0.10.2532, 22nd June 2021]

[v0.10.2477, 22nd June 2021]

  • improved: rewrote the prettifier, removed experimental status and made it default to ON
  • fixed: double-free of memory when encountering a For-block without corresponding Next closure

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