Install
One binary. h5i is the confined development environment, and it
carries its own browser engine.
Linux / macOS:
curl -L https://github.com/h5i-dev/h5i/releases/download/v0.3.9/h5i-v0.3.9-<TARGET>.tar.gz | tar -xz
sudo mv h5i /usr/local/bin/Windows: download the .zip, extract h5i.exe, and add it to your PATH.
The browser
h5i browser open https://example.com
h5i browser snapshot
h5i browser requests # what it asked for, and what was refused
h5i browser audit # the whole session, afterwardsThe rendering engine is part of this binary. It used to ship as a
second archive (h5i-browser-light); h5i browser execs itself to
become it now, and h5i __engine reaches its own CLI for the cases
that want it directly.
Every request it makes is checked against an allowlist — every
request and every redirect hop — and written to the log before any
bytes move. A request that is not in h5i browser requests did not
happen. What a box adds, with --in, is that the record gains a
witness outside the browser; on a bare host that part is not
claimed.
Available targets
| Target | Platform |
|---|---|
x86_64-unknown-linux-musl
| Linux x86_64 (static, glibc-free) |
aarch64-unknown-linux-musl
| Linux arm64 (static, glibc-free) |
aarch64-apple-darwin
| macOS Apple Silicon (arm64) |
x86_64-pc-windows-msvc
| Windows x86_64 |
Intel Macs have no published build: Rosetta 2 translates x86_64 to
arm64, not the reverse, so the aarch64-apple-darwin archive will
not run there. Build from source instead:
cargo install --git https://github.com/h5i-dev/h5i
Each archive is accompanied by a .sha256 checksum file.
What's Changed
- browser: the half that parses the page holds none of the decisions by @Koukyosyumei in #564
- Update README with forum commands by @Koukyosyumei in #565
- browser: a handler that read back as a function and never ran, and a harness that never noticed by @Koukyosyumei in #566
- Update section title from 'A browser session' to 'A headless browser' by @Koukyosyumei in #567
- Update README with new demo image for h5i by @Koukyosyumei in #568
- browser: instruments, the WPT core push (49.7% → 66.2%), and frames as content by @Koukyosyumei in #569
- browser: the WPT core push to ~75%, and :has() without the fork by @Koukyosyumei in #570
- browser: a text node that was the document, and the fixed cost of reading a page by @Koukyosyumei in #571
- docs: the features page led by the browser, the Lean 4 model removed, and
h5i manretired by @Koukyosyumei in #572 - browser: what a page's media says, a yt-dlp lane that is not the engine, and the workflow page retired into the blog by @Koukyosyumei in #573
- browser: the page a session was opened on, a helper run with no sessi… by @Koukyosyumei in #574
- browser: the prelude compiled once and hidden inside the fetch, a Boa fork of one commit, and a crash that only happened at thread exit by @Koukyosyumei in #576
- docs: the roadmap split from its own history, and the comments that h… by @Koukyosyumei in #577
- improve pitch deck by @Koukyosyumei in #578
- docs: the breadcrumb that was a nav menu, one product entity, and dat… by @Koukyosyumei in #579
- docs: the demo cut to 58 seconds, the lightweight browser put first, and every diagram removed by @Koukyosyumei in #580
- browser: the WPT core push to 76.4%, and the instrument that was measuring a coin toss by @Koukyosyumei in #581
- docs: the benchmark numbers that changed without their fingerprints by @Koukyosyumei in #582
- bump to v0.3.9 by @Koukyosyumei in #583
Full Changelog: v0.3.8...v0.3.9