twinBASIC Update: June 30, 2025
Highlights include a new "Linked Package" feature, improvements to global search, an "Open With" integration for .vbp files, and a ListView SubItem Controls sample project.

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:
- Custom twinBASIC IDE Installation Guide
- twinBASIC Discord Server (chat about the project)
- twinBASIC Wiki (list of new features not in VBx)
- GitHub Issue Tracker (report bugs)
- twinBASIC/VBx LinkedIn Group
Highlights
*Recaps this week generated by Gemini-Pro-2.5 via Poe.com
Package Management Overhauled with New Linking Feature
This week, twinBASIC introduced a significant enhancement to its package management system with the rollout of linked packages in BETA 816. This new feature directly addresses the issue of project file bloat by allowing developers to reference packages from a central folder rather than embedding them directly into each project.
Wayne explained the motivation and mechanics:
The next release of tB [BETA 816] will support referencing of packages from the %AppData%\twinBASIC\Packages\
folder. This will allow for much easier code sharing through the packaging system, since you can then update the package on your local machine, and then all projects that reference it will automatically see the changes.
How It Works:
When you select a package from the "Available Packages" list, it is initially embedded as usual. However, a new 'Embedded' checkbox is now available for that reference. By un-ticking this box, the package is saved to the shared %APPDATA%\twinBASIC\Packages
folder, and the project reference is updated to a [LINKED-PACKAGE]
. This simple action can dramatically reduce the size of the .twinproj
file.
Wayne further clarified how the feature works:
With regards the new linked-packages feature in tB BETA 816: When you first tick an available package in the IDE Available packages list, it will embed the package into the twinproj file as usual. If you'd rather use it as a linked-package (e.g. so that the package doesn't bloat your twinproj file), then untick the 'Embedded' option for that package. This will cause the package to be saved to your%APPDATA%\twinBASIC\Packages
folder on your machine, which is where the compiler will load the package from going forwards. From then on, you'll see the package in the references list of your project marked as[LINKED-PACKAGE]
rather than[EMBEDDED-PACKAGE]
. If the linked package isn't available on your machine, then it will trigger a 'MISSING' error on the reference (like ordinary missing type librares).
You can re-tick theEmbedded
option at any time, and the IDE will again import the twinpack into the project file.
If you've already got a local package downloaded, then when you enable the package you'll be asked whether you want to use the local package, or download fresh from TWINSERV.
You can put your own packages (or even just regular twinproj files which will be treated as packages) into the%APPDATA%\twinBASIC\Packages
folder, and they will appear in theAvailable Packages
list on your machine.
This feature is especially useful for projects that use fafalone's WinDevLib tB package. The WinDevLib package by itself occupies about 16 MB because it aims to be an exhaustive list of all possible API declares, though the final compiled twinBASIC executable or library only includes the needed parts. The benefits were immediately apparent to the community. User twixydon saw a project shrink from 38MB to 22MB:

Global Search Add-in Improvements
The built-in Global Search add-in received a series of significant upgrades this week, transforming it into a more powerful and efficient tool for navigating complex projects. These enhancements, rolled out across several beta releases, focus on streamlining the user workflow and adding critical new functionality.
The first wave of improvements in BETA 818 targeted usability. The add-in's search box now automatically receives focus when opened, and more importantly, clicking a search result now instantly navigates the code editor to that specific line. This simple change removes friction and makes exploring search results a much faster process.
Building on this, BETA 822 introduced a powerful new feature: an 'Exclude Comments' option. Developers can now filter out comments from their search queries, allowing them to focus exclusively on finding active code logic. This much-requested feature was enabled by a new add-in extensibility method, File.ReadText(Flags)
, demonstrating how core IDE improvements pave the way for more sophisticated tooling.
Together, these updates substantially elevate the Global Search add-in from a simple text-finding utility to an indispensable power tool for code discovery and maintenance in twinBASIC.
Streamlined VB6 Project Migration with 'Open With' Integration
This week, twinBASIC made it easier than ever to begin working with existing Visual Basic 6 projects. As of BETA 820, the IDE now integrates directly with the Windows Explorer "Open With" context menu for .vbp
files.
This quality-of-life improvement allows developers to launch a VB6 project import with a simple right-click, bypassing the need to open the IDE and navigate through file dialogs. The feature was quickly refined in BETA 821 to ensure that a newly imported project is correctly marked as unsaved, prompting the developer to save the migrated .twinproj
file. This small but thoughtful enhancement significantly smooths the initial migration workflow for developers bringing their legacy code into the modern twinBASIC environment.
Discord Chat Summary
*Auto-generated via Claude-Sonnet-4
Overview
This week showcased significant infrastructure improvements with the introduction of linked packages, allowing developers to share code more efficiently without bloating project files. The community engaged heavily with technical discussions around XAML Islands integration, performance optimizations, and practical deployment strategies. Several notable bug fixes and IDE enhancements demonstrated the project's continued momentum toward v1.0.
Package Management Revolution
- waynephillipsea introduced linked packages in BETA 816, allowing packages to be stored in
%AppData%\twinBASIC\Packages
and referenced rather than embedded, dramatically reducing project file sizes - fafalone reported WinDevLib projects dropping from 16MB to 109KB with the new linking system
- twixydon confirmed similar results with a 38MB to 22MB reduction
- Initial Win10 compatibility issues were quickly resolved in BETA 817, demonstrating rapid response to community feedback
Advanced UI Integration
- deletedewd demonstrated successful XAML Islands implementation, embedding modern XAML controls directly in twinBASIC forms without traditional COM wrappers
- The approach uses Microsoft's XamlBridge technology, enabling declarative UI design with event handling through VB code
- bclothier and mansellan discussed the potential for MVVM frameworks to enhance twinBASIC's appeal for modern application development
Performance & Language Features
- waynephillipsea confirmed that CType operations with disabled error checking produce zero function calls in assembly, matching C compiler optimization levels
- fafalone achieved a decade-long goal by implementing stable ListView subitem controls using undocumented Windows APIs
- Discussion of the famous Quake II inverse square root function highlighted twinBASIC's optimization capabilities
Development Tools & Deployment
- Community discussion revealed NSIS and InnoSetup as popular deployment solutions, with waynephillipsea exploring reg-free deployment through SxS manifests
- woeoio demonstrated automated NSIS packaging with custom interfaces, offering to create a twinBASIC add-in for streamlined deployment
- IDE improvements included better DPI handling and continued refinement of the development experience
Conclusion
The linked packages feature represents a major milestone for code sharing and project management, addressing long-standing concerns about file bloat while maintaining compatibility. The successful XAML Islands integration opens new possibilities for modern UI development, while ongoing performance optimizations demonstrate twinBASIC's commitment to efficiency. With command-line compilation planned for v1.0 and continued community contributions, the project maintains strong forward momentum toward its stable release.
Around the Web
ListView SubItem Controls
Posted by fafalone in show-and-tell:
This project has been my white whale. Back in 2015 I started a series of articles on undocumented ListView features available in Windows Vista+: Footer Items, Subsetted Groups, Groups in Virtual Mode, Column Backcolors, and Explorer-style selection. But the coolest undocumented feature of all was the automatic subitem controls shown in the picture above. I just could not get it. The work was based on a fully working project by Timo Kunze, but even though I had this C++ sample that worked, every effort to port it to VB6 failed. Weeks were spent on it. Then at least half a dozen major efforts over the following decade of a few days. Not willing to give it up, I tried again starting 2 days ago, only this time instead of trying to fix the giant mess of spaghetti code packed with debugging stuff and the remnants of numerous different approaches, I started over completely from scratch and tried to make the port as line-by-line identical as possible...
🥳🥳 IT WORKED 🥳🥳
I'll no doubt be digging into the old code to find out exactly what I could have possibly missed in all the other failed attempts, which only ever got as far as glitched rendering of one or two controls followed by a hard crash. But the bottom line is now every control is working perfectly! In both 32 and 64bit! In future versions I'll explore the control types not used in Timo's demo.

Version 1.1 has already been released with support for SubItems in Tiles view:

Changelog
Here are the updates from the past week. You can also find this information by visiting the GitHub twinBASIC Releases page.
AI-Generated Changelog Summary
* Auto-generated via Claude-3.7-Sonnet, sorted in order of its opinion of "most impactful changes."
• Enhanced Package Management: Added support for local linked packages with improved controls in the IDE Available Packages list, allowing developers to untick 'Embedded' for better local development workflows
• Improved Development Experience: Added option to toggle line numbers in the code editor through both IDE commands and UI menu options, giving developers more control over their workspace appearance similar to other modern IDEs
• Enhanced File Association: TwinBASIC is now registered as an 'Open With' option for VB6 project files (.vbp) in Windows Explorer, making it easier to migrate existing VB6 projects
• Better Text Handling and Search: Improved Global Search add-in with auto-focus and click-to-navigate functionality, plus enabled text selection and copying in Markdown preview mode for better documentation workflow
• VB6 Compatibility Fixes: Resolved multiple control behavior issues including mouse pointer updates between controls, form designer copy/paste stability, and proper handling of ActiveX controls with dispinterfaces
• Developer Tools Enhancements: Added new extensibility methods for add-in development and improved debugging experience with better array symbol display and error handling refinements
• UI Control Improvements: Fixed various issues with scroll bars, image controls, and form designer functionality to better match VB6 behavior and improve overall stability
WARNING: The following issues are present in BETA builds 623 - 715 (the latest build as of publication):
- IMPORTANT: This is an interim/experimental release. It includes significant changes, so some instability is to be expected. [Editor's Note: Rolling back to BETA 622 may be necessary if any of the KNOWN ISSUES below affect your project.]
- KNOWN ISSUE: Controls are not being destroyed properly by the form designer, causing big memory leaks (broken in this build)
- there are known memory leaks in these versions, so memory usage will be higher than at the Version 1.0 release
BETA 816
- added: support for local linked packages (TIP: untick 'Embedded' next to the package in the IDE Available Packages list)
BETA 817
- added: fix for local linked packages (TIP: untick 'Embedded' next to the package in the IDE Available Packages list)
BETA 818
- fixed: hovering over an array symbol during debugging could show results imperfectly due to a HTML encoding bug [ XYplorer, discord ]
- fixed: Send-To-Back/Bring-To-Front not working correctly for windowless controls inside the form designer [ GTAIV, discord ]
- fixed: (regression) For-Each on an AddIn tbIDE.Folder would crash
- improved: Global Search addin - now auto focuses the input box [ XYplorer, discord ]
- improved: Global Search addin - clicking a list entry will move the code editor to the first match
- fixed: wrapping in IDE quick info hover windows sometimes not set, causing truncation [ XYplorer, discord ]
- added: support for Integer-Arrays to String (and vice-versa) conversions [ fafalone, discord ]
BETA 819
- fixed: handling of type library defined constants, no longer wrapping them with an implicit Variant [ https://github.com/twinbasic/twinbasic/issues/2171 ]
BETA 820
- fixed: auto-correct editor bug sometimes causing invalid "Privae Sub" to be inserted when creating an event from the form designer
- improved: markdown preview mode in the editor now allows for selection of text [ https://github.com/twinbasic/twinbasic/issues/2168 ]
- updated: Sample 15 (GlobalSearchAddin) to match the latest version of GlobalSearchAddin that is included with the IDE
- fixed: after the recent package changes, the 'Available Packages' list might sometimes contain enabled type libraries (non packages)
- improved: 'Available Packages' search bar now also matches to the Library Symbol as well as the description
- fixed: form designer copy & paste could cause a crash, intermittently [ GTAIV, discord ]
- fixed: corrections to vbDefault MousePointer handling involving container windowless controls [ https://github.com/twinbasic/twinbasic/issues/2163]
- fixed: Screen.MousePointer now gets reset for each new debug session
- improved: twinBASIC now added as an 'Open With' option for VBP files from Windows Explorer [ https://github.com/twinbasic/twinbasic/issues/2157 ]
- added: IDE command 'tbEditor_ToggleShowLineNumbers', and a UI toggle option in the EDITOR panel ellipses context menu [ https://github.com/twinbasic/twinbasic/issues/2154 ]
- deprecated: theme CodeFoldingVisible property, in favour of new IDE command 'tbEditor_ToggleCodeFoldingVisibility' and a UI toggle option in the EDITOR panel ellipses context menu
- deprecated: theme CodeMinimapVisible property, in favour of new IDE command 'tbEditor_ToggleMiniMapVisibility' and a UI toggle option in the EDITOR panel ellipses context menu
BETA 821
- fixed: using 'Open With' Explorer option would not migrate the project to an unsaved state
BETA 822
- added: AddIn extensibility method File.ReadText(Flags) where Flags can be CommentsToWhitespace [ fafalone, discord ]
- updated: GlobalSearch Addin (addin and sample) to offer an 'Exclude Comments' option [ fafalone, discord ]
BETA 823
- fixed: support for CodeJock CommandBars, allowing detection of predefined menus on tB forms
BETA 824
- fixed: pressing IDE real OS titlebar Close button multiple times could cause issues [ fafalone, discord ]
- fixed: find/replace floating panel height could cause scrollbars to be visible depending on IDE font [ Krool, discord ]
- fixed: ForeColor control graphics property not correctly matching VB6 API behaviours [ https://github.com/twinbasic/twinbasic/issues/2164 ]
BETA 825
- fixed: using 'Break on all errors' project option would trigger on some handled errors in tB control implementations [ XYplorer, private ]
- fixed: various HScrollBar and VScrollBar fixes [ XYplorer, private ]
BETA 826
- fixed: some more HScrollBar and VScrollBar edge case fixes [ XYplorer, private ]
- fixed: using 'Break on all errors' project option would trigger on some handled errors in AX control wrapper implementations [ XYplorer, private ]
- fixed: WM_GETMINMAXINFO implementation not correct for forms without a titlebar, causing glitches with such maximized forms [ XYplorer, private ]
BETA 827
- fixed: changing LAA or DEP project settings would force full closure of the open project [ fafalone, discord ]
- fixed: using 'Break on all errors' project option would trigger on some handled errors in AX control wrapper implementations [ XYplorer, private ]
- fixed: Image control with Stretch=False did not auto-resize to the set picture dimensions at runtime [ Kimpos, discord ]
BETA 828
- fixed: issue with Dim something(A To Len(b))
- fixed: issue with AX controls that only use dispinterfaces(e.g.Mabry HiTime), calling methods on them before the form is loaded would not cause the form to load
- fixed: edge cases with some AX controls that use dispinterface events