Readit News logoReadit News
Posted by u/crediblejhj 12 days ago
Show HN: I built a small browser engine from scratch in C++github.com/beginner-jhj/m...
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!

GitHub: https://github.com/beginner-jhj/mini_browser

vintagedave · 12 days ago
> I had to implement recursion, which I wasn't familiar with.

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

Imustaskforhelp · 12 days ago
Indian high school senior here about to start CS in college here.

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.

crediblejhj · 11 days ago
Hi there! I'm so glad to meet someone my age working on a similar path.

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.

butz · 12 days ago
Good job! You should consider contributing to a similar small browser - Dillo @ https://dillo-browser.org/ , and help to build a complete tiny browser.
grougnax · 12 days ago
This might be the hardest thing ever in computer science, kudos!
solusipse · 12 days ago
lol

Deleted Comment

xacky · 12 days ago
I follow a lot of the alternate browser engines and am always looking for new ones outside of the big three. You should use your experience to get a career in the browser tech world as we are dangerously close to the Chromium only web.
skybrian · 12 days ago
I think this is cool as long as you don't use it to do your banking, and it needs to be running in a VM or on a Raspberry Pi or something. The Internet is dangerous. Something something don't write your own crypto.

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 :-)

_ache_ · 11 days ago
Impressive. Kudos.

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.

robshippr · 12 days ago
Incredible job here. Really took a lot of work to get this done. Keep it up.