Let's create a web browser!
This educational project hopes to grow over the next few decades, exploring/handling one slice of functionality at a time.
Topics we'll learn more about
- Security, Privacy, Sandboxing, VMs, Inter-process communication
- Accessibility, ARIA, WCAG
- Performance, Tracing, E2E testing, WARCs
- Creating a terminal-based UI, The
Box DrawingUnicode block - Creating a not-terminal-based UI
- Chrome Devtools Protocol
- DNS, TCP, TLS, HTTP 1.1
- HTML, Markdown, CSS, WASM, and maybe JavaScript
- Canvas2D API, skia-wasm
- Web Speech API, whisper.cpp
- Web MIDI API, MIDI
Non-standard things to eventually add or explore
- 🔒 Optional mode where networking is off by default for cross-origin and after-the-initial-pageload traffic
- 🔒 Optional mode where JavaScript and WASM are only enabled for FLOSS polyfills of HTML-based general functionality (i.e. polyfills that support custom HTML elements/attributes that provide general functionality that you would otherwise have had to resort to JavaScript for)
- 🔒 Lower-latency APIs for spyware-blockers like uBlock Origin
- 🎨 Canvas2D: WASM integration, additional rendering modes (including float-based HDR)
- 🎹 Web MIDI: virtual ports, defining reactions/sequences that emit MIDI messages to those virtual ports in immediate reponse to messages from a real keyboard, some basic MIDI-to-audio synth, proposing instrument/sequence configurations for external synth devices/apps (e.g. Zynthian or MainStage)
- #️⃣ Support for various content-based fragment identifiers, going beyond URL Fragment Text Directives
- 📋 Support for screenshotting / scrapbooking / highlighting / fragment-bookmarking, e.g. with PNG files that contain pixels plus custom PNG chunks with whatever subset you want of additional context
Platforms
- Cross-platform command-line interface, via Node.js + WASM
- Visual UI on GNU/Linux/BSD/Serenity
- Visual UI on macOS (ft. Core MIDI and WKWebView, but otherwise avoiding non-open SDKs as much as possible)
- Maybe support a subset of functionality on {RP2040, ESP32-C6}-level platforms
Out of scope
- Implementing DNS/TCP/TLS/HTTP
- Implementing a CSS/DOM visual rendering engine
- Implementing a JavaScript engine
- Implementing a WASM engine
- Implementing a full-scope Canvas2D engine
Related projects
- Create registries for the "FLOSS polyfills of HTML-based general functionality" mentioned above