twinBASIC Update: January 27, 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:


Highlights

Comprehensive IDE Documentation

Community users okaso and Alex Hedley continue building out the official twinBASIC documentation site with a focused effort on the IDE this week.

Most screens are now documented–complete with well-annotated screenshots–at https://docs.twinbasic.com/tB/IDE.

Discord Chat Summary

* Auto-generated via Claude-Opus-4.5

Overview

This week brought significant progress across the twinBASIC ecosystem with compiler enhancements, documentation milestones, and exciting third-party tooling announcements. The compiler gained new warning capabilities and bug fixes, while the documentation site received a dark theme and substantial content expansion. The KESO-DevToolz commercial add-in suite announcement signals growing commercial interest in the platform.

Compiler & IDE Updates

Wayne delivered several compiler improvements throughout the week. The new TB0032 warning for unused line labels helps developers identify dead code, prompting community discussion about the Erl function and error handling patterns. wqweto suggested the compiler could optionally insert line numbers matching editor positions for more meaningful Erl reporting, while logley noted that full vbWatchdog integration would eliminate the need for manual line numbering entirely.

Bug fixes addressed Custom Controls forms regression (BETA 958), delegate coercion issues with no-parameter delegates in AppObjects (BETA 962), Monaco editor hover box text wrapping (BETA 963), and Validate event edge cases (BETA 964). Wayne also updated the twinbasic.com comparison table to clarify that Community edition supports x64 compilation after fafalone noted confusion in the community.

Documentation Site Progress

The documentation effort accelerated significantly under okas_o and alexhedley's leadership. The IDE Tour pull request reached merge status, providing comprehensive coverage of most IDE screens. okas_o pushed major additions to the reference section covering statements and procedures, and implemented Mermaid diagram support for enhanced documentation capabilities.

A dark theme was implemented and deployed within hours of the feature request, with okas_o completing an architectural cleanup using SCSS generation from the just-the-docs theme. alexhedley proposed GitHub workflow automation for PR checks, further improving the contribution process. mansellan noted that having a professional docs.twinbasic.com site will significantly boost platform confidence.

KESO-DevToolz Announcement

sokinkeso announced KESO-DevToolz, a commercial add-in suite representing three years of development work, with beta release scheduled for early February 2026. The announcement received enthusiastic community response. A video codec issue (H.265 vs H.264 compatibility) sparked a tangential but lively discussion about video encoding standards before sokinkeso re-uploaded an H.264 version.

Language Features & Technical Discussions

The community explored array initialization patterns extensively. bclothier clarified that runtime-sized arrays require ReDim rather than inline Dim syntax, unlike C#'s new expression approach. alaskandruid requested a feature allowing dynamic array initialization like Dim Results() As String = Array(0 To k).

okas_o and bclothier discussed UDT limitations with resource tracking and reference counting. Wayne recommended classes over UDTs for proper reference counting scenarios, noting that UDTs with methods can use Type_Assignment for custom copy behavior but reference counting remains better suited to classes.

bclothier explored UTF-8 string handling with external libraries, noting asymmetry in StrConv that required workarounds when receiving UTF-8 strings from external APIs. Wayne's UTF8 UDT wrapper provided a solution.

WinDevLib & RAD Capabilities

twixydon praised twinBASIC's rapid development capabilities, creating a complete 958 KB standalone 64-bit executable with full API access in under a minute from an 18 KB source file. Wayne credited fafalone's work on WinDevLib, which now covers approximately 15,000 APIs and 3,800 COM interfaces. As twixydon noted: "Show me another language that can do this!"

Community Tooling

Screenshot workflow preferences emerged during documentation discussions, with bclothier successfully evangelizing Greenshot to okas_o. deletedewd highlighted Windows.Graphics.Capture and Windows.Media.OCR namespaces from WinRT as powerful alternatives for screen capture needs.

woeoio2 suggested creating documentation sections for IDE plug-ins and the package store, along with download tracking for packages to identify popular libraries—reflecting the ecosystem's maturation.

Conclusion

The week demonstrated twinBASIC's momentum on multiple fronts. The compiler continues receiving responsive bug fixes and refinements, documentation is reaching professional quality with dark theme support and comprehensive IDE coverage, and the commercial add-in ecosystem is emerging. With WinDevLib's extensive API coverage enabling rapid Windows development and the community actively contributing documentation and tooling, twinBASIC is solidifying its position as a modern successor to VB6's rapid application development legacy.

Around the Web

twinBASIC + WinDevLib OpenGL Demos

Posted by fafalone in show-and-tell:

I've put together a couple OpenGL demos to show off the new APIs added to WinDevLib. The first is just a basic cube using the built in opengl32.dll APIs. The other uses the new delegates that call more recent OpenGL functions loaded by pointer. It also demonstrates using a programmable shader...
#version 120

varying vec3 vNormal;
varying vec3 vColor;

void main(void)
{
    vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex;
    gl_Position = pos;

    vNormal = normalize(gl_NormalMatrix * gl_Normal);
    vColor = gl_Color.rgb;
}
...that is embedded as a text resource then compiled by the OpenGL APIs.

More information in the GitHub repo along with the source files.
WinDevLib OpenGL Demo #1
WinDevLib OpenGL Demo #2
GitHub - fafalone/OpenGLDemos: twinBASIC + WinDevLib OpenGL Demos
twinBASIC + WinDevLib OpenGL Demos. Contribute to fafalone/OpenGLDemos development by creating an account on GitHub.

KESO-DevTools Launch Video

Trailblazing twinBASIC IDE add-in pioneer, sokinkeso, officially announced that KESO-DevToolz, a comprehensive commercial add-in suite for twinBASIC, is entering beta in early February 2026.

The suite consolidates multiple add-ins developed over three years of work and research into a single polished package. The full feature list will be revealed at launch.

The announcement video offered a teaser of the capabilities to come:

Community members like fafalone and bclothier expressed enthusiasm, with yereverluvinunclebert recommending a trial version to help users experience the tools before purchasing, comparing it to his own journey from trialing MZ Tools 3.0 to buying version 8.0.

This marks a significant milestone for the twinBASIC ecosystem, demonstrating that the platform has matured enough to attract serious commercial tooling investment from third-party developers.

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

  • IDE stability improvements: Fixed critical issue where the IDE STOP button would fail when forms had code that canceled the Unload event. Also resolved compiler instability during editing in certain projects, and ensured failed builds no longer leave the compiler in an unpredictable state.

  • Form.PrintForm enhancements: Resolved rendering issues with Form.PrintForm that were producing invalid outputs, and fixed problem where invisible controls were incorrectly included in renders.

  • VBA.InputBox positioning corrections: Updated VBA.InputBox() to properly account for screen working area when auto-positioning dialogs and set the default button state correctly on the OK button for better VB6 compatibility.

  • Form Validate event fixes: Corrected the Validate event firing behavior to properly trigger when leaving controls, and implemented ActiveX wrapper Validate event support.

  • OLE drag-and-drop fixes: Resolved issues with OLE Drag events not firing in certain circumstances and OLEDragOver event not always triggering correctly.

  • ActiveX control handling: Fixed multiple edge cases around ActiveX control destruction, modal forms, and improved overall control behavior reliability.


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 957

  • fixed: the IDE STOP button would not work if there was an open Form that has code in the Unload event that cancels the unload [#2311]
  • fixed: (regression since BETA 951) some OLE Drag events might not fire in some circumstances [ birnaofthenorth, discord ]
  • fixed: (regression) IDE designer mini toolbar font size list was not working [ feldharke, discord ]
  • fixed: compiler instability in some projects during editing [#2303]
  • fixed: [ComExport] attribute doesn't respect Aliases in function's return type [ VanGoghGaming, discord ]

BETA 958

  • fixed: IDE Import feature now causes auto-save of changes to ensure state is not lost
  • fixed: (regression since BETA 896) Form.PrintForm was broken, producing invalid renders in many cases [ dannyb1896, discord ]
  • fixed: Form.PrintForm would sometimes include invisible controls (Visible = False) in the render
  • fixed: after a failed build, the compiler could be in an unpredictable state, leading to errors when trying to F5/run the project
  • fixed: (regression since BETA 951) CustomControls samples not working [ fafalone, discord ]
  • fixed: OLEDragOver event not always firing [ Don, discord ]

BETA 959

  • fixed: some edge cases around AX control destruction [ kimpos, discord ]
  • fixed: some edge cases around modal forms [ kimpos, discord ]

BETA 960

  • fixed: (regression) Load statement against a variable of type 'Form' rather than a more specific type was failing at runtime [ Don, discord ]
  • fixed: VBA.InputBox() did not have the default button state set on the OK button [#2312]
  • fixed: VBA.InputBox() did not take into account of the screen working area when auto-positioning the dialog [#2313]

BETA 961

  • fixed: SetErrorMode() is now used issued during startup (and built executables startup) to match VBx behaviours [ Don, discord ]
  • fixed: (regression) adding a new ListBox to a form would cause the compiler to briefly restart [ fan2006, discord ]

BETA 962

  • fixed: RaiseEvent throwing an error in a Form class if there are no listeners [ birnaofthenorth, discord ]
  • fixed: text wrap behaviour in the monaco hover box [ Don, discord ]
  • fixed: some edge cases around no-arg delegate calls [ fafalone, discord ]

BETA 963

  • fixed: text wrap behaviour in the monaco hover box [ Don, discord ]

BETA 964

  • fixed: Validate event not firing correctly in general [#1962]
  • improved: implemented ActiveX wrapper Validate event
  • fixed: (regression) UserControl.PreKeyEvents not working