twinBASIC Update: July 15, 2025

Highlights include a major announcement on the current status of twinBASIC, a WinRT XAML Islands tB proof of concept, and an NtCreateToken API demo.

twinBASIC Update: July 15, 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

Important Project Update From Wayne

[The content below comes directly from the twinBASIC Official Roadmap Update Statement and reformatted for the web. The statement is available on the twinBASIC 12-MONTH ROADMAP page.]


twinBASIC - Official Roadmap Update - 8th July 2025

As we move closer to delivering the long-awaited v1 release of twinBASIC, we're sharing an important update to our development roadmap.

From the very beginning, estimating timelines for a project of this scale has been incredibly difficult. twinBASIC is more than just a modern development tool. It has been built from the ground up to meet the needs of today’s developers, while preserving the familiarity and strengths of the classic development experience that many still rely on.

Whilst noting that all previously published roadmap dates were clearly marked as tentative, we recognise that missed expectations can be frustrating, and we remain committed to improving how we communicate timelines moving forward.

After a careful review of the remaining work, we've made the decision to push the roadmap back. We know that some users will be disappointed by this news - and we want to be transparent about why this change is necessary. The expected release date for version 1.0 is December 19th 2025.

We acknowledge that we've made some mistakes in previous estimations. As we've tackled increasingly complex areas, it's become clear that many of the unknowns are only fully understood once deep into implementation. The good news is: the full picture is now finally in view.

The remaining major development items are:

  • General bug-fixing and compatibility improvements
  • Completion of all remaining intrinsic control properties and methods
  • Mnemonics support
  • UserControl property pages support
  • Partial-recompilation support (allowing for a much better experience for editing large projects)
  • Out-of-process debugging (for debugging ActiveX DLLs)
  • LLVM optimized compilation support

We estimate that these final development tasks will require approximately four months of focused work, with additional buffer time bringing us to the new roadmap projection.

In parallel, we're also making strategic investments in the future of the project. Whilst we're not ready to announce details, structural changes are underway that will enable us to grow sustainably and better support the needs of our community in the long term.

To allow us to focus more fully on twinBASIC, we'll be scaling back certain services under the EverythingAccess umbrella. Specifically, the Access Database Repair service will be wound down over the coming days and the vbMAPI product is being deprecated due to incompatibility with Microsoft's new Outlook and its removal of MAPI support.

Note that all other EverythingAccess products and services will remain active and under continuous development - including the upcoming launch of vbWatchdog v5, due later this month. Services such as our MDE to MDB and ACCDE to ACCDB conversion services are unaffected and will remain fully operational.

We’re incredibly grateful for your continued support and patience as we complete the final stretch. Your feedback, encouragement, and belief in the project have helped shape twinBASIC into what it is today - and what it’s on course to become.

Thank you for being part of this journey.

Wayne Phillips
Founder, twinBASIC


Discord Chat Summary

* Auto-generated via Gemini-2.5-Pro

Overview

This week saw significant developments driven by strong community collaboration. An updated official roadmap was released, setting a new target for the v1 release and clarifying the feature set. [1] A major highlight was the community-led progress in integrating UWP XAML Islands, opening up new possibilities for modern user interfaces. [2] Meanwhile, waynephillipsea continued a rapid pace of bug fixing and IDE enhancements, and important discussions took place around language features, COM implementation, and backward compatibility.

Roadmap and v1 Progress

  • An official roadmap update was published by waynephillipsea, setting a new tentative release date for version 1.0 to December 19th, 2025. [1]
  • Wayne clarified that Edit & Continue is now planned for v1.1, while partial-recompilation support is already about 80% complete.
  • The LLVM backend implementation is scheduled for the final stages of the v1 development cycle.
  • Community members provided feedback on the timeline, with some suggesting that major features like LLVM could be deferred to a post-v1 release to ensure a timely and stable initial launch.

XAML Islands Integration

  • Community member deletedewd made a significant breakthrough by demonstrating a working UWP XAML Islands implementation, showcasing modern UI controls within a twinBASIC application. [2]
  • A key finding was that enabling XAML Islands in the IDE requires modifying the compiler's manifest to include <supportedOS> and <maxversiontested> tags, a step that currently needs an external tool like Resource Hacker.
  • waynephillipsea expressed interest in the potential for the twinBASIC form designer to generate XAML, especially after it was confirmed that absolute positioning is possible using a <Canvas> container.
  • To support this effort, deletedewd released a WinRT package and a comprehensive XAML Islands demo project, which includes examples of using generics and storyboard animations.

Bug Fixes & IDE Enhancements

  • A high volume of fixes was released through several beta versions (up to BETA 860), addressing community-reported issues.
  • Key fixes include improved support for the VBCCR OptionButtonW control (BETA 848), correct parsing of function declarations with inline type returns (BETA 850), and proper handling of [Restricted] methods in implemented interfaces (BETA 854).
  • An issue where the IDE would not correctly auto-correct keyword casing (e.g., #endif to #End If) in large projects was identified, with Wayne noting it will be resolved with the implementation of partial recompilation.
  • Users experiencing IDE performance issues on machines with less than 16GB of RAM or fewer than 4 CPU cores were advised that these problems are known and will be significantly improved by the upcoming partial-recompilation feature.

Language & COM Implementation

  • A detailed discussion around implementing IEnumVARIANT for custom iterable collections took place, with mansellan successfully creating a working iterator using fafalone's WinDevLib.
  • bclothier highlighted that Err.ReturnHResult is the correct mechanism for returning S_OK or S_FALSE from implemented interface methods that do not use [PreserveSig].
  • waynephillipsea addressed a backward-compatibility concern where a control's name could conflict with a new tB-only form property (e.g., MaxHeight), confirming the compiler will now issue a warning in such cases.
  • A preliminary discussion on adding lambda expressions to twinBASIC post-v1 was initiated, with community members weighing the benefits for features like LINQ against the potential complexity.

Conclusion

The week was defined by a powerful synergy between developer-led initiatives and community innovation. The updated roadmap provides a clear, albeit extended, path to the v1 release, managing expectations for major features. [1] The remarkable progress on XAML Islands integration by community members is a testament to the platform's extensibility and the collaborative spirit of its users. [2] With continuous bug fixes solidifying the foundation and forward-looking discussions on advanced language features, twinBASIC is steadily advancing toward its goal of becoming a mature, modern, and highly compatible successor to VB6.


Learn more:

  1. Official Roadmap Update - 8th July 2025 As we move closer to delivering the long-awaited v1 release of twinBASIC, we
  2. Thread: twinBASIC - WinRT XAML Islands Demo or How to spruce up your User Interface

Around the Web

WinRT XAML Islands Demo

Posted by VanGoghGaming in the show-and-tell channel:

This project demonstrates some of the WinRT and XAML Islands features and how to use them in tB/VB6. It also includes my WinRT Interfaces package that has been published to the twinBASIC server for everyone to use as they see fit (this package is far from complete and will include ongoing updates as more interfaces are added). The following features are showcased in this XAML Islands demo (besides cramming a bunch of XAML controls on a form :D):
  • LinearGradientBrush for colorful labels,
  • Opacity/Fade, Scale and Rotation animations (with Cubic EaseInOut functions),
  • Theme toggle (Light/Dark) with an interactive, animated Sun/Moon icon,
  • Attaching events to various controls,
  • Binding of some controls (ListView and ComboBox) to external sources (arrays of strings in this case) for dynamic content updates,
  • Attaching a Command object to a button instead of a Click event (for example in this case the Submit button will become available once you type a valid email address in the Email text box),
Download it from this vbForums thread.
twinBASIC - WinRT XAML Islands Demo or How to spruce up your User Interface-VBForums
This project demonstrates some of the WinRT and XAML Islands features and how to use them in tB/VB6. It also includes my WinRT Interfaces package that has been published to the twinBASIC server for everyone to use as they see fit (this package is far from complete and will include ongoing updates as more interfaces are added). The following features are showcased in this XAML Islands demo (besides cramming a bunch of XAML controls on a form :bigyello:): - LinearGradientBrush for colorful

{SIDEBAR}

What Are XAML Islands? A Quick Primer

For those seeing the term for the first time, XAML Islands are a powerful technology from Microsoft that allows developers to host modern Universal Windows Platform (UWP) controls inside traditional desktop applications.

Think of your standard twinBASIC or VB6 application window. Now, imagine you could place a self-contained "island" of brand-new UI—like a control with Fluent Design animations, touch support, or a modern look-and-feel—right in the middle of it. That's a XAML Island.

*Generated via Gemini-2.5-Pro


Run As Anyone (NtCreateToken)

Posted by fafalone in show-and-tell:

I'm going to make this into a more useful app where you can select users and groups, but if you've ever been curious about the NtCreateToken API that allows you to craft an arbitrary token belonging to any user or group(s), here's my initial demo of calling it in tB. AFAIK nobody has done this in either VBx or tB before.

Use link above to download a copy of the .twinproj file.

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 Gemini-2.5-Pro, sorted in order of its opinion of "most impactful changes."

Fixed critical memory fragmentation issue that prevented large VB6 projects from loading or compiling (regression from Beta 841)

Enhanced Windows compatibility by removing non-WindowsXP APIs and adding Win2k support for built executables

Improved IDE stability after sleep/wake cycles - projects no longer incorrectly enter safe mode when computer wakes from sleep

Fixed major form designer bugs including selection issues, undo/redo problems, and MDI modal dialog crashes during debugging

Enhanced UserControl support with OLE_OPTEXCLUSIVE implementation and property notification fixes, improving compatibility with VBCCR controls

Added new compilation features including CompilerVersion constant and conditional compilation constants for target OS detection

Fixed ActiveX control issues including ImageList problems in containers and better support for complex nested packages at runtime


WARNING: The following issues are present in each of the releases below:

  • IMPORTANT: This is an interim/experimental release. It includes significant changes, so some instability is to be expected.
  • KNOWN ISSUE: Controls are not being destroyed properly by the form designer, causing big memory leaks (broken in this build)

BETA 842

  • fixed: (regression in BETA 841) excessive memory fragmentation could cause large Win32 projects to fail to load or compile [Issue #2189]

BETA 843

  • fixed: SaveSetting / DeleteSetting standard library functions were using non-WindowsXP compatible APIs [ gaouser, discord ]

BETA 844

  • fixed: removed use of some Win2k incompatible APIs, to allow built executables to run on Win2k machines (must explicitly target OS in project settings)

BETA 845

  • improved: Label.VerticalAlignment property now appears next to Alignment property in the property sheet
  • added: Compilation.CompilerVersion constant, indicating the release number (e.g. currently 845) [ Don, discord ]

BETA 846

  • fixed: issue with PROJECT EXPLORER panel not showing all items after a project is closed and then another project opened
  • fixed: exposing an 'Angle' property on a UserControl would cause several issues in the tB form designer in using that UC [ fafalone, discord ]
  • fixed: computer waking from sleep should no longer trigger the project to enter SAFE MODE [Issue #1951]

BETA 847

  • fixed: (regression in BETA 846) form designer won't allow selection of individual controls [ fafalone, discord ]

BETA 848

  • added: initial UserControl support for OLE_OPTEXCLUSIVE, and IPropertyNotifySink::OnChanged notifications (makes VBCCR.OptionButtonW work)

BETA 849

  • fixed: calling Form.Show(vbModal) from an MDI form could cause the compiler to crash whilst debugging [Issue #2196]
  • fixed: edge case in codegen involving array accessors when using [ArrayBoundsCheck(false)] mode causing clobbering of EFLAGS [Issue #2193]
  • fixed: ellipses button in property sheet was shown incorrectly for objects such as StdFont [Issue #2187]
  • fixed: Strikethru property could not be set via the form designer for StdFont properties [Issue #2187]
  • fixed: issue with MSCOMCTL image lists placed in frames/picture boxes [Issue #2034]

BETA 850

  • fixed: property-let/set with Bang operator not always working with early-bound interfaces [ franic, discord ]
  • fixed: some builtin FileSystem functions would not accept paths prepended with \?\ [ fan2006, discord ]
  • fixed: entering malformed procedure header without parenthesis will now be auto-corrected as per VBx, e.g. Function Test As Long -> Function Test() As Long [ VanGoghGaming, discord ]
  • improved: implemented delay-retry logic for more reliable block auto-completion when compiler is delayed in providing live block info to the IDE

BETA 851

  • fixed: OptionButton Click event would fire on second reload of a form instance [Issue #2188]
  • fixed: when a Default button is defined on a form, Enter key was being ignored for other buttons that have focus [ XYplorer, discord ]
  • fixed: resolving of special Scale syntax could cause issues with IDE features such as hover-info and Goto Definition [Issue #2149]

BETA 852

  • fixed: IProvideClassInfo::GetClassInfo implementation for UserControl to prevent hard crash using SmartUI AX control [ RobWubs, dicsord ]

BETA 853

  • fixed: form designer paste into container now disabled when >1 selected controls [ GTAIV, discord ]
  • fixed: form designer undo/redo was causing all controls to be selected after the operation [ GTAIV, discord ]
  • fixed: VERSION info block 'FileVersion' string was padding the Revision part to 5 characters rather than 4 to match VBx [ XYplorer, discord ]

BETA 854

  • fixed: methods marked as [Restricted] are no longer required to be implemented, leaving a NULL entry in the vtable to match VBx behaviours [ VanGoghGaming, discord ]

BETA 855

  • fixed: internal redefinition of ITwinBasicDesignerExtensions::GetIViewObject in NativeCommonControls package was incorrect [Issue #2198]
  • added: built-in conditional compilation constants TWINBASIC_TARGETOS_MAJOR and TWINBASIC_TARGETOS_MINOR to represent the root project target OS setting

BETA 856

  • fixed: potential codegen crash when using non-simple For statements [ Excalibur, private ]
  • fixed: some edge cases with regards to whitespace handling in Input file statements [ Excalibur, private ]
  • fixed: Close #0 should be a no-op and not raise an error [ axisdj, discord ]
  • improved: the IDE will now report a critical error in the DEBUG CONSOLE if the per-process GDI handle limit has been reached

BETA 857

  • fixed: auto correction of "Function something as something" (and similar syntax) was not working if the letter casing of "As" is not as expected [ VanGoghGaming, discord ]
  • added: 1 language pack (Polish)
  • special thanks to our community members for the new/updated language packs (Michał)

BETA 858

  • fixed: controls named the same as a base form method or property no longer take precedence [ Excalibur, private ]
  • added: warning TB0028 "control is overshadowed by base form method or property of the same name"
  • fixed: using nested packages containing AX controls could fail at runtime in built executables with deserialization errors [ RobWubs, discord ]

BETA 859

  • fixed: syntax highlighting is corrupted when using Generics from another module, in some instances [ VanGoghGaming, discord ]
  • added: support for ActiveX control Verbs into the form designer control context menu (e.g. CodeJock control add entries here)

BETA 860

  • added: 'Large Address Aware' is now the default mode, to help in loading and dealing with larger projects [ jovick, discord ]
  • fixed: IDE restoration of open editors, etc., would fail when a project is opened and the LAA/DEP options don't match the currently loaded compiler [ fafalone, discord ]

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