Hi HN! Korean high school senior here, about to start CS in college.
I built a browser engine from scratch in C++ to understand how browsers work. First time using C++, 8 weeks of development, lots of debugging—but it works!
Features:
- HTML parsing with error correction
- CSS cascade and inheritance
- Block/inline layout engine
- Async image loading + caching
- Link navigation + history
Hardest parts:
- String parsing(html, css)
- Rendering
- Image Caching & Layout Reflowing
What I learned (beyond code):
- Systematic debugging is crucial
- Ship with known bugs rather than chase perfection
- The Power of "Why?"
~3,000 lines of C++17/Qt6. Would love feedback on code architecture and C++ best practices!
The amount of learning this person has done is incredible. Kudos.
I also appreciated seeing they used AI and tutorials yet fixed bugs themselves, as a way to demonstrate they understood I the code.
Deleted Comment
Your project feels phenomenal. Definitely starred.
I was actually trying to create a browser (in golang) myself as well (using LLM assistance) & I really couldn't do it after countless efforts.
https://github.com/SerJaimeLannister/golang-browser Much of it was just curiosity towards if LLM's could port the rust project by emsh https://emsh.cat/one-human-one-agent-one-browser/ into golang & this has led to some really insightful discussions between me and emsh on bluesky
This is actually really pretty cool as I was targeting a ~10k loc for golang from the ~20k loc of rust (given how golang has networking binaries and other stuff)
I guess this is really cool. I was always really averse to C++ preferring golang. I think I am ken-thompson pilled for the most part lol.
Anyways its really great to see people my age working in similar ideas. Somehow it gives us I guess a more sense of connection like I am not alone doing these things and I guess its pretty cool feeling seeing others do similar stuff and learning from them!
I have starred your repo and good luck for college too man! Hope to communicate with ya.
Edit: Another comment here as someone here mentioned that you used LLM, which LLM did you end up using and how'd you use it. For me personally, the most (success?) that I found which could generate a hackernews without any styles and anything was via their computer-use agent model (which I am thinking of downloading & working with kimi-cli to add more styling and other stuff as well in golang just out of curiosity)
I don't really mind if you used LLM, but I am curious as to how in this instance.
Your project sounds really fascinating as well. To be honest, I wasn't familiar with the concept of "porting" until I looked it up through Gemini just now—it's such an interesting approach! You mentioned that you couldn't quite get it to work despite countless efforts, but I believe that only proves how incredibly difficult and ambitious your attempt was.
During this project, I also faced constant failures and had to compromise on many things because of the sheer complexity. My engine doesn't support JS yet, and only handles a handful of CSS properties—and even those aren't perfect. But as people like us always do, we learn and grow through these failures. I truly hope you’ve gained a lot of growth and insight through your project as well.
About LLMs: I used Claude. The key was using it as a mentor, not a code generator:
-Asked WHY things work, not just HOW
-Got help understanding concepts
-Debugging assistance when stuck
But I designed the architecture and solved problems myself.
Thanks again for the star and your kind words! Let’s keep in touch and keep building.
Deleted Comment
Also, there's a big difference between running a handmade browser that I wrote and trusting one that some stranger wrote. I guess I'm going to have to try writing my own someday :-)
You realise that it's only a toy implementation aimed at learning and not a full implementation. The parsing of HTML alone is way more complex than your actual implementation not mentioning at lot of things like the rendering or network (outsourced to Qt).
Still a nice achievement that get you to understand why making a browser is a very complex task.