mirror of
https://github.com/Hopiu/bowser.git
synced 2026-03-16 19:10:24 +00:00
No description
- Added README.md with project description, building instructions, and development milestones. - Created the project structure with directories for source code, assets, and tests. - Implemented a basic entry point in main.py with argument parsing and logging configuration. - Developed preliminary browser orchestration in browser.py, including tab management and navigation. - Established a GTK-based UI framework in chrome.py, integrating key UI components including the address bar and navigation buttons. - Incorporated HTTP request handling in http.py, with enhanced logging of requests and responses. - Added initial assets: logo and images for browser UI. - Configured dependencies in pyproject.toml for development and runtime environments. - Initialized version control with uv.lock for dependency management. |
||
|---|---|---|
| .github/prompts | ||
| assets | ||
| src | ||
| tests | ||
| main.py | ||
| pyproject.toml | ||
| README.md | ||
| uv.lock | ||
Bowser — Educational Web Browser
A custom web browser built from scratch following the browser.engineering curriculum.
Status: Early scaffolding phase (M0)
Building
Prerequisites
- Python 3.11+
- GTK 4 development libraries (Debian:
libgtk-4-dev libgtk-4-1) - Skia-Python (
skia-python):pip install skia-python - PyGObject (
PyGObject):pip install PyGObject
Setup
uv sync
uv run bowser
Project Structure
bowser/
├── src/
│ ├── network/ # URL parsing, HTTP, cookies
│ ├── parser/ # HTML & CSS parsers
│ ├── layout/ # Block/inline/embedded layout
│ ├── render/ # Paint commands, fonts, compositing
│ ├── script/ # JavaScript integration
│ ├── browser/ # Tab/frame/chrome orchestration
│ └── accessibility/ # A11y tree and screen reader
├── assets/ # Stylesheets, images
├── tests/ # Unit tests
├── pyproject.toml # Dependencies & build config
└── main.py # Entry point
Development Milestones
- M0: Project scaffold ✅
- M1: Display "Hello World" in GTK window with manual URL fetch & paint
- M2: Render plain HTML with text wrapping
- M3: Parse and apply basic CSS
- M4: Clickable links and navigation
- M5: Form input and submission
- M6: JavaScript execution (embed QuickJS)
- M7: Event handling
- M8: Images and iframes
- M9: Animations and visual effects
- M10: Accessibility and keyboard navigation
References
- Web Browser Engineering — O'Reilly book
- Let's Build a Browser Engine — Matt Brubeck's Rust tutorial