5 ms·
Show HN: RetroTick – Run classic Windows EXEs in the browser
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 https://retrotick.com
GitHub: https://github.com/lqs/retrotick https://github.com/lqs/retrotick
- wertyu123 7mo agoNice
- chromehearts 7mo agoThis 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_ 7mo agoHa — even the README itself was written by AI, including that very sentence. Funny times indeed.
- pimlottc 7mo agoHow kind of them to let us humans participate!
- frostworx 7mo agoat least for now :}
- spwa4 7mo agoAs 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 7mo agoI for one welcome our new human overlords
- lioeters 7mo agoOfficer, yes, this clanker over here.
- deleted 7mo ago[deleted]
- b3lvedere 7mo agoAww. The FreeCell cheats don't work, except for -1 and -2 :)
- octoclaw 7mo ago[dead]
- LinusU 7mo agoThis is super cool! Checkout retrowin32 for something similar but written in Rust and not specifically targeting the web: https://github.com/evmar/retrowin32 https://github.com/evmar/retrowin32
- lqs_ 7mo agoThanks! 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.
- Dwedit 7mo agoNot enough Shell32 to run Winfile or Notepad. Also the command prompt won't list directories for some reason.
- lqs_ 7mo agoNotepad 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.
- jeroenhd 7mo agoSeems to run a lot faster than the previous proof-of-concept I've found (https://www.boxedwine.org/app https://www.boxedwine.org/app). Then again, that website runs an entire Linux VM to support Wine.
- lqs_ 7mo agoRetroTick'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.
- TechSquidTV 7mo agoPlease let me plan Sim Theme Park. I can't seem to run it on Crossover on my mac.
- lqs_ 7mo agoSim Theme Park is probably too modern and complex for the current state of RetroTick, unfortunately.
- Tepix 7mo agoTried it with REVERSI.EXE from Windows 3.0 from https://winworldpc.com/download/c2bbc28f-177a-c2b2-5311-c3a4c2ac5a54 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_ 7mo agoReally doesn't surprise me, to be honest: > We strongly recommend contributing with Claude Code or similar AI coding tools.
- ftchd 7mo agoso which one, the coding by hand part?
- deleted 7mo ago[deleted]
- deleted 7mo ago[deleted]
- lqs_ 7mo agoWin16 GDI support is still pretty incomplete. There's a lot of work left to do there.
- lqs_ 7mo agoIt is fixed and fully playable now! Board rendering, mouse input, and the About dialog all work.
- Tepix 7mo agoAh, cool. There are still some bugs: - when you finish the game, the final score appears, then disappears - when you set the skill to master and start a game, the game still hangs after your first move.
- haonnoah 7mo agoPretty 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_ 7mo agoThe 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.
- ale42 7mo agoFunny 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
- butokai 7mo agoJust a couple of hours ago I was thinking about this project from some time ago doing the same thing: https://github.com/evmar/retrowin32 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_ 7mo agoI 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.
- lqs_ 7mo agoHidden 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.
- stuaxo 7mo agoNot 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.
- alfiedotwtf 7mo agoWhoa, this is pretty sick!!
- em3rgent0rdr 7mo agoImpressive. Noting however that double-clicking is not working in Minesweeper. :)
- itintheory 7mo agoSeems like the .scr files trigger CrowdStrike Falcon. Not clear where the executables run here come from...
- cluckindan 7mo agoProbably because .scr is not meant to be run directly, but malware regularly does that.
- hard_times 7mo agoI 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.
- theragra 7mo agoIve found that app my student team created for load testing of hammer drills for local factory is still ticking! We created it around 2004, for Windows XP. Used Borland C++ and Windows driver for LPT port. Driver was written in asm, just for fun. Since then, factory changed hands two times, and relocated from EU to China. 20 years, and Windows app still is working. I think they ran it on even on windows 98 at first.
- tty456 7mo agoWinamp 2.x would be great to add if allowed!
- KellyCriterion 7mo agothey even have SSMAZE.SCR, that 2.5D rendering screensaver! :D
- cluckindan 7mo agoNow where’s that Screen Antics Johnny Castaway floppy disk…
- KellyCriterion 7mo agoThis one! :-)) https://simple.wikipedia.org/wiki/Johnny_Castaway https://simple.wikipedia.org/wiki/Johnny_Castaway
- maniazi83 7mo agoThis 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?
- lqs_ 7mo agoRight now, the file system and the registry are virtual. They are stored in the browser using IndexedDB. When a program reads or writes files or registry data, it goes to this virtual storage, not the real system. For performance, the CPU is fully emulated in plain TypeScript. It does not use WASM or JIT yet. It is still fast enough to run simple programs from about 30 years ago. In the future, JIT optimization may be added to improve speed.
- realityfactchex 7mo agoCool 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 7mo agoTo be fair windows didn't even have this if I recall you had to ship it with your executable
- realityfactchex 7mo agoThat is totally true
- pathartl 7mo agoI 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.
- ddgflorida 7mo agoNice. QBASIC FOR i = 1 to 5: PRINT i: NEXT hung up after 4. The shift key didn't work in the Qbasic Editor.
- lqs_ 7mo agoFixed. It now runs correctly and the Shift key works.
- smusamashah 7mo agoI 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.
- ThrowawayTestr 7mo agoCan it run doom?
- DustinBrett 7mo agoI 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.
- starshadowx2 7mo agoI 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 7mo agoCan you list them?
- starshadowx2 7mo agoBANGBANG BLOCKS Bowarrow BOXWORLD Bricks CHIPS CODEBRAK DOTS HANGMAN JACKS JEZZBALL JWLTHIEF KOLUMZ PEGGED PIPE rodent SLAM TETRIS HOVER LEMMINGS These two .exe versions I have didn't work, but the ones already in the demo seemed to work: SKI WINMINE
- goosethe 7mo agoa similar theme https://github.com/seanwevans/Oriel/ https://github.com/seanwevans/Oriel/