No description
Find a file
2026-01-11 23:54:50 +01:00
.github/prompts Initial bowser project scaffold 2026-01-09 12:20:46 +01:00
assets Add DOM Visualization Feature with Integrated Browser Support 2026-01-10 00:19:21 +01:00
docs Add DOM Visualization Feature with Integrated Browser Support 2026-01-10 00:19:21 +01:00
src Implement render pipeline for layout and painting, enhancing document rendering and debug capabilities 2026-01-11 23:54:50 +01:00
tests Add comprehensive tests for layout and rendering components, enhancing coverage for layout lines, blocks, and document structures 2026-01-11 23:41:20 +01:00
.gitignore Enhance layout and rendering features with new document and block layout implementations 2026-01-11 23:34:27 +01:00
FEATURE_DOM_GRAPH.md Add DOM Visualization Feature with Integrated Browser Support 2026-01-10 00:19:21 +01:00
main.py Enable debug mode in Chrome when the --debug flag is set and add detailed rendering profiling 2026-01-11 23:17:23 +01:00
pyproject.toml Refactor browser chrome to use libadwaita for modern GNOME UI 2026-01-09 14:31:55 +01:00
QUICKSTART_DOM_GRAPH.md Add DOM Visualization Feature with Integrated Browser Support 2026-01-10 00:19:21 +01:00
README.md Add DOM Visualization Feature with Integrated Browser Support 2026-01-10 00:19:21 +01:00
test_dom.html Add DOM Visualization Feature with Integrated Browser Support 2026-01-10 00:19:21 +01:00
UPDATE_DOM_TAB.md Add DOM Visualization Feature with Integrated Browser Support 2026-01-10 00:19:21 +01:00
uv.lock Implement Jinja2 templates for startpage and error pages 2026-01-09 14:24:01 +01:00

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
  • Graphviz (optional, for DOM visualization): sudo apt install graphviz

Setup

uv sync
uv run bowser

Usage

Keyboard Shortcuts

  • Ctrl+Shift+D: Generate and visualize DOM tree graph of current page
    • Opens visualization in a new browser tab
    • Displays interactive SVG graph (if Graphviz installed)
    • Falls back to DOT format if Graphviz not available
    • Prints tree structure to console

Testing

Run the test suite:

# Install dev dependencies
uv sync --extra dev

# Run all tests
uv run pytest

# Run with verbose output
uv run pytest -v

# Run with coverage report
uv run pytest --cov=src --cov-report=html

# Run specific test file
uv run pytest tests/test_browser.py

Development

# Format code
uv run black src tests

# Lint code
uv run ruff check src tests

# Type check
uv run mypy src

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