twinBASIC Update: April 28, 2026

Highlights include a question that surfaced twinBASIC's improved support for Unicode over VBx and a metaphorical project update from Brian Fantana of "Anchorman."

twinBASIC Update: April 28, 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

Panda Watch

Another week with no official updates or beta releases.

I'm not saying I'm starting to feel like Brian Fantana in Anchorman. But I'm also not not saying that...

To be clear, I have never (and would never) refer to Wayne as a "panda jerk."

Discord Chat Summary

*Auto-generated via Claude-Sonnet-4.6

Overview

This week's general channel combined practical bug reports and coding challenges with broader discussions about the twinBASIC roadmap and AI development tools. Form designer quirks, UDT comparison semantics, and command-line argument parsing each produced useful technical exchanges. Community engagement was lively, with a recurring undercurrent of good-natured humor about the VB6 "workaround legacy."


Bug Reports & Language Clarifications

  • twixydon reported two form designer issues: checkbox controls move in the wrong direction when repositioned via arrow keys (particularly when nested inside a PictureBox), and the Align to Grid feature produces non-integer coordinates (e.g., 288.88986 instead of the expected 290 on a 10×10 grid). waynephillipsea acknowledged neither had been formally reported and flagged them for investigation.
  • waynephillipsea clarified that comparing two UDT instances with the = operator requires a dedicated Type_Compare procedure. The existing Type_Conversion mechanism handles type coercion only and is not invoked during equality checks.

LLVM & Performance

  • fafalone reported no new developments in LLVM support since the initial alpha testing phase, noting the feature sees limited use given its current constraints. He emphasized its importance for v1 from a marketing perspective: without full LLVM optimization, natively compiled VB6 can outperform twinBASIC in certain benchmarks.
  • fafalone noted that Collection performance is already significantly faster in twinBASIC than in VB6, even absent full LLVM support, calling the practical difference in most real-world scenarios negligible.

Cross-Platform & 2D Graphics

  • Community discussion touched on cross-platform 2D graphics options ahead of a future Linux/Mac release, with Cairo and SFML both mentioned as candidates. yereverluvinunclebert is actively exploring Cairo via a 32-bit C wrapper, currently falling back to GDI+ while that work continues.
  • A complication noted in the Cairo discussion: Olaf's RichClient implementation wraps Cairo in a proprietary abstraction layer that diverges from the official Cairo API, making it difficult to port or build upon.
  • The updated roadmap revealed that cross-platform support has slipped to 2027, effectively putting cross-platform graphics library work on hold for now.

Command-Line Argument Parsing

  • alaskandruid encountered an issue with spaces in command-line paths passed to a twinBASIC console application. deletedewd provided a solution using the CommandLineToArgvW Shell32 API, which correctly handles quoted arguments that contain spaces.
  • fafalone suggested using LenB(Of LongPtr) as the twinBASIC-idiomatic way to determine pointer size within the solution, noting the compiler should reduce it to a constant. fafalone also indicated the value would be added to WinDevLib (WDL) for convenience.

AI Tools & Community Discussion

  • mansellan sparked a discussion about the sustainability of current AI pricing models, predicting that flat-rate subscriptions for frontier models are unlikely to last and per-token billing is on the horizon.
  • ubehage reported difficulty using Claude to generate a working wrapper for GetLogicalProcessorInformationEx, with deletedewd noting that AI models lack sufficient training data for complex union-based Windows API structs. mansellan suggested supplying broader project context improves results.

Community Culture

  • The week's most-celebrated remark came from twixydon: "I rode the dead VB6 horse for 25 years. Workaround is my DNA." — a sentiment that resonated strongly with the community and neatly captured the VB6-to-twinBASIC migration experience.
  • A running thread on bug reporting vs. workarounds produced several community quips, including deletedewd's Err.Raise pun and yereverluvinunclebert's On Error GoTo GitHub.

Conclusion

This week reflected twinBASIC's dual nature as both a maturing language platform and a community rooted in decades of VB6 pragmatism. Key technical exchanges — from form designer edge cases to API-level argument parsing — demonstrated the depth of community knowledge available to newcomers. fafalone's candid remarks about LLVM's role in v1's competitive positioning highlight one of the more significant items still on the pre-release checklist, while the roadmap slip for cross-platform support serves as a reminder that the project's most ambitious goals remain a longer-term horizon.

Around the Web

Unicode Support in UDT I/O

The following question was posted in the Discord questions channel:

Is it true that UDT I/O (Binary Access Read/Write) still does not support Unicode in String members? Characters > #255 seem to be converted to "?" like in the old VB6 days.

Wayne responded with the following:

You can specify the encoding as UTF 8:
Type Something
        A As String
    End Type
    
    Private Sub Form_Load()
        Dim X As Something

        X.A = "Blah" & ChrW(23456)
        Open "Z:\tbFileIoCheck1.bin" For Binary Access Write As #1
        Put #1,, X
        Close #1
        
        Open "Z:\tbFileIoCheck1.bin" For Binary Access Read As #1
        Get #1,, X
        Close #1
        
        MsgBox X.A
        
        X.A = "Blah" & ChrW(23456)
        Open "Z:\tbFileIoCheck1.bin" For Binary Access Write Encoding utf_8 As #1
        Put #1,, X
        Close #1
        
        Open "Z:\tbFileIoCheck1.bin" For Binary Access Read Encoding utf_8 As #1
        Get #1,, X
        Close #1
        
        MsgBox X.A
    End Sub
For backwards compatibility reasons, the default is ANSI.

This is a good reminder of both (a) twinBASIC's comprehensive Unicode support and (b) the challenge of finding answers to questions like this for an emerging language.

Regarding (b), I was pleasantly surprised to learn this feature is fully documented on the docs.twinbasic.com site.

File I/O
General user documentation for twinBASIC

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.
  • No new releases this week.

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