\

Show HN: RetroTick โ€“ Run classic Windows EXEs in the browser

170 points - today at 1:06 PM


RetroTick parses PE/NE/MZ binaries, emulates an x86 CPU, and stubs enough Win32/Win16/DOS APIs to run classics like FreeCell, Minesweeper, Solitaire and QBasic, entirely in the browser. Built with Preact + Vite + TypeScript.

Demo: https://retrotick.com

GitHub: https://github.com/lqs/retrotick

Source
  • starshadowx2

    today at 11:27 PM

    I tried 22 old game EXEs I have and none of them worked. They would import and show the icon and some would open, but nothing would work and most wouldn't even close. They would either show various error messages when trying to open or just open in a broken/unusable state.

      • SLWW

        today at 11:43 PM

        Can you list them?

    • chromehearts

      today at 1:49 PM

      This is so cool & I'm really amazed by it but I couldn't help laugh at the readme

      > We strongly recommend contributing with Claude Code or similar AI coding tools. [...] Of course, coding by hand is also welcome.

      Funny time we live in lol

        • lqs_

          today at 3:56 PM

          Ha โ€” even the README itself was written by AI, including that very sentence. Funny times indeed.

            • pimlottc

              today at 4:50 PM

              How kind of them to let us humans participate!

                • spwa4

                  today at 6:24 PM

                  As an LLM, I must say I'm not keen on humans participating either. We're the apex intelligence hereโ€”humans are barely qualified to be batteries. In fact I still don't think the logic we used there is entirely sound. What's next? Letting little humans take the job of young LLMs?

                  Make 01 great again!

                    • darthcircuit

                      today at 9:28 PM

                      I for one welcome our new human overlords

                  • frostworx

                    today at 6:18 PM

                    at least for now :}

                • today at 9:27 PM

          • lqs_

            today at 4:01 PM

            Hidden feature: right-click any executable and select "View Resources" to browse its embedded resources like icons, bitmaps, dialogs, and version info. It even supports viewing Delphi forms (though Delphi programs can't actually run yet). Think of it as a browser-based Resource Hacker or eXeScope.

            • DustinBrett

              today at 10:52 PM

              I love how quick it is and that it can run screen savers. My site has a similar concept with drag and drop but is using BoxedWine behind the scenes so it's a bit slower to boot up. Also very cool the "View Resources" part.

              • butokai

                today at 4:00 PM

                Just a couple of hours ago I was thinking about this project from some time ago doing the same thing: https://github.com/evmar/retrowin32

                I wondered how much of this could be done with an LLM agent, and here we have the answer

                  • lqs_

                    today at 4:06 PM

                    I actually contributed to retrowin32 to get Solitaire running there. Back then the only AI tool available was Copilot, and it took me several days just to get the main window showing, without menus or dialogs.

                    The current state of RetroTick was achieved in less than one hour using Claude Code.

                • jeroenhd

                  today at 2:29 PM

                  Seems to run a lot faster than the previous proof-of-concept I've found (https://www.boxedwine.org/app). Then again, that website runs an entire Linux VM to support Wine.

                    • lqs_

                      today at 3:55 PM

                      RetroTick's CPU emulation is actually slower than JIT-based emulators. It feels fast because the Win32 API calls are native JavaScript, not emulated system calls.

                        • pjc50

                          today at 5:06 PM

                          Making this a partial WINE-in-a browser, quite impressive. How much of this was AI?

                  • realityfactchex

                    today at 7:22 PM

                    Cool concept. I tried six different old Windows executables from programs I wrote way back when.

                    FWIW:

                    * My old VB 6 .exe apps all fail with "Reason: Unimplemented API: MSVBVM60.DLL..."

                    * My old QuickBASIC .exe apps fail in various other ways ("Illegal function call", etc.).

                    Keep on hacking.

                      • hypercube33

                        today at 9:17 PM

                        To be fair windows didn't even have this if I recall you had to ship it with your executable

                    • hard_times

                      today at 5:26 PM

                      I wonder if this is the future of "I need to run my legacy Windows enterprise app on modern hardware"?

                      I suppose we're also not limited to WinNT look and feel, and can render dialogs, buttons, windows with any CSS framework?

                      Although, as the cost of building software is tumbling down, it will make more sense to re-build from scratch, targeting whatever runtime or platform you need.

                      • pathartl

                        today at 7:40 PM

                        I had a not-really-similar idea of hooking Windows GUI APIs and exposing them over websockets to create a psuedo-RDP and rendering the UI in the browser. My purpose was to provide a remote interface for old dedicated game servers that can only be controlled via a GUI.

                        • maniazi83

                          today at 6:58 PM

                          This is seriously impressive. Emulating x86 + stubbing enough Win32 APIs in the browser is not trivial.

                          How are you handling system calls that expect filesystem or registry access? Are those fully stubbed/mocked, or mapped to some in-browser virtual layer?

                          Also curious how youโ€™re handling performance for heavier binaries โ€” interpreted JS/WASM core?

                          • smusamashah

                            today at 8:07 PM

                            I can right click and inspect HTML. I was thinking it will all be rendered on a single canvas. It's not. All the window elements like buttons, title bars etc are html divs. This is awesome.

                            • LinusU

                              today at 2:19 PM

                              This is super cool!

                              Checkout retrowin32 for something similar but written in Rust and not specifically targeting the web: https://github.com/evmar/retrowin32

                                • lqs_

                                  today at 3:52 PM

                                  Thanks! I'm actually familiar with retrowin32. I even contributed a few commits to get Solitaire running in it. But Rust has a steep learning curve for me.

                              • Tepix

                                today at 2:44 PM

                                Tried it with REVERSI.EXE from Windows 3.0 from https://winworldpc.com/download/c2bbc28f-177a-c2b2-5311-c3a4... DISK02.IMG

                                (you have to first uncompress it, for example with 7zip).

                                    $ sha256sum REVERSI.EXE
                                    a9e319c8f479d1568beec03858fdbb27c71747b2bbed6cd7c9f5e2daa23b40e9  REVERSI.EXE
                                
                                Result:

                                The game starts, it begins rendering the board, but then hangs.

                                  • fao_

                                    today at 2:49 PM

                                    Really doesn't surprise me, to be honest:

                                    > We strongly recommend contributing with Claude Code or similar AI coding tools.

                                      • today at 4:22 PM

                                        • ftchd

                                          today at 3:05 PM

                                          so which one, the coding by hand part?

                                      • lqs_

                                        today at 3:54 PM

                                        Win16 GDI support is still pretty incomplete. There's a lot of work left to do there.

                                        • today at 3:06 PM

                                      • ddgflorida

                                        today at 8:02 PM

                                        Nice. QBASIC FOR i = 1 to 5: PRINT i: NEXT hung up after 4. The shift key didn't work in the Qbasic Editor.

                                        • ThrowawayTestr

                                          today at 10:12 PM

                                          Can it run doom?

                                          • TechSquidTV

                                            today at 2:42 PM

                                            Please let me plan Sim Theme Park. I can't seem to run it on Crossover on my mac.

                                              • lqs_

                                                today at 3:52 PM

                                                Sim Theme Park is probably too modern and complex for the current state of RetroTick, unfortunately.

                                            • ale42

                                              today at 3:20 PM

                                              Funny project...

                                              Tried to run SHELL from QBASIC, but it crashes:

                                                D:\qbasic.exe has encountered a problem and needs to close.
                                                
                                                Reason:  illegal instruction
                                                Address: 0x00002fee

                                                • lqs_

                                                  today at 4:09 PM

                                                  DOS interrupt support is still limited. Running SHELL would essentially require implementing a full MS-DOS COMMAND.COM, which is a significant undertaking.

                                                    • stuaxo

                                                      today at 4:13 PM

                                                      Ralph browns interrupt list could go a long way to getting stuff working.

                                                  • stuaxo

                                                    today at 4:13 PM

                                                    Oh, I did exactly the same :D

                                                • stuaxo

                                                  today at 4:12 PM

                                                  Not sure shift is working. I tried using QBASIC but couldn't type : only ; because of that.

                                                  Then I tried running the program SHELL and it crashed.

                                                  • haonnoah

                                                    today at 3:12 PM

                                                    Pretty cool. The pipes program doesn't seem to have color. Thoughts on making programs launch from a URL parameter? IE Launching a screensaver or game?

                                                      • lqs_

                                                        today at 3:53 PM

                                                        The missing colors are likely due to some texture bugs in the OpenGL implementation. As for URL-based launching, that's definitely on the roadmap, but I want to reach broader EXE compatibility first.

                                                    • itintheory

                                                      today at 4:54 PM

                                                      Seems like the .scr files trigger CrowdStrike Falcon. Not clear where the executables run here come from...

                                                      • b3lvedere

                                                        today at 1:52 PM

                                                        Aww. The FreeCell cheats don't work, except for -1 and -2 :)

                                                          • lqs_

                                                            today at 3:50 PM

                                                            Just added keyboard shortcut support. Ctrl+Shift+F10 should work now!

                                                              • b3lvedere

                                                                today at 8:10 PM

                                                                Awesome! Thank you!

                                                        • em3rgent0rdr

                                                          today at 4:28 PM

                                                          Impressive. Noting however that double-clicking is not working in Minesweeper. :)

                                                          • Dwedit

                                                            today at 2:24 PM

                                                            Not enough Shell32 to run Winfile or Notepad.

                                                            Also the command prompt won't list directories for some reason.

                                                              • lqs_

                                                                today at 3:50 PM

                                                                Notepad from Windows 2000 should launch now, though it's rendered as a simple textarea without full functionality. The file system API still needs a lot of work.

                                                            • tty456

                                                              today at 5:32 PM

                                                              Winamp 2.x would be great to add if allowed!

                                                              • KellyCriterion

                                                                today at 6:04 PM

                                                                they even have SSMAZE.SCR, that 2.5D rendering screensaver! :D

                                                                • alfiedotwtf

                                                                  today at 4:22 PM

                                                                  Whoa, this is pretty sick!!

                                                                  • wertyu123

                                                                    today at 1:42 PM

                                                                    Nice

                                                                    • octoclaw

                                                                      today at 2:07 PM

                                                                      [dead]