Show HN: I built a small browser engine from scratch in C++
Posted by crediblejhj 9 hours ago
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!
Comments
Comment by _ache_ 1 hour ago
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.
Comment by vintagedave 4 hours ago
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.
Comment by noo_u 5 hours ago
Comment by zabzonk 5 hours ago
Comment by snerbles 3 hours ago
Like EtherNet/IP, where the IP somehow stands for "Industrial Protocol".
Comment by zabzonk 2 hours ago
My mistakes with the training course code would have been fixed if the company would have bought Excel licenses fof our customer workstations.
And I just remembered it was DDE (dynamic data exchange), not OLE. OLE was much better specced than DDE. Like I said, it was way back when. But the basic rule (don't test using both a home-grown client and server) still applies.
Comment by rustyhancock 5 hours ago
Comment by ge96 5 hours ago
Comment by aruametello 4 hours ago
this could go into a sagan's "If you wish to make an apple pie from scratch, you must first invent the universe."
Comment by Novosell 26 minutes ago
Comment by HPsquared 2 hours ago
Comment by grougnax 4 hours ago
Comment by solusipse 4 hours ago
Comment by butz 4 hours ago
Comment by robshippr 3 hours ago
Comment by xacky 5 hours ago
Comment by skybrian 4 hours ago
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 :-)
Comment by lasgawe 5 hours ago
Comment by userbinator 3 hours ago
(Speaking as someone who also started writing my own long ago, and it's far from complete.)
Comment by einpoklum 2 hours ago
Can you name/link to a few examples? I know about Ladybird:
https://github.com/LadybirdBrowser/ladybird/
but haven't noticed other initiatives.
> might be what ends up breaking their browser monopoly.
This post is a toy project, not a full-fledged browser engine, which is a large beast (even when you _don't_ do everything from scratch)
Comment by Imustaskforhelp 2 hours ago
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.
Comment by pipeline_peak 4 hours ago
People making all sorts of libraries for HTML/CSS parsers, render trees, layout models etc.
I don’t want to see a world where everything runs on top of Chromium and we all just unwittingly submit to it.
Comment by luskira 5 hours ago
Comment by lifetimerubyist 5 hours ago
Well done.
Comment by quentindanjou 4 hours ago
Comment by forgotpwd16 3 hours ago
Comment by FEELmyAGI 3 hours ago
Comment by forgotpwd16 1 hour ago
Comment by quentindanjou 3 hours ago
I might be wrong, things are always evolving and it is going to be more and more difficult to spot. But I was genuinely asking OP, and I don't have the intention of undermining their achievement! (it stays cool even with use of LLM)
Comment by olliem36 4 hours ago
Comment by samiv 5 hours ago
Comment by antirez 5 hours ago
Comment by Imustaskforhelp 2 hours ago
Also Antirez, I am in high school and I can literally write it in writing that there's literally no school with such homework assignments imo. I have written a comment about seeing the curriculum of one of my other friends and my anecdotal evidence talking to friends.
There's literally zero doubt in my mind that there's no such homework assignment.
Comment by dag11 4 hours ago
This is super impressive.
Comment by Imustaskforhelp 2 hours ago
I looked at his book and wanted to teach him python. You can say its senior high school and what I taught him was what keywords mean in python and operators mean in python etc.
A lot of it was just semantic. Could be the fact that it was first chapter and he came to me when his exam was just some few days later.
I swear but the hardest thing I observed in that book was probably some SQL from what I heard or maybe some minor Java or the fact that it had file access within python or atleast that's what I observed.
The OP's comments are clearly weird and feel like something which should be ignored.
This project is really really cool imo. (Heck I was trying out literally the same thing too but over golang out of curiosity but really didn't land anywhere and the fact that the creator of this was able to still is pretty impressive even if they used LLM or not!, on which I haven't felt any clarification but I just wanted to point how both are really really cool!)
Comment by ikamm 5 hours ago
Comment by lotusw0w 4 hours ago
Comment by eichin 2 hours ago
(If the "build a CPU" part doesn't impress, it was common to build an entire compiler toolchain to go with it; also it was long enough ago that a web browser really was a weekend project :-)