{"id":51667844,"url":"https://github.com/hackclubium/vertex","last_synced_at":"2026-07-14T22:00:35.562Z","repository":{"id":368915133,"uuid":"1287482712","full_name":"hackclubium/Vertex","owner":"hackclubium","description":"Fully from-scratch web browser in C++","archived":false,"fork":false,"pushed_at":"2026-07-14T21:24:37.000Z","size":2469,"stargazers_count":15,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-14T22:00:21.105Z","etag":null,"topics":["cpp","linux","macos","web-browser","web-browsing","windows"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hackclubium.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-07-02T18:19:28.000Z","updated_at":"2026-07-14T21:24:27.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/hackclubium/Vertex","commit_stats":null,"previous_names":["hackclubium/vertex"],"tags_count":135,"template":false,"template_full_name":null,"purl":"pkg:github/hackclubium/Vertex","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackclubium%2FVertex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackclubium%2FVertex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackclubium%2FVertex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackclubium%2FVertex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hackclubium","download_url":"https://codeload.github.com/hackclubium/Vertex/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackclubium%2FVertex/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35480624,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-14T02:00:06.603Z","response_time":114,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","linux","macos","web-browser","web-browsing","windows"],"created_at":"2026-07-14T22:00:18.633Z","updated_at":"2026-07-14T22:00:35.547Z","avatar_url":"https://github.com/hackclubium.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Vertex\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"src/screenshot.png\" alt=\"Vertex browser screenshot\" width=\"860\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/hackclubium/Vertex/releases\"\u003e\u003cimg alt=\"Release\" src=\"https://img.shields.io/github/v/release/hackclubium/Vertex?style=for-the-badge\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/hackclubium/Vertex/actions/workflows/release.yml\"\u003e\u003cimg alt=\"Build\" src=\"https://img.shields.io/github/actions/workflow/status/hackclubium/Vertex/release.yml?style=for-the-badge\"\u003e\u003c/a\u003e\n  \u003cimg alt=\"C++17\" src=\"https://img.shields.io/badge/C%2B%2B-17-1f6feb?style=for-the-badge\u0026logo=cplusplus\u0026logoColor=white\"\u003e\n  \u003cimg alt=\"Engine\" src=\"https://img.shields.io/badge/engine-from%20scratch-111827?style=for-the-badge\"\u003e\n\u003c/p\u003e\n\nVertex is a browser engine written from scratch in C++.\n\nNot Chromium. Not WebView. Not CEF. Not QtWebEngine. It has its own HTML parser, CSS engine, JS runtime, layout engine, renderer, networking, native shells, and a pile of weird browser stuff that probably should have scared us off by now.\n\nIt loads real sites. It also breaks on real sites. Both are kind of the point.\n\n## What Works\n\n| Area | Status |\n|---|---|\n| Platforms | Windows, macOS, Linux |\n| Pages | HTTP, HTTPS, images, CSS, JS, SVG, canvas, internal `vertex://` pages |\n| Onion sites | `.onion` through embedded Arti in release builds, or local Tor SOCKS fallback |\n| UI | Tabs, address bar, history, bookmarks, downloads, reload, zoom, find, context menus |\n| Search | DuckDuckGo from the address bar |\n| Updates | Checks GitHub releases, downloads update, `F12` installs it |\n| Profile | History, bookmarks, downloads, cookies, local storage, session restore |\n| Tests | HTML, CSS, layout, paint, JS, network, codec tests |\n\nSome stuff is real. Some stuff is a stub with enough shape to unblock websites. Some stuff is cursed but useful. Welcome to browsers.\n\n## Fun Internal Pages\n\nThese work from the address bar:\n\n```text\nvertex://home\nvertex://history\nvertex://bookmarks\nvertex://downloads\nvertex://settings\nvertex://site-data\nvertex://platform-features\n```\n\n`vertex://platform-features` is the messy debug page for platform APIs: fullscreen, pointer lock, PiP, file picker, clipboard, notifications, gamepads, permissions, sensors, wake lock, and other browser-shaped things.\n\n## Onion Support\n\nRelease builds try to ship the Arti bridge next to Vertex:\n\n```text\nvertex_arti.dll\nlibvertex_arti.dylib\nlibvertex_arti.so\n```\n\nIf that file is there, Vertex can use Arti directly for `.onion` URLs. No separate `tor` terminal needed.\n\nIf it is not there, Vertex falls back to SOCKS5:\n\n```text\n127.0.0.1:9050\n```\n\nOverride it if needed:\n\n```sh\nVERTEX_TOR_SOCKS=127.0.0.1:9050 ./build/Vertex\n```\n\nWindows PowerShell:\n\n```powershell\n$env:VERTEX_TOR_SOCKS=\"127.0.0.1:9050\"\n.\\build\\Release\\Vertex.exe\n```\n\nCustom Arti bridge path:\n\n```sh\nVERTEX_ARTI_LIB=/path/to/libvertex_arti.so ./build/Vertex\n```\n\nImportant bit: Vertex does not try to reimplement Tor crypto in C++. That would be a fun way to accidentally build a privacy hazard. It uses Arti for Tor, while Vertex still owns the browser/network integration around it.\n\n## Download\n\nGrab releases here:\n\n```text\nhttps://github.com/hackclubium/Vertex/releases\n```\n\nRelease assets usually include:\n\n| Platform | Main download |\n|---|---|\n| Windows | `Vertex-windows-installer.exe` |\n| macOS | `Vertex-macos-installer.dmg` |\n| Linux | `Vertex-linux-installer.tar.gz` |\n\nPortable bundles are there too. The auto-updater still uses the single-binary portable assets, and separately updates the Arti bridge when the release has one.\n\n## Building\n\nYou need CMake and a C++17 compiler.\n\nRust is optional for local builds. If you do not build the Arti bridge, `.onion` still works through `VERTEX_TOR_SOCKS`.\n\n### Windows\n\nVisual Studio Build Tools, x64 C++ toolchain:\n\n```bat\ncmake -S . -B build -A x64\ncmake --build build --config Release\nbuild\\Release\\Vertex.exe\n```\n\nBuild embedded Arti too:\n\n```bat\ncmake -S . -B build -A x64 -DVERTEX_BUILD_ARTI=ON\ncmake --build build --config Release --target vertex_arti\ncmake --build build --config Release\n```\n\n### macOS\n\nXcode command line tools:\n\n```sh\ncmake -B build\ncmake --build build\nopen build/Vertex.app\n```\n\nWith embedded Arti:\n\n```sh\ncmake -B build -DVERTEX_BUILD_ARTI=ON\ncmake --build build --target vertex_arti\ncmake --build build\n```\n\n### Linux\n\nXCB headers only. No GTK/Cairo/Pango/fontconfig stack.\n\n```sh\nsudo apt-get install -y build-essential cmake libxcb1-dev pkg-config\ncmake -B build\ncmake --build build\n./build/Vertex\n```\n\nWith embedded Arti:\n\n```sh\ncmake -B build -DVERTEX_BUILD_ARTI=ON\ncmake --build build --target vertex_arti\ncmake --build build\n```\n\n## Keyboard Stuff\n\n| Shortcut | Action |\n|---|---|\n| `Ctrl+L` | Address bar |\n| `Ctrl+T` / `Ctrl+W` | New tab / close tab |\n| `Ctrl+R` or `F5` | Reload |\n| `Escape` | Stop loading / dismiss stuff |\n| `Ctrl+F` | Find |\n| `Ctrl+G` / `Ctrl+Shift+G` | Next / previous match |\n| `Ctrl++` / `Ctrl+-` / `Ctrl+0` | Zoom |\n| `Alt+Left` / `Alt+Right` | Back / forward |\n| `Ctrl+1`-`Ctrl+9` | Switch tabs |\n| `Ctrl+H` / `Ctrl+B` / `Ctrl+J` | History / bookmarks / downloads |\n| `F11` | Fullscreen on supported platform shells |\n| `F12` | Install downloaded update |\n\nLinux platform feature shortcuts:\n\n```text\nCtrl+Shift+M  open vertex://platform-features\nCtrl+Shift+U  toggle/fill platform feature debug state\n```\n\nmacOS equivalents:\n\n```text\nCmd+Shift+M\nCmd+Shift+U\n```\n\n## Tests\n\n```bat\nbuild\\Release\\vertex-tests.exe html\nbuild\\Release\\vertex-tests.exe css\nbuild\\Release\\vertex-tests.exe layout\nbuild\\Release\\vertex-tests.exe paint\nbuild\\Release\\vertex-tests.exe js\nbuild\\Release\\vertex-tests.exe network\nbuild\\Release\\vertex-tests.exe codec\nbuild\\Release\\vertex-layout-engine-tests.exe\n```\n\nUseful debug tools:\n\n```sh\nbuild/dump_layout page.html [viewportWidth]\nbuild/dump_js script.js\nbuild/render_probe page.html [viewportWidth]\nbuild/test_url\n```\n\n## Perf Debugging\n\n```sh\nVERTEX_PERF=1 ./build/Vertex\n```\n\nWindows:\n\n```bat\nset VERTEX_PERF=1\nbuild\\Release\\Vertex.exe\n```\n\nYou get fetch/cache/style/layout/paint/JS timings in the status bar.\n\n## Where Data Goes\n\n| Platform | Profile | Cache |\n|---|---|---|\n| Windows | `%LOCALAPPDATA%\\Vertex\\User Data\\Default` | `%LOCALAPPDATA%\\Vertex\\Cache\\Default` |\n| macOS | `~/Library/Application Support/Vertex/Default` | `~/Library/Caches/Vertex/Default` |\n| Linux | `~/.config/Vertex/Default` | `~/.cache/Vertex/Default` |\n\nMostly TSV and JSON files. Easy to inspect. Easy to delete when something gets weird.\n\n## Project Map\n\n```text\nsrc/\n  codec/       PNG, JPEG, WebP, DEFLATE\n  css/         parser, cascade, computed style\n  font/        TrueType and web fonts\n  html/        tokenizer, parser, resources\n  js/          lexer, compiler, VM, DOM bridge\n  layout/      layout tree and geometry\n  network/     HTTP, TLS, WebSocket, cookies, Tor/Arti bridge loader\n  paint/       display-list pieces\n  platform/    Windows/macOS/Linux shells and browser chrome\n  render/      painting, SVG, images, canvas\ntests/         subsystem tests\ntools/         debug tools\nthird_party/   optional Arti bridge crate\n```\n\n## The Vibe\n\nBrowsers are usually giant black boxes. Vertex is trying to be the opposite: small enough to read, weird enough to learn from, and real enough to load pages that were absolutely not designed for it.\n\nThe loop is simple:\n\n1. Open a page.\n2. Watch it break.\n3. Figure out which browser subsystem lied.\n4. Fix the smallest thing.\n5. Keep the test.\n\nThat's basically the whole project.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhackclubium%2Fvertex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhackclubium%2Fvertex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhackclubium%2Fvertex/lists"}