An experimental C++ browser,
engineered and honest.
Aetheris Browser is an experimental C++ browser project built on a Ladybird/SerenityOS-derived codebase. Its own core is a dependency-free rendering foundation — HTML and CSS parsing, style resolution, layout, paint and software rasterization — validated by a CTest regression suite.
Subsystems, not slogans
Every item below maps to code in the repository. The Aetheris-specific half lives in src/rendering/; the rest is upstream-derived Ladybird/SerenityOS infrastructure, kept with its original licences.
Dependency-free rendering core
The AetherisRendering static library is standalone C++20 with zero third-party dependencies, so it builds, tests and reasons independently of the upstream tree.
HTML & CSS pipeline
An HTML tokenizer and tree builder feeding a DOM/document, plus a CSS tokenizer and parser producing stylesheets — composed into a style-resolution and cascade pass.
Layout foundations
Block and inline layout with Flex and Grid foundations, positioning, sizing constraints, geometry, viewport handling and text layout.
Paint & software rasterization
A paint executor with clipping and visual state emits paint commands that are executed onto a software surface, covering backgrounds, images, fonts and paint ordering.
Tabs, sessions & chrome
BrowserSession covers navigation, history, scroll and hit-testing; BrowserChrome holds multi-tab address-bar state and back/forward capability.
Test-driven, honestly scoped
The Aetheris suite is 39 regression test executables wired into CTest. The project states plainly that it is not production-ready and avoids unsupported performance claims.
Minimal footprint by design
The core links nothing at runtime, and a size-first profile (-Os, dead-section elimination, LTO, stripped) keeps the shipped binary tiny — a stripped aetheris executable lands around 1 MB, with HTML/CSS layout, anti-aliased bitmap-font text, PNG/JPEG/GIF/SVG/WebP images, HTTPS/TLS, an HTTP client and a small JavaScript engine all linked in.
From source to smoke test
Aetheris uses CMake. The full tree pulls vcpkg dependencies; the Aetheris-specific targets build through a dependency-light standalone profile that skips the upstream tree.
Configure
Point CMake at the repository and a build directory. Reconfigure whenever CMake files or build-registered sources change.
Build
Compile in Debug for a development workflow. The Windows path uses MSVC or clang-cl; see the Windows build doc.
Test
Run the registered CTest suite. The Aetheris suite covers tokenizer, DOM, CSS, cascade, box model, layout, text, painting, resource, security and chrome behaviour.
Smoke-run
In the standalone profile, the aetheris executable initializes every subsystem, runs a bounded frame loop and exits zero. It can also fetch and render: aetheris --fetch <url> and aetheris --render <url>.
# configure, build, test cmake -S . -B build cmake --build build --config Debug ctest --test-dir build --output-on-failure # Aetheris suite only ctest --test-dir build -R Aetheris --output-on-failure
cmake -S . -B build-standalone -G Ninja -DCMAKE_BUILD_TYPE=Debug \ -DAETHERIS_STANDALONE_BUILD=ON \ -DAETHERIS_ENABLE_TESTING=ON -DBUILD_TESTING=ON cmake --build build-standalone --parallel ctest --test-dir build-standalone --output-on-failure --no-tests=error # headless smoke run (X11 optional) ./build-standalone/bin/aetheris --smoke-test
# presets (no vcpkg toolchain needed) cmake --preset Standalone # fast Debug build cmake --build --preset Standalone # size-first Release: -Os, gc-sections, LTO, stripped cmake --preset StandaloneSize cmake --build --preset StandaloneSize # -> ~0.35 MB stripped aetheris executable
A document, stage by stage
This is an interactive diagram of the shipped pipeline in src/rendering/ — not a screenshot. Select a stage to see what each subsystem is responsible for.
HTML → DOM
Raw HTML bytes are tokenized and assembled into a tree, producing a DOM document object.
html_tokenizer— bytes to tokenshtml_tree_builder— tokens to nodesdom/document—Document::parse_html
CSS → computed style
CSS text becomes a stylesheet; the StyleResolver matches selectors and applies the cascade to produce per-element computed styles.
css_tokenizer/css_parserstylesheetmodelStyleResolver— match & cascade
Layout
Computed styles plus the viewport produce a layout tree with resolved geometry, covering block and inline flow with Flex and Grid foundations.
layout— block / flex / gridgeometry,viewport,cliptext_layout&font
Paint
The layout tree is walked to emit ordered paint commands, with clipping and visual state applied.
paint_executor— command generationrender_tree,render_document- backgrounds, images, fonts, ordering
Software surface
Paint commands are executed onto a software rasterization surface — the final pixels, produced without a GPU dependency.
software_surface— rasterization targetcolor,image,image_output- round-trip: sessions & chrome on top
Clone it, build it, run the suite
No installer and no hosted download is promised by the project. Clone the repository and build from source — the Aetheris-specific targets need only a C++20 compiler.
git clone https://github.com/drsamonline/The_Browser.git cd The_Browser cmake -S . -B build && cmake --build build --config Debug ctest --test-dir build --output-on-failure
Straight answers
Is Aetheris a complete browser?
What is actually Aetheris-specific here?
AetherisRendering foundation in src/rendering/ and its regression suite in Tests/AetherisRendering/. The AK, Libraries, Services, UI, Meta and Base trees are upstream-derived from the Ladybird/SerenityOS ecosystem and retain their original notices.How do I build and test it?
cmake -S . -B build, build with cmake --build build --config Debug, and test with ctest --test-dir build --output-on-failure. The Aetheris-specific targets also build through the dependency-light Standalone preset (or -DAETHERIS_STANDALONE_BUILD=ON), and a size-first StandaloneSize preset builds them for minimum footprint.Does the prototype runtime build?
src/main.cpp, src/cache/, src/network/, src/ui/ and include/aetheris/ is built into the AetherisRuntime library and the aetheris executable. Its external dependencies (LZ4, X11) are optional and fall back to bundled shims, so it is compile-checked on every standalone build — though it is not production-complete.