Repository navigation
π Browser4 4.13.26
π Browser4 v4.13.26 Release Notes
Release Date: 2026-10-04 10:48:33 UTC
Java Version: 17+
Built by: @galaxyeye
URL normalization backport: 4.13.x had none of it, this release brings the whole thing over from 4.14.x.
The base library moves to browser4-base 4.11.24, which carries the fragment fix (a fragment normalize() discards can no longer reject a loadable url) and the canonical form: normalize() now folds the spellings that are provably one resource (scheme/host case, default port, empty path, dot segments, unreserved-character escapes) plus the three folded by policy (a trailing slash on a non-root path, repeated separators, query parameter order). Normalization is an identity, never an address - it is the key the page store, page cache, url pool and crawl ledger are keyed by, while the browser is still sent the caller's own spelling (NormURL.href).
Also in this release:
- goto/navigate validates the address and never normalizes it, so "https://host/doc#section" keeps its fragment;
- crawl/scrape seeds are validated at the submission boundary: /api/crawl, /api/x/submit and /api/swarm/submit refuse an unfetchable seed with 400 "Malformed url: <...>" instead of spending the budget and reporting a page nobody asked for;
- the crawl queue key orders a url's query the way the engine identity does, and the snapshot origin guard no longer reads a reordered query as another document;
- the experience layer gives one page one spelling across normalize / urlPatternOf / matches, so a learned recipe resolves on the next visit.
Verified before tagging: 2079 tests across browser4-skeleton, browser4-protocol, browser4-agent-tools, browser4-agentic and browser4-rest, 0 failures.
π¦ Release Highlights
π Release Statistics
| Metric | Value |
|---|---|
| π JAR Size | 91MB |
| π Commits | 19 |
| π₯ Contributors | 1 |
| ποΈ Build Date | 2026-10-04 10:48:33 UTC |
π Changes Since Last Release
- Bump version to v4.13.26 (e333f8c871)
- Merge fix/url-normalization-consistency into 4.13.x: the URL normalization backport (ef2f6e3fb0)
- docs(dev): record the URL normalization backport onto 4.13.x (5104ea801e)
- fix(url): adapt the url-normalization backport to the 4.13.x harness (f868671d2d)
- fix(crawl): order a queued url's query the way the engine's identity does (089e5b0b11)
- fix(protocol): the snapshot origin guard must not read a reordered query as another document (4230741a61)
- chore(deps): consume pulsar 4.11.24 (faca27ece7)
- docs(url): state the invariant β normalize for the key, href for the address (b838a78962)
- docs(url): audit the identity plumbing β normalize() is the only key (d8a3c6c468)
- docs(url): record the base-library definition change and the canonical-form scope (046f67e98b)
- feat(url): consume pulsar-common 4.11.23, validate at the boundaries, go to the href (ebd6ae434a)
- fix(rest): one escape, one url check, and a NormURL that keeps its detail (0fc7ca451c)
- docs(url): record the Phase B fixes and the full verification log (2212 tests) (218b1b4f7d)
- fix(experience): one URL spelling for the store, the pattern and the matcher (2a294c18f7)
- docs(url): the base-library URLUtilsTest runs green (43/43) (673bffc340)
- docs(url): record the executed fixes and the verification results (460dd36500)
- fix(url): make URL normalization honour its own contract (749215926c)
- docs(url): add URL normalization review and fix plan (e9d3d6c487)
- Auto-bump version to 4.13.26-SNAPSHOT (61a38a1737)
π Quick Start
Self-contained install
Use the CLI to download the matching Browser4 runtime bundle for your platform:
browser4-cli install
browser4-cli openCLI & SKILLS
# Open a new browser window
browser4-cli open
# Navigate to a page
browser4-cli goto https://browser4.io
# Inspect the page β note the eN labels on interactive nodes
browser4-cli snapshot
# Interact using refs from the snapshot
browser4-cli click e15
browser4-cli type e15 "Hello World"
browser4-cli press e15 Enter
browser4-cli keydown Shift
browser4-cli mousemove 150 300
browser4-cli mousewheel 0 100
browser4-cli keyup Shift
# Take a screenshot and save it to disk
browser4-cli screenshot
# Use a custom server URL
browser4-cli open --server http://localhost:9090
# Execute multiple commands in one process
browser4-cli batch "open https://browser4.io" "snapshot"
# Stop on the first batch failure
browser4-cli batch --bail "open https://browser4.io" "click e1" "screenshot"
# Advanced: pipe batch commands as JSON via stdin
echo '[
["goto", "https://example.com/form-filling"],
["click", "#reset-btn"],
["fill", "#first-name", "Bob"],
["fill", "#last-name", "Smith"],
["fill", "#email", "bob@example.com"],
["select", "#country", "uk"],
["check", "#agree-terms"],
["click", "#submit-btn"]
]' | browser4-cli batch --json
# Close the session when done
browser4-cli closeπ Full Changelog
Built with β€οΈ by the Browser4 team
browser4-cli
This release also includes prebuilt browser4-cli binaries for:
- Linux x64
- Linux ARM64
- Linux musl x64
- Linux musl ARM64
- Windows x64
- macOS x64
- macOS ARM64
npm package:
npm install -g browser4-cli
CLI package version in this release workflow:
4.13.26
Self-contained Browser4 runtime bundles
This release also includes self-contained Browser4 runtime bundles with:
- a
lib/directory containingBrowser4Bundle.jarand all runtime dependencies - a minimal
jlink-built JRE underruntime/ - platform-specific launcher scripts in
bin/
Runtime model:
runtime/bin/java -cp "lib/*" <MainClass>
Supported release assets:
browser4-bundle-runtime-windows-x64.zipbrowser4-bundle-runtime-linux-x64.tar.gzbrowser4-bundle-runtime-darwin-arm64.tar.gz
Recommended install flow:
browser4-cli install
Full Changelog: v4.13.25...v4.13.26