Skip to content

πŸš€ Browser4 4.13.26

Choose a tag to compare

@github-actions github-actions released this 04 Oct 11:07
· 481 commits to main since this release

πŸš€ 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 open

CLI & 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

v4.13.25...v4.13.26


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 containing Browser4Bundle.jar and all runtime dependencies
  • a minimal jlink-built JRE under runtime/
  • platform-specific launcher scripts in bin/

Runtime model:
runtime/bin/java -cp "lib/*" <MainClass>

Supported release assets:

  • browser4-bundle-runtime-windows-x64.zip
  • browser4-bundle-runtime-linux-x64.tar.gz
  • browser4-bundle-runtime-darwin-arm64.tar.gz

Recommended install flow:

browser4-cli install

Full Changelog: v4.13.25...v4.13.26