twinBASIC Update: December 29, 2025

Highlights include early testing of TBComm (an official MSComm replacement) and a community effort to create polished, comprehensive tB documentation.

twinBASIC Update: December 29, 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

*Auto-summarized by Claude-Sonnet-4.5 from Discord chats

TBComm: Serial Communications Testing Underway

fafalone called for hardware testers to help validate TBComm, a native twinBASIC replacement for MSComm currently in pre-release development:

Does anybody use MSComm? Normally things can be tested entirely by the developer, but in this situation it's impractical to go buy a bunch of hardware, so reasonable local testing is just limited to a ReadFile/WriteFile com0com port loopback, but real hardware needs to be checked...

The control is written entirely in tB and leverages the language's multithreading capabilities to replicate MSComm's background event listening. TBComm addresses long-standing limitations by offering larger buffers using Long properties instead of MSComm's Integer-limited 32KB, supporting unlimited COM ports via the standard Win32 API, and accepting any baud rate that fits in a Long. The project also incorporates EvtChar functionality from commercial MSComm replacements. Multiple community members with decades of serial communications experience—including jimdrew with 25+ years using MSComm across industrial hardware and rdmare with production barcode reader systems—volunteered for pre-release testing, with waynephillipsea officially endorsing the call for testers before the planned public beta release.

For developers migrating VB6 control software or working with embedded systems, TBComm promises a drop-in replacement that eliminates licensing concerns while offering superior performance and flexibility.

Discord Chat Summary

* Auto-summarized via Claude-Sonnet-4.5

Overview

The week of December 20-29, 2025 saw significant momentum around serial communications development, with fafalone's TBComm control emerging as a major focus. The community rallied around testing this MSComm replacement, while waynephillipsea addressed several type system refinements and IDE stability issues. Discussion ranged from practical hardware testing coordination to deep technical explorations of UDT operators and WinRT integration.

Serial Communications Development

  • fafalone announced TBComm, a native twinBASIC replacement for MSComm written entirely in tB using multithreading support to replicate MSComm's background event listening
  • The control offers larger buffers (Long properties vs MSComm's Integer-limited 32KB) and additional features like EvtChar functionality from commercial replacements
  • Multiple community members with extensive serial hardware experience (jimdrew with 25+ years MSComm experience, dannyb1896 with 24-port setups, rdmare with barcode readers) volunteered for pre-release testing
  • waynephillipsea officially called for testers, with fafalone coordinating private testing before public beta release
  • TBComm supports unlimited COM ports via CreateFile("\\.\COMxx", ...) and any baud rate that fits in a Long, addressing common MSComm limitations

Type System & Language Features

  • waynephillipsea modified CType() behavior to not trigger Type_Assignment operators, resolving conflicts when converting pointers to UDTs in both 32-bit and 64-bit builds
  • Discussion revealed that types and aliases only export to TypeLib when referenced by function signatures; workaround involves using project-qualified references like myproject.LongPtr
  • Community member deletedewd discovered that [Restricted] interface methods can force TypeLib export of otherwise unreferenced types
  • LenB() discussion clarified its role as a consistent byte-count function versus Len()'s polymorphic behavior (characters for strings, bytes for numerics)

IDE Improvements & Bug Fixes

  • Find/Replace dialog enhancements enabled project-wide operations, though large-scale replacements (364+ in single file) triggered Access Violation crashes that waynephillipsea committed to investigating
  • Beta 944 resolved MDI Child window focus and menu bar persistence issues that had broken in versions after 922
  • waynephillipsea noted plans to optimize Replace All by deferring reinterpretation until all replacements complete
  • ActiveX DLL registration issues resolved by setting projects to register to HKLM and running twinBASIC IDE as administrator

Community Support & Integration

  • DeclareWide keyword discussion highlighted its role in automatic Unicode string handling without explicit StrPtr() calls at call sites
  • WinDevLib provides three API variants: explicit ANSI (A suffix with String), explicit Unicode (W suffix with LongPtr), and DeclareWide aliased versions (no suffix, String parameters)
  • Community troubleshooting helped resolve IDE startup failures related to extraction folder reuse and Mark of the Web security blocks
  • Holiday greetings exchanged across international community members

Conclusion

The TBComm development represents a significant milestone in twinBASIC's maturity as a VB6 replacement, particularly for industrial and embedded applications. The enthusiastic response from experienced MSComm users and the coordination of hardware testing demonstrates the project's growing real-world adoption. Concurrent refinements to the type system and IDE stability show waynephillipsea's responsiveness to edge cases discovered during active development. The community's collaborative troubleshooting culture continues strengthening as members share workarounds and testing resources.

Discord #docs Channel Summary

* Auto-summarized via Claude-Sonnet-4.5

Overview

The week of December 20-29, 2025 witnessed a major documentation renaissance led by okas_o, who successfully migrated and revitalized docs.twinbasic.com with modern tooling and infrastructure. The effort transformed scattered wiki content into a structured, maintainable documentation system using Jekyll, while establishing clear contribution pathways for community members. Discussion centered on balancing accessibility for casual contributors against the technical requirements of sustainable long-term documentation maintenance.

Documentation Infrastructure Overhaul

  • okas_o migrated all wiki content to docs.twinbasic.com using Jekyll static site generator with the Read The Docs theme, making the documentation self-contained and offline-capable
  • Implemented automated CI/CD pipeline with link checking, ensuring broken internal links are caught during builds
  • Established permalink structure independent of file layout, enabling stable references for IDE integration and tooling
  • Added favicon, navbar icons, and began developing custom Rouge syntax highlighter specifically for twinBASIC to improve code presentation
  • Created comprehensive developer documentation covering deployment processes, permalink conventions, and screenshot workflows

Contribution Workflows

  • Wiki remains publicly editable for low-barrier community contributions, with established GitHub accounts able to submit tips, tricks, and evolving content
  • Three-tier contribution model established: wiki edits (lowest barrier), GitHub fork with web-based editing (preferred for quick changes), and local git workflow (for comprehensive work)
  • okas_o committed to incorporating wiki contributions into official docs, serving as bridge between casual and structured contributions
  • Community discussion revealed tension between ease of contribution and long-term maintainability, with consensus favoring git+markdown approach over alternatives like LibreOffice

Content Development

  • Added comprehensive attributes reference page documenting VBx and twinBASIC-specific attributes collected from feature descriptions and samples
  • Began work on categorical reference for core statements, global properties, procedures, and functions written from scratch
  • Plans to incorporate VBA documentation (MIT/CC-BY 4.0 licensed) with proper attribution, focusing on reference-level content while adding twinBASIC-specific gotchas and clarifications
  • Mansellan noted Rubberduck's refined ANTLR grammar for VB is available under GPL 2 for potential reuse

Tooling and Technical Decisions

  • Jekyll chosen for static site generation, running on both Windows and Linux with dependencies managed via Gemfile
  • Migration from GitHub Pages legacy automation to GitHub Actions planned to enable additional plugins like jekyll-gfm-admonitions for GitHub-style admonition syntax
  • Local development workflow uses bundle exec jekyll serve for near-instant preview at 127.0.0.1:4000
  • Discussion of LaTeX support for mathematical content, with preference for static rendering over browser-based MathJax for performance
  • wqweto suggested VSCode with preview plugins as alternative editing approach; okas_o uses Typora for WYSIWYG markdown editing

Conclusion

The documentation infrastructure transformation represents a critical maturation milestone for twinBASIC, moving from ad-hoc wiki pages to a professionally maintained documentation system. okas_o's dedication to both technical infrastructure and content creation—including writing a custom syntax highlighter—demonstrates the level of commitment needed for sustainable open-source documentation. The three-tier contribution model thoughtfully balances accessibility for newcomers against the structural requirements of long-term maintenance, while the permalink system and CI automation lay groundwork for future IDE integration. The community's embrace of git+markdown over WYSIWYG alternatives reflects pragmatic recognition that documentation at scale requires version control and structured markup, even at the cost of steeper initial learning curves.

Around the Web

*Auto-summarized by Claude-Sonnet-4.5 from Discord chats

Documentation Renaissance

okas_o successfully migrated and modernized the twinBASIC documentation, transforming scattered wiki content into a professionally maintained system at docs.twinbasic.com.

The new infrastructure uses Jekyll static site generation with automated CI/CD pipelines that catch broken links during builds, ensuring documentation quality. okas_o established a three-tier contribution model: wiki edits for low-barrier community input, GitHub fork-based web editing for quick changes, and local git workflows for comprehensive work. Beyond infrastructure, okas_o began developing substantial content including a comprehensive attributes reference page and is writing a custom Rouge syntax highlighter specifically for twinBASIC. The permalink structure was designed to remain stable regardless of file reorganization, enabling future IDE integration for context-sensitive help.

Developers now have access to structured, searchable documentation with clear contribution pathways, marking twinBASIC's transition from startup project to mature development platform.

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

  • Fixed CType behavior with UDTs: CType(Of UDT)(X) now correctly treats X as a pointer when the UDT has a Type_Assignment procedure defined, maintaining traditional VB6 UDT behavior instead of incorrectly triggering the assignment operator.

  • Improved executable metadata handling: PE timestamps are now set correctly on built executables, and project icon form resources no longer incorrectly default to LANG_ARABIC.

  • Enhanced IDE/compiler license enforcement: Strengthened licensing mechanisms for better compliance management.

  • Fixed auto-prettify for Alias syntax: Case correction now works properly with Alias datatype declarations.


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 944

  • fixed: (regression) MDI form activation problem when closing a child form [ Snu, discord ]

BETA 945

  • improved: IDE/compiler licence enforcement
  • fixed: some IDE errors as reported via automatic error reports

BETA 946

  • improved: IDE/compiler licence enforcement

BETA 947

  • fixed: PE timestamp on built executables is now set correctly [ Don, discord ]
  • fixed: project icon form resource would have LANG_ARABIC set on it inappropriately [ Don, discord ]

BETA 948

  • fixed: CType(Of UDT)(X), where UDT has a Type_Assignment procedure defined, no longer triggers the Type_Assignment and instead treats X as a pointer like a traditional UDT [ VanGoghGaming, discord ]
  • fixed: auto-prettify (case correction) for Alias datatype syntax is now working [ VanGoghGaming, discord ]

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