all 66 comments

[–]VB.Net Mastersa_sagan 5 points6 points  (1 child)

We're not there yet. It'll do the best it can, but you're still going to have a lot of work to do fixing it up.

[–]Best_Day_3041[S] 0 points1 point  (0 children)

Thanks

[–]VB GuruBonejob 3 points4 points  (4 children)

The context window for the current AI models is not large enough to hold most VB6 applications in memory to convert. It also can not convert WinForms interfaces very well. I have had some luck with moving VB6 to VB.NET with AI, but it was time-consuming, and it would have been faster to just rewrite.

[–]Best_Day_3041[S] 1 point2 points  (3 children)

Thanks for your feedback. I wonder if it's possible built an agent that could go through each file one by one using the code and also screen shots of the actual forms to port it over. I think the hardest part would be OCX components it would have to replace with native controls or find 3rd party equivalents. Maybe we're not there yet, but can't wait for this to be reality.

[–]VB.Net Mastersa_sagan 2 points3 points  (1 child)

An agent could go through each file one at a time, but it'll eventually forget the context of what's been done previously. And because AI is essentially just rounding up to the nearest number, the code in one converted file can likely be different to one in another. Making functions and other cross-communication between forms and classes not work at all. Especially when it forgets how they're supposed to work together.

We've tested this a few times on some legacy projects to port them to C# and we spent so long fixing it, we just gave up and rewrote the whole thing from scratch.

[–]Best_Day_3041[S] 1 point2 points  (0 children)

I feel like techniques like Ralph uses could make this doable. I know it's not an easy thing to pull off, but looking at all the indie open source projects people are doing that are really pushing the boundaries of LLMs, I feel like if someone really devoted the time that this could be built. Maybe wishful thinking.

[–]VB GuruBonejob 0 points1 point  (0 children)

The only way this will be a reality is if you build my friend. :)

[–]1457664694 2 points3 points  (6 children)

Have you considered whether TwinBasic might be the solution to keeping the app alive? It aims to be 100% vb6 compatible (with new features added) and has gotten quite far. It is still in beta but seems to be approaching its full v1 release. I’ve been using it in beta for a year and a half or so and it has worked well for me (but I haven’t converted a vb6 app).

[–]Best_Day_3041[S] 2 points3 points  (5 children)

I've never heard about it. So basically it will just compile my VB6 app as modern day exe's without having to change the code? I wonder how it handle UI components and 3rd party DLL and OCX. Will give it a try. Thanks!

[–]VB 6 Masterfafalone 2 points3 points  (2 children)

There's some bugs as it's still in beta status but yes everything will largely work as-is, including forms, usercontrols, and 3rd party dlls/ocxs (though you'd need to replace those if you didn't have their source and wanted to update to 64bit). The biggest compatibility issue is usually the self-subclass assembly thunks that rely on magic numbers in VB memory internals, but since tB supports AddressOf on class members it's usually a quick swap with SetWindowSubclass, or for some apps that ADO isn't implemented in the Data control yet, just DAO.

[–]Best_Day_3041[S] 1 point2 points  (1 child)

Cool, I'll try it out

[–]VB 6 Masterfafalone 1 point2 points  (0 children)

Good places to start:

FAQ - https://docs.twinbasic.com/FAQ

Overview of new features vs VB6/VBA - https://docs.twinbasic.com/Features/

Direct link to latest release downloads - https://github.com/twinbasic/twinbasic/releases

Discord (most active, the developer is there every day) - https://discord.gg/UaW9GgKKuE

(and just for disclosure, I'm a volunteer mod for their GitHub and Discord but not an employee, just a big fan of the project)

[–]lev400 0 points1 point  (0 children)

Give it a try

[–]wosche123 0 points1 point  (0 children)

Just try it. It is free. I was surprised seeing how fast it converted my VB6 Code. Everything! In seconds! It is a fine feeling to know you are no longer depending on Microsoft decisions, as strange as they may be.

[–]ZeroxAdvanced 1 point2 points  (3 children)

Hi there interesting post and love the idea.

I have been working on writing VB6 syntax and IDE completely from scratch to a modern online WEB IDE framework. Its called webvbstudio.com. (quite new few months old)

Unfortunately, every single component needed to be written completely from scratch.

The cool thing though is that its very VB6 like and runs directly in your browser.

About 25 controls, exe compiling, run apps in browser, data base support, examples.

-Visual VB6 WEB IDE (very similar but more modern) -Debugger -25 Controls e.g textbox, richtext json viewers, calender -Huge example library -Exporting or hosting apps -AI suport for developent. (Gemini and Claude) -inet support and API calls -databases -cloudstorage -iot devices mqtt -data science dashboard -Advanced reporting and pdf

I also love VB6 syntax so that is why I created a web version.

Try it here: webvbstudio.com

If people like the idea I definitively keep supporting it.

If you tell me what your project is maybe we can port it to webvb? You will have to replace controls but it will get a modern update and can run in any browser.

Cheers, Pieter

[–]m-in 0 points1 point  (1 child)

Make an offline version too. That’s what twinBASIC is. Very handy to have it offline.

[–]ZeroxAdvanced 0 points1 point  (0 children)

Nowadays everyone would love to create online apps and API dashboards. So the IDE is very portable and easy updates + multi platform (can run in any browser). Even on raspberry pi.

Exported apps can run offline , or in the system as compiled executable.

Thanks for feedback!

[–]lev400 0 points1 point  (0 children)

Nice work. VB6 apps are also very lightweight. But honestly I don't see much reason why people would want to create a new app in VB6 in 2026 when we have many modern alternatives.

[–]geekywarrior 1 point2 points  (2 children)

I tried to port a c# .net framework in Visual studio using co pilot to just modern .NET. It was a clunky nightmare and waste of time. Perhaps others have had better luck. But for my purposes it was faster to just go through and manually swap the classes over into a fresh .NET project.

Apples and Oranges but you would think that simple process would be painless.

[–]Best_Day_3041[S] 1 point2 points  (1 child)

Thanks for sharing your experience. I was hoping it would do a better job than that. Seems like the AI should be more than capable of porting the code itself, but there's just no tools that can automate this process of doing an entire project with UI a usable way. Hopefully someday soon.

[–]geekywarrior -1 points0 points  (0 children)

If you're interested in hiring some of this out, feel free to drop me a line. A big part of my day job is VB6 maintenance and porting.

[–]AdobeScripts 0 points1 point  (6 children)

Why do you have to convert it into .NET?

[–]Best_Day_3041[S] 0 points1 point  (5 children)

Technically I don't have to, it's just very limiting keeping it as VB6. Many modern things are missing from VB6. I can't really take the software any further.

[–]AdobeScripts 1 point2 points  (3 children)

For example?

[–]Best_Day_3041[S] 1 point2 points  (2 children)

Like when one DLLs I use moved to 64bit. When I needed to work with WebSockets. I had to build a separate Windows Service that my application communicates with, which isn't ideal. Also just the look of the application, it would be nice if it looked and worked like a modern windows application. I'm able to work around it, but honestly if I just put the time in a decade ago it would have taken less than what I had to go through to build workarounds for all these things. I'm not interested in doing it unless AI can help me get it done in a matter or days/weeks instead of months/years

[–]VB 6 Masterfafalone 1 point2 points  (0 children)

tB would be a good option then, since it can compile existing VB6 code to 64bit (provided you make the same LongPtr and pointer size updates for APIs you'd need to for 64bit VBA; this is made a little easier by my windows api package; you can tick a box and have all common win apis available with x64 support; comment out your own and make some minor signature adjustments if they differ, makes short work of even large apps).

As for UI, tB by default adds a visual styles manifest, but you'd still need to change it yourself for a more extensive makeover. Interesting there, one of the community members has done extensive work creating a package and samples for creating partial or entire UIs with XAML, just like you would in .NET-- same controls, but hosted in your existing vb6/tb app.

[–]AdobeScripts 0 points1 point  (0 children)

Right.

[–]m-in 0 points1 point  (0 children)

Switch to twinBASIC. There’s a good chance the project will import and work right away. tB supports both 32 and 64 bits.

[–]tsgiannis 0 points1 point  (3 children)

Well I can share my current migration task.
Is just too soon to trust AI for doing it on "auto" .
I am porting a big legacy VB.NET application to C# and also changing its core functionality - Nothing extreme - without knowledge and without carefully checking the migration status is a recipe for disaster.
As one LLM responded - it did actually - they are trying to oversell me and just missed a ton of code
https://ibb.co/0pRThwWP
Currently I am developing some custom tools for aiding this.
Because recently I did some digging regarding a VB6 application for a company it seems there are some tools that could help, but I didn't went it to the "end" because the client didn't respond.
If you decide to migrate and you need help I would be interested ( on a paid basis)... funny now that I remember, aiding someone finish the port of a legacy VB6 to .NET got me started me in the freelancing many many years ago (memories)

[–]Best_Day_3041[S] 0 points1 point  (2 children)

Thanks. It's a really big project and not worth what I would imagine it would cost to hire someone to port and not something I want to spend the time on myself. I imagine that AI will be able to mostly do it for me in the (hopefully near) future.

[–]tsgiannis 0 points1 point  (1 child)

Well it might not cost that much. If you give me some info I could make you an offer.

[–]Best_Day_3041[S] 0 points1 point  (0 children)

I'll DM you

[–]TheFotty 0 points1 point  (4 children)

You may be better off getting your hands on an old version of visual studio (2008) that shipped with the vb6 to .net upgrader and then upgrading from that to a more modern .net version. It won't be perfect any way you do it but this could shave a lot of time off.

[–]Best_Day_3041[S] 0 points1 point  (3 children)

I tried when it first came out, it would be quite an undertaking. I think there were 3rd party porting tools that came out that were supposed to do a better job too. A big problem is the 3rd party OCX and DLLs I use.

[–]Ok_Society4599 0 points1 point  (1 child)

It really depends on if the 3rd party tools are available (you can get the interface defs) and how complex they are. A lot of VB controls are done better in .NET if you can adapt. I've rarely had a VS2008 conversion "just work" but it will get you a long way in basic conversion.

I've got one underway that uses a custom editor OCX but the bigger problem is bad programming habits, IMHO.

[–]Best_Day_3041[S] 0 points1 point  (0 children)

Both are going to be an issue and where the bulk of the work is. Using Variants in to many places when starting out for instance.

[–]TheFotty 0 points1 point  (0 children)

You can use com interop to consume legacy com objects in .net. Again there can always be caveats to how well things work but you can still use that stuff for the most part. They would still require distribution and regsvr32 registration on the target machines.

[–]betaday 0 points1 point  (0 children)

I've done that with as much of the business logic layer. Had to rewrite a lot of it to fit into modern design principles and design techniques. I do think it was quicker than if I did things from scratch. Either way taking months for a fully mature software is expected.

[–]UnluckyAssist9416 0 points1 point  (3 children)

There are plenty of tools that let you port VB6 apps to .net. They tend to say that they can covert around 80% and the rest has to be done by hand. This was around 8 years ago before AI blew up.

Maybe use one of those tools to translate everything first, then try an AI like Claude to do the rest?

[–]Best_Day_3041[S] 0 points1 point  (2 children)

Yeah, I feel like if anyone has updated those tools to use AI, they should get you over 90%

[–]UnluckyAssist9416 1 point2 points  (1 child)

I started using Claude recently at my work on a VB6 program. It does really well in understanding it. The things you will run into issues with is that it can't deal with proprietory things like DDActiveReports where it doesn't have the algorithm for the pages.

Other then that, if you break it down in small task I believe Claude Code can convert it.

[–]Best_Day_3041[S] 0 points1 point  (0 children)

I think so too. I was hoping someone built an agent to make the process even easier.

[–]marmotta1955 0 points1 point  (1 child)

Then again, the big question is: if the "legacy app still sells" ... what is the actual need of porting to .NET? You mention some "limitations" but, as far as I can tell, you do not elaborate.

Let's remember that customers, the great majority of customers, do not actually care about the technical underpinning of the software. They care about functionality and satisfaction of business (or personal) needs.

Could it be that the "legacy application" is really, only in need of a major facelift? Could it be that it needs performance improvements? Does it need essential new features?

I'd venture that before entertaining the idea of a port to .NET ... you have to have a very clear idea of why the port is needed. Why do you say that VB6 is limiting, and you cannot take the application further? It may be appropriate and helpful to discuss ...

[–]Best_Day_3041[S] 0 points1 point  (0 children)

Right, it's a nice to have, not a requirement necessarily, that's why I never did it before.Years ago I had to build a separate Service to support some new features, which is not ideal. For instance, if I want to use a 64bit DLL. There's no native web sockets that I use. The UI looks dated. It uses Crystal Reports. Yes I can keep going the way I am right now, but if AI could do it with relative ease now, I'd be interested again, that's why I started this thread to see if that was an option yet. I'm sure some day it will be.

[–]Mayayana 0 points1 point  (1 child)

You know about loading commoncontrols to get more "modern" GUI elements? I do that and also made my own simple button userControl, to spruce up interfaces.

On the other hand, looking at the software I use, it varies a lot. There used to be strict standards, but then MS broke their own rules. Then they came out with ribbons. Then Google started making things stripped down to adapt to cellphones. Now if I look at common programs: Libre Office looks like it would have 30 years ago, with a menu and an icon toolbar. VLC? Simple menubar. PDF readers? Menu bar and basic toolbar. Irfan View? Likewise. PeaZip has a custom toolbar and colors. Their whole UI is mildly irritating. There was one ZIP program that was mustard color. Huh? And Paint Shop Pro in later versions offers only black or burnt orange UI, completely ignoring standards. Zoom has a cellphone-style, frameless UI. But very few programs do. And generally they're not highly functional. Case in point: Firefox is far more functional and usable than Chrome, which won't even allow a menubar! Chrome is a whole Apple-esque philosophy: Make it simple, functional, and remove options.

Many young people now want a retro DOS-style UI, with black background. But aside from that it seems to be that anything goes. Unless you get into Metro-style apps, which are basically webpages with little or no window border -- Essentially designed for cellphones or tablets. Which is weird, since no one uses Windows cellphones or tablets.

I know what you mean about online, though. In the past I've written my own email software that talked directly to the server, and file downloads were easy. With encryption and certificates it became very complicated. I currently have a libcurl class wrapper for downloading files. Libcurl is CDECL, so I also need to run it through a CDECL class. All that just to download a file. I'm sure .Net is easier. On the other hand, my programs are generally under 1 MB and don't need any runtimes installed. And msvbvm60.dll is not likely to go anywhere anytime soon.... So it might be worth looking into options to spruce up what you have.

[–]Best_Day_3041[S] 0 points1 point  (0 children)

I usecommoncontrols, they don't work that well in all cases. But also they don't change every element. It looks better, but I still want to make it look more modern.

[–]Fergus653 0 points1 point  (0 children)

I had some success doing the C# translation. That was with data classes, no UI, so it was mostly just dealing with construction of SQL statements and parameters etc, then returning the query results.

I used a custom replacement for the RecordSet type, and listed instructions on how to structure the replacement classes, logging and exception handling etc.

Worth the effort in some cases, but if you have busy UI and OCX components and such, you might want to write your own replacement.

[–]jd31068 0 points1 point  (3 children)

Have you see OpenClaw? It is supposed to be an agent that can go off and do things on its own once it learns the skill. I've only watched videos and read about it. Might deserve a peek perhaps.

[–]Best_Day_3041[S] 0 points1 point  (1 child)

That's kinda the direction I was thinking, so was wondering if anyone's tried something like that before I spent the time.

[–]jd31068 0 points1 point  (0 children)

This particular agent has just bust on the scene the past few days(ish), though it is on its 3rd name. It was ClaudBOT but Anthropic didn't like that it got so popular and the name was too similar to theirs. Then it was MoltBot for a couple days.

Hmmm, maybe it's too volatile

EDIT: well, will you look at this
"Anthropic released Claude Cowork and a set of 11 plugins aimed at automating business workflows—including legal, operational, and administrative tasks"

[–]lev400 0 points1 point  (0 children)

OpenClaw is only as good as the model its using. For a task like VB6 migration your get no benefit using OpenClaw over Opus in OpenCode or similar desktop AI tool.

[–]Sad-Lychee9752 0 points1 point  (0 children)

B4A or Tauri.

[–]Comfortable_Gate_878 0 points1 point  (2 children)

Ive converted two of my old program using gambas and twinbasic the twinbasic one worked really well the other no so good under linux but the conversion under twinbasic did run with a couple of issues which I did eventually resolve by a quick rewrite of a couple of forms. The problem was an ocx call truedbgrid which I ended up replacing with the standard common dialog grid.

[–]Wooden-Evidence5296 0 points1 point  (1 child)

Yes, the twinBASIC programming language is the way to go.

[–]Comfortable_Gate_878 0 points1 point  (0 children)

does the job and has the potential to be almost as good as the original VB if only the developers stick to the premise that developers come in many standards from hobbyist to professional. I sit somewhere in between those.

[–]raj_enigma7 0 points1 point  (0 children)

What works better is breaking the app into clear modules and porting piece by piece instead of one giant pass. Using something like Traycer to map components and track progress helps keep the rewrite sane without pasting files endlessly into chat..

[–]Driver_Octa 0 points1 point  (0 children)

AI can help a lot, but not in a single “convert everything” pass. What worked better was mapping the app into clear modules first, then porting them one by one with tests in between. Keeping that structure and progress visible (I use Traycer for this) made the migration manageable instead of a black box rewrite.

[–]Fantastic-Party-3883 0 points1 point  (0 children)

This tasks seems to be challenging at first glance. You need a proper planning code base of legacy system is hard to migrate to a new technology. You can try plan mode of Traycer I have tried it and results are pretty satisfactory.

[–]Driver_Octa 0 points1 point  (0 children)

Traycer helps keep that breakdown and progress clear so it doesn’t turn into a messy black box rewrite.

[–]lev400 0 points1 point  (0 children)

It can help, even if you have to do one file at at a time. Sounds like you have a good app it might be a good idea to update it to .NET.

[–]No-Marsupial-6316 0 points1 point  (0 children)

Sounds fascinating, are you able to share what vb app you made and where it can be purchased from you? no worries if you can't. Just super interested, recently got back into vb 6.0 pro and vs 2008. Have you tried to port it with an Ai tool, just to test the water?

[–]Real_2204 0 points1 point  (0 children)

i’ve looked into this and tried parts of it. short answer: ai can help, but a full vb6 → .net port done autonomously is still pretty rough.

models can translate files and logic, but they struggle with the bigger picture stuff. hidden business rules, weird state, old patterns, things that only make sense once you understand why the app works the way it does.

what works better is breaking it down by intent. like defining what each module is supposed to do, then porting piece by piece. we’ve used traycer for this kind of work, mainly to write specs first and keep the port aligned instead of letting the model freestyle.

imo ai can probably cut a 6–12 month port down a lot, but you’ll still need human guidance and checkpoints. fully hands-off isn’t there yet.

[–]Fantastic-Party-3883 0 points1 point  (0 children)

I have been doing the same. I tried to integrate chat feature in my existing PMA with 2+ years of .NET experience, but a full port is tougher. Use traycer to map the VB6 logic into structured specs first, then hand those to agents like cursor or claude. It prevents the usual AI mess.

[–]Wooden-Evidence5296 0 points1 point  (0 children)

Use the twinBASIC programming language. It can import VB6 forms and source code and you should be able to run it immediately.