twinBASIC Update: April 15, 2026

It's been a quiet week in twinBASIC land during the run-up to my annual DevCon Vienna conference talk scheduled for this Friday. Hope to see you there!

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

Another Quiet Week

Wayne's had his head down (in terms of new releases) for an uncharacteristically long time. For goodness sake, it's been WEEKS since the last twinBASIC release [mild sarcasm]. Seriously, though, Wayne pumps out new releases so frequently that a few-week hiatus is enough that people take notice.

Discord Chat Summary

* Auto-generated via Claude-Sonnet-4.6

Overview

This week's general channel saw a mix of bug investigation, hands-on DLL integration work, and community project showcases. A notable technical thread explored calling the Steam API directly from twinBASIC, resolving a long-standing integration challenge without needing a C++ wrapper. Community engagement was moderate, with several helpful troubleshooting exchanges and a brief channel management moment around a competitor link.


Channel Policy & Community Notes

  • A community member posted a link to a competitor product (RadBasic), which waynephillipsea removed from the general channel, noting it could be perceived as promotion. He clarified that such posts are welcome in the #off-topic channel.
  • The member in question clarified they are a financial supporter holding a V1+2 license and were sharing competitive context rather than advertising. Wayne acknowledged and appreciated their support.
  • Community members speculated on Wayne's recent quietness, with one member recalling a mention of ADODB support being targeted within 4–6 weeks.

Bug Fixes & Troubleshooting

  • A user reported application icons failing to appear in build 979, even after following the documented steps. waynephillipsea confirmed the feature works correctly on multiple test machines and that no changes had been made to this area recently.
  • The root cause was identified as icon size: 256×256 icons are not yet fully supported in twinBASIC. Switching to a 32×32 icon resolved the issue immediately. Wayne noted that 255×255 would likely work as well, pointing to an off-by-one limitation.
  • A secondary factor was Explorer's icon cache; running ie4uinit -show or ie4uinit.exe -ClearIconCache from the command line can clear stale cached icons without a full reboot.
  • A brief server-side issue caused WinDevLib package downloads from within the twinBASIC IDE to fail with an undefined HTTPS error. fafalone confirmed the problem and pointed users to the GitHub repository as a fallback. waynephillipsea identified it as a TWINSERV issue and resolved it within about 12 hours.

Steam API Integration

  • A community member shared a minimal C++ wrapper DLL they had written to retrieve a Steam user ID, having struggled with calling the Steam API directly from twinBASIC over several months.
  • deletedewd demonstrated that the Steam flat API can be called directly from twinBASIC without a wrapper, using CDecl to match the cdecl calling convention specified in the Steam headers, and LongPtr for interface/pointer parameters:
Alias uint64_steamid As LongLong

Public Declare PtrSafe Function SteamAPI_InitFlat CDecl Lib "steam_api64.dll" (ByVal pOutErrMsg As LongPtr) As ESteamAPIInitResult
Public Declare PtrSafe Function SteamAPI_SteamUser_v023 CDecl Lib "steam_api64.dll" () As LongPtr
Public Declare PtrSafe Function SteamAPI_ISteamUser_GetSteamID CDecl Lib "steam_api64.dll" (ByVal pSelf As LongPtr) As uint64_steamid
Public Declare PtrSafe Sub SteamAPI_Shutdown CDecl Lib "steam_api64.dll" ()
  • Key translation notes for the flat API: all int32 types map to Long, all pointer and interface types map to LongPtr, and the Alias keyword can be used to create readable type aliases that mirror the original C header names.
  • The CDecl keyword is required because the Steam SDK specifies #define S_CALLTYPE __cdecl for all its exported functions. Omitting it may work in small projects but could cause subtle failures in larger ones.

Community Projects

  • yereverluvinunclebert showcased a WWII Panzer-themed animated CPU monitoring gauge application built in twinBASIC, featuring smooth needle animation via an ease-out function and layer-based rendering derived from Photoshop PSD files.
  • The project uses GetSystemTimes for overall CPU load, PDH performance counters for per-core usage, and LibreHardwareMonitor (or Open Hardware Monitor) via WMI or shared memory for temperature readings.
  • The author flagged that the VB-specific PDH APIs (PdhVbAddCounter / PdhVbGetDoubleCounterValue) are single-thread-only and will need to be replaced with their thread-safe variants once twinBASIC multithreading arrives. An existing Delphi implementation is planned as the basis for that replacement.
  • Work is 85% complete on replacing the Cairo/RichClient rendering layer with GDI+, with a custom PSD-to-surface converter planned to remove the RichClient dependency entirely.

Community News & Events

  • waynephillipsea announced the Access DevCon 2026 virtual conference (Thursday–Friday), noting that twinBASIC will be featured in a session by Mike Wolfe on Friday at 4:00 PM UTC. Registration was closing within a day of the announcement.
  • A community member mentioned a twinBASIC-based Steam game project currently in development, with a planned v1.0 launch on Steam — though the project has been on hold due to unrelated conference commitments.

Tips & Quick Solutions

  • For inserting Unicode superscript characters (such as exponent 4) into a ListBox or string, use ChrW$(8308). For example: "2" & ChrW$(8308) produces 2⁴.
  • The & suffix is shorthand for the Long type literal and is optional in twinBASIC, as is PtrSafe in modern declarations (thanks to infrastructure work by wqweto).

Conclusion

This week demonstrated twinBASIC's growing capability for real-world systems integration, with the Steam API thread being a highlight — showing that cdecl DLLs can be consumed directly and cleanly without intermediate wrappers. The application icon size limitation surfaced as a known constraint awaiting broader icon format support. Community engagement remained healthy, with several members sharing projects, practical tips, and working code. With ongoing speculation about upcoming ADODB support and multithreading on the horizon, the community is clearly looking forward to the next wave of language milestones.

Around the Web

twinBASIC Returns to DevCon Vienna this Week

Registration for Access DevCon Vienna 2026 is now closed, so if you're not already signed up, then you missed out for this year.

For those who are signed up, I will be speaking at noon Eastern time on Friday:

Hope to "see" some of you there!

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

  • Nothing new this week.

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