Repository navigation
Releases: platonai/Browser4
Release list
🚀 Browser4 4.14.1
🚀 Browser4 v4.14.1 Release Notes
Release Date: 2026-10-17 05:40:34 UTC
Java Version: 25+
Built by: @galaxyeye
Browser4 4.14.1 is the first maintenance release of the 4.14 line: two large issue batches from the scenario evaluations land as fixes, and two defects that broke everyday CLI commands are gone.
- Every command with a positional argument works again. The option validation added with the 20261013 batch treated the dispatcher's positional slot as a misspelled flag, so
open <url>failed with "unknown option --url" - together withgoto,new-tab,crawl,console,scrollintoview,highlight,snapshot grep,webminer install,code replaceandmousemove. --jsonprints exactly one document.network requests --jsonemitted the raw buffer plus the envelope (whichjqrejects), andnetwork routesclaimed e2e coverage it never had; both now record native JSON inside the envelope, and the routes command is asserted end to end.- Two issue batches closed. 139 issues from the 20261013 evaluations and 132 from the 20261015 ones are fixed and verified across agent lifecycle, the five plugin modules, snapshot/htmlsnapshot/inspect, crawl/loop and attach/session/tabs/window - counts, envelopes, selector quoting and liveness reasons were the recurring themes. The 20261016 batch (19 issues) is filed for triage.
- Agent retries stop swallowing cancellation.
run()rethrows CancellationException instead of retrying past it, gates retries onRetryStrategy.shouldRetry, applies the backoff its timeout budget already accounted for, and reports an inference timeout as a timeout instead of a user cancellation. - New launch switch.
browser.extensions.inherit=falseadds--disable-extensionsat the single launch funnel, so a profile's live extensions can no longer inject their content script into a session that must stay pure (the default staystrue). The base library moves to the released 4.11.25.
📦 Release Highlights
📊 Release Statistics
| Metric | Value |
|---|---|
| 📁 JAR Size | 105MB |
| 📝 Commits | 22 |
| 👥 Contributors | 1 |
| 🏗️ Build Date | 2026-10-17 05:40:34 UTC |
🔄 Changes Since Last Release
- fix(cli-tests): exercise disconnect so the e2e coverage self-check passes (3ac459cd4b)
- chore(release): 4.14.1 (27c86e9778)
- chore(issues): file the 20261016 evaluation batch into draft (34b3d5c985)
- test(real-world-scenarios): close the disconnect/network-routes/tool-list gaps (6f345190a6)
- test(production): stop Phase C asserting a history entry the page pruned (8af8d8e574)
- chore(issues): archive the 20261015 batch into review/done/2026/1015 (d160ae2b8c)
- fix: repair the 20261015 scenario issue batch (52d242dcf5)
- docs(config): drop the Claude Code [1m] annotation from the DeepSeek example (78e21695d1)
- fix(scripts): stop shadowing the read-only $HOME before every agent launch (fc8a00fb17)
- Merge feat/eval-world-and-issue-fixes into 4.14.x: the 20261013 issue batch, main-world eval, and the base 4.11.25 release (43830cedfb)
- test(e2e): align the last three scenarios with the batch's behaviour (e0cac9427d)
- build: consume the released base library 4.11.25 (fe6fba5c78)
- fix(cli): make the 20261013 batch's behaviour changes match their tests (b776c0268f)
- fix(cli): stop rejecting the positional arguments every command declares (7fd8d531ff)
- fix: repair the 20261013 scenario issue batch (8b71b27dfd)
- chore(issues): archive every issue artifact into review/done (d2bbd419a4)
- fix(agentic): repair run() retry loop cancellation, backoff and timeout reporting (1deeb1e7fe)
- docs(copilot): file the environment-purity switch design and stealth probes (716c1a2b35)
- feat(browser): add browser.extensions.inherit to control user extensions at launch (c40bc909c9)
- Merge 4.14.x into main: the v4.14.0 release, its CI e2e budget fix, and the 4.14.1-SNAPSHOT bump (8cfc588592)
- Auto-bump version to 4.14.1-SNAPSHOT (2801d1d1fc)
- Merge 4.14.x into main: the nightly's two newly-run suites, and the rc.10 bump (eaebaec498)
🚀 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.14.1
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.14.0...v4.14.1
🚀 Browser4 4.14.0
🚀 Browser4 v4.14.0 Release Notes
Release Date: 2026-10-14 08:20:10 UTC
Java Version: 25+
Built by: @galaxyeye
Browser4 4.14.0 is the first stable release of the 4.14 line: the release-candidate cycle is closed and the runtime bundle, the CLI, the REST API and the Maven artifacts ship together under one version number.
- Scraping and formats are first-class. The
scrapecommand (alsoapi/scrapeover REST) captures a live tab as structured content,screenshotorpdf, with--output <dir>for binary results and a three-statestrictcontract for how hard a requested format must succeed. - Crawling and URLs are hardened. A crawl seed that is not a valid URL is refused up front, and URL normalization is consistent across the crawl queue, the snapshot origin check and the experience store — a reordered query string no longer reads as a different document.
- Sessions are visible across workspaces.
list --allnow spans every workspace's persisted sessions (--alland--verbosehad been silent no-ops on the CLI-dispatchedlistpath), with a Workspace column and honestStatus Unknownrows for sessions the current backend cannot verify. - A leftover process can no longer park a runner. The native-command and child-output drains are bounded: they return once both streams reach EOF or the deadline expires, and report which descendants still hold the pipes instead of blocking in a native wait that ignores Ctrl+C.
- Smaller sharp edges:
test.ps1 psrejects unknown arguments instead of silently running the whole suite, and the harness emits UTF-8 instead of the OEM code page, so non-ASCII output survives redirection (34 U+FFFD in one tail block before the fix, 0 after).
Upgrading from 4.13.x: the backend default port is 18182, and installing the runtime bundle keeps the bundle's plugins/, launcher scripts and manifest instead of copying only runtime/, lib/ and bin/.
-
list --allspans every workspace's persisted sessions -
bound the native-command drain so a leftover descendant cannot park the runner
-
bound the child output drain so a leftover descendant cannot hang the runner
-
reject unknown arguments for the ps target
-
emit UTF-8 instead of the OEM code page
-
keep the two newly-run suites honest about their environment
-
file the latest scenario evaluations and refresh the review template
Release gates: the JVM test suite, the Docker image, the runtime-bundle smoke tests on Windows/Linux/macOS, the CLI unit tests and the CLI e2e suite. The features that landed during the cycle — the formats layer, an offline and instant --help, browser-level CDP WebSocket attach, the tab-lifecycle fixes — are described in the v4.14.0-rc.* notes.
📦 Release Highlights
📊 Release Statistics
| Metric | Value |
|---|---|
| 📁 JAR Size | 105MB |
| 📝 Commits | 11 |
| 👥 Contributors | 1 |
| 🏗️ Build Date | 2026-10-14 08:20:10 UTC |
🔄 Changes Since Last Release
- chore(ci): add task record for the v4.14.0 release.yml failure (d17a95543a)
- fix(ci): give the release CLI e2e step the same 30-minute budget as nightly (441d24140f)
- chore(release): 4.14.0 (3741ead296)
- docs(coworker): file the latest scenario evaluations and refresh the review template (9f5470727e)
- feat(cli): let
list --allspan every workspace's persisted sessions (19e575f9ea) - fix(rws): bound the native-command drain so a leftover descendant cannot park the runner (185175f6eb)
- fix(bin): bound the child output drain so a leftover descendant cannot hang the runner (a009882764)
- fix(bin): reject unknown arguments for the ps target (ddc98239c2)
- fix(scripts): emit UTF-8 instead of the OEM code page (a0b206124b)
- fix(ci): keep the two newly-run suites honest about their environment (0dc4db42ad)
- Auto-bump version to 4.14.0-rc.10 (4107ddc8b5)
🚀 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.14.0
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
What's Changed
- fix(nightly-cli): restore Docker-backed backend; fix e2e runtime-dir cwd bug by @platonai in #585
- feat(network): agent browser Network / HAR capability & request routing by @platonai in #586
- test(e2e): repair the six nightly CLI scenarios that fail every night by @platonai in #608
- docs(crawl): keep crawl.md inside the M6 cap, and gate skill docs on change by @platonai in #610
- test(protocol): cover ProxyContext and the driver-pool closer, restoring the PR gate floor by @platonai in #612
Full Changelog: v4.13.23...v4.14.0
🚀 Browser4 4.14.0-rc.9
🚀 Browser4 v4.14.0-rc.9 Release Notes
Release Date: 2026-10-13 00:03:04 UTC
Java Version: 25+
Built by: @galaxyeye
This release adds a full scraping and formats layer to Browser4, so you can pull extracted content, screenshots, and PDFs straight from a live tab via the CLI or the REST API.
-
Scrape in multiple formats. The new
scrapecommand (also exposed asapi/scrapeover REST) captures the live tab as structured content,screenshot, orpdf.scrape --output <dir>saves binary results to disk, and artifact bytes are served over HTTP so remote callers can fetch them. Astrictoption gives three-state control over how strictly requested formats must succeed. -
Help that works offline — and is instant. CLI
--helpis now accurate, complete, and no longer requires a running backend; commands that are purely local no longer advertise MCP tools they never use. -
Hardened crawl and URL handling. A crawl seed that isn't a valid URL is rejected up front in both the CLI and over MCP, and URL normalization is now consistent across the crawl queue, snapshot origin checks, and the experience store — reordered query strings no longer read as a different document.
-
Sturdier tab lifecycle. Tab close is now verified and retried, so session recovery no longer resurrects tabs you deliberately closed, and
page_url/page_titlereporting stays with the built-in tab tools. -
Broader CDP attach support. Browser4 can attach over the browser-level CDP WebSocket and selects endpoints by page target, covering WebSocket-only browsers and extension-based profiles; a new
extension_idconfiguration setting is available. -
make help accurate, complete, offline and instant
-
annotate classes with @beta to indicate experimental status
-
implement the
strictthree-state contract -
scrape --output <dir>, so binary formats can reach the caller -
serve artifact bytes over HTTP, so a remote caller can fetch them
-
implement
pdf, the second live-tab format -
implement
screenshot, and fix the two live-stage bugs it exposed -
register
scrape/scrape formatsas static commands (Phase 1c A7) -
expose the formats layer over REST at api/scrape (Phase 1c A5)
-
expose the formats layer as the
pagetool domain (Phase 1c A1/A2/A7) -
add the Firecrawl-compatible
formatslayer (model, engine, SPI wiring) -
consume pulsar-common 4.11.23, validate at the boundaries, go to the href
-
attach over the browser-level CDP WebSocket
-
add config extension_id
-
pick attach endpoints by page target, WebSocket-only browsers included
-
keep page_url/page_title with the built-in tab tools
-
stop advertising an MCP tool for two purely local commands
-
refuse a seed that is not a URL, in the CLI and over MCP (issue #616)
-
require an addressed session, and record the A1-A6 decisions
-
refuse an unusable contributor at registration, not at call time
-
drop the request-level
urlandexpiresinstead of half-honouring them -
verify tab close and retry to stop recovery resurrecting tabs
-
realign the e2e gate with the 20261004 batch; fix agent list --clear
-
register tool-call in the e2e tested-commands list
-
close out 20261004 issue-report batch (18 reports)
-
adapt the url-normalization backport to the 4.13.x harness
-
order a queued url's query the way the engine's identity does
-
the snapshot origin guard must not read a reordered query as another document
-
one escape, one url check, and a NormURL that keeps its detail
-
one URL spelling for the store, the pattern and the matcher
-
make URL normalization honour its own contract
-
compile on non-Windows after the process-list refactor
-
update imports to use ai.platon.browser4.common.B4Constants
-
share the session, envelope and SSE rules behind the scrape and command faces
-
keep the crawl reference inside the 500-line cap
-
record the CLI command coverage audit and the plan behind it
-
更新中英文 README 的联系信息及展示图片
-
give
scrapeits own tips, and record the verified numbers -
document
page scrapeand put the page domain under the doc gates -
record the verified Phase 1c environment and the expires mechanism
-
record the URL normalization backport onto 4.13.x
-
state the invariant — normalize for the key, href for the address
-
audit the identity plumbing — normalize() is the only key
-
record the base-library definition change and the canonical-form scope
-
record the Phase B fixes and the full verification log (2212 tests)
-
the base-library URLUtilsTest runs green (43/43)
-
record the executed fixes and the verification results
-
add URL normalization review and fix plan
-
track all three CDP-attach open items, not just the two issues
-
link the non-Windows listening-port gap to its issue
-
record the doc-line-cap and release-order traps
-
keep browser-modes.md inside the 500-line decision-doc cap
-
record the WebSocket-attach findings and the 4.11.23 release run
-
document WebSocket attach, extension_id and portable profiles
-
assert the server-free local command surface offline
-
guard command coverage so it cannot drift again
-
add the first six Wave 1 scenario tasks
-
prove the A2 refusal on a real backend
-
assert the formats layer against a real page built to exercise it
📦 Release Highlights
📊 Release Statistics
| Metric | Value |
|---|---|
| 📁 JAR Size | 105MB |
| 📝 Commits | 79 |
| 👥 Contributors | 1 |
| 🏗️ Build Date | 2026-10-13 00:03:04 UTC |
🔄 Changes Since Last Release
- fix(mcp): keep page_url/page_title with the built-in tab tools (a61e3776d2)
- chore(cli): sync CLI version to 4.14.0-rc.9 (201b052580)
- Bump version to v4.14.0-rc.9 (92e381a947)
- docs(skills): keep the crawl reference inside the 500-line cap (73f550a6e3)
- test(cli): assert the server-free local command surface offline (7debec943d)
- fix(cli): stop advertising an MCP tool for two purely local commands (1d77753843)
- test(real-world-scenarios): guard command coverage so it cannot drift again (1a6abde704)
- test(real-world-scenarios): add the first six Wave 1 scenario tasks (411d86c62f)
- docs(cli): record the CLI command coverage audit and the plan behind it (3ed365de6f)
- feat(cli): make help accurate, complete, offline and instant (a60c1a7487)
- fix(crawl): refuse a seed that is not a URL, in the CLI and over MCP (issue #616) (d0118d4130)
- feat: annotate classes with @beta to indicate experimental status (1cfdf646e0)
- refactor: update imports to use ai.platon.browser4.common.B4Constants (7ef1c4da2d)
- Merge branch '4.14.x' of https://github.com/platonai/Browser4 into 4.14.x (7918f76863)
- docs: 更新中英文 README 的联系信息及展示图片 (40a47a7dba)
- refactor(rest): share the session, envelope and SSE rules behind the scrape and command faces (7f9a63165c)
- ci(nightly): run the E2E/E2ETest JVM suites here, the only place they can run (d60023858b)
- test(formats): prove the A2 refusal on a real backend (d4f5ce4dc8)
- feat(formats): implement the
strictthree-state contract (b096120a08) - docs(scrape): give
scrapeits own tips, and record the verified numbers (5434506e71) - feat(cli):
scrape --output <dir>, so binary formats can reach the caller (e79145ed7f) - feat(formats): serve artifact bytes over HTTP, so a remote caller can fetch them (cb9441c648)
- feat(formats): implement
pdf, the second live-tab format (aeaad1fe69) - fix(formats): require an addressed session, and record the A1-A6 decisions (6a64317ee2)
- fix(formats): refuse an unusable contributor at registration, not at call time (d26b926b13)
- feat(formats): implement
screenshot, and fix the two live-stage bugs it exposed (7898d464c0) - fix(formats): drop the request-level
urlandexpiresinstead of half-honourin...
🚀 Browser4 4.13.27
🚀 Browser4 v4.13.27 Release Notes
Release Date: 2026-10-05 17:14:06 UTC
Java Version: 17+
Built by: @galaxyeye
v4.13.27: closeTab close/recover race fix; e2e gate realignment and agent list --clear retain fix; 20261004 issue batch
📦 Release Highlights
📊 Release Statistics
| Metric | Value |
|---|---|
| 📁 JAR Size | 91MB |
| 📝 Commits | 7 |
| 👥 Contributors | 1 |
| 🏗️ Build Date | 2026-10-05 17:14:06 UTC |
🔄 Changes Since Last Release
- fix(agentic): verify tab close and retry to stop recovery resurrecting tabs (c768247b50)
- chore(ci): add task record for the v4.13.27 release.yml failure (8bbab47b38)
- fix(cli): realign the e2e gate with the 20261004 batch; fix agent list --clear (7e86e0355e)
- chore(ci): add task record for the v4.13.27 release.yml failure (ee7ff47b81)
- fix(cli): register tool-call in the e2e tested-commands list (eec5fc89d3)
- fix(issues): close out 20261004 issue-report batch (18 reports) (8889a9b933)
- Auto-bump version to 4.13.27-SNAPSHOT (6514a3ccc4)
🚀 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.27
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.26...v4.13.27
🚀 Browser4 4.14.0-rc.8
🚀 Browser4 v4.14.0-rc.8 Release Notes
Release Date: 2026-10-04 10:51:05 UTC
Java Version: 25+
Built by: @galaxyeye
Fixes since 4.14.0-rc.7, headlined by a swarm backend that actually ships and an acceptance suite that can no longer report a false green.
-
Swarm works on a clean install. The CLI's runtime installer copied only
runtime/,lib/andbin/out of the bundle and silently droppedplugins/, so the pluginized swarm backend was never loaded and every/api/swarm/**call answered503 Swarm not installed. The plugin directory, the launcher scripts and the bundle manifest now survive the install. -
The default backend port matches its documentation. A fresh install with no
config.jsonstarted the server on 8182 while AGENTS.md, the bundle, the Docker image andextract_port()'s fallback all said 18182 - the port rc.7's own upgrade note announced. The default is now 18182; an existingconfig.jsonorcli-state.jsonstill wins. -
The acceptance suite can no longer report a false green. A scenario whose commands failed exited 0, because
Finish-TestSessionleaked its helpers' return values into the function result and PowerShell turnsexit @('...', 1)into exit code 0. That masked the swarm 503 as "29/29 steps passed" in the 2026-10-04 production run. -
The acceptance harness no longer guesses. It resolves the server endpoint and the runtime bundle from the CLI's own state instead of hardcoding 18182 and a bundle layout that no longer exists, re-pins the runtime to the requested version before the stress suite, and surfaces the CLI's own output when a cold start fails.
-
Two stale generated artifacts are back in sync: the module-map snapshot (adding
browser4-plugins/browser4-summary-demo) and the MCP tool reference (142 -> 143 tools,html_snapshot_algorithms). Both had failed every build since 2026-10-03, hidden behind Maven's habit of banning every later module once one fails. -
keep the bundle's plugins/ directory when installing the runtime
-
default the backend port to the documented 18182
-
exit non-zero when a scenario has failed commands
-
resolve the production harness endpoint and runtime from state
-
sync the ModuleMap snapshot with the summary-demo plugin
-
regenerate the tool reference for the summary-algorithms feature
-
align the documented backend port with the 18182 default
-
run the skills/ conformance lint inside the local gates
Verified: nightly 37191621386 is green on this commit - 39/39 steps, every JVM test, the Docker image, the CLI unit tests and the full CLI e2e suite. Locally: cargo test --bin browser4-cli 1489 passed and the harness self-test 83/83.
📦 Release Highlights
📊 Release Statistics
| Metric | Value |
|---|---|
| 📁 JAR Size | 105MB |
| 📝 Commits | 9 |
| 👥 Contributors | 1 |
| 🏗️ Build Date | 2026-10-04 10:51:05 UTC |
🔄 Changes Since Last Release
- docs(mcp): regenerate the tool reference for the summary-algorithms feature (0fdba82a60)
- fix(coding): sync the ModuleMap snapshot with the summary-demo plugin (82fa595aa6)
- docs: align the documented backend port with the 18182 default (465c80a17c)
- fix(tests): resolve the production harness endpoint and runtime from state (17458110da)
- fix(tests): exit non-zero when a scenario has failed commands (b734660931)
- fix(cli): default the backend port to the documented 18182 (d84d615614)
- fix(daemon): keep the bundle's plugins/ directory when installing the runtime (0b270c296a)
- test(gates): run the skills/ conformance lint inside the local gates (303d7ee1da)
- Auto-bump version to 4.14.0-rc.8 (f0a7a9b903)
🚀 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.14.0-rc.8
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.14.0-rc.7...v4.14.0-rc.8
🚀 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
🚀 Browser4 4.14.0-rc.7
🚀 Browser4 v4.14.0-rc.7 Release Notes
Release Date: 2026-10-03 07:39:57 UTC
Java Version: 25+
Built by: @galaxyeye
A 131-commit release headlined by resumable crawls and predictable snapshots.
- Crawls resume instead of restarting. An interrupted crawl picks up from its last durable checkpoint, each request can set its own budget with
--timeout, and a partial crawl now exits with code 6 so scripts can tell it apart from success. - Snapshot reads you can reason about. Every htmlsnapshot command runs against a fresh snapshot of the active page, while the new
--expiresflag lets read commands serve the stored snapshot instead.summary --verboseworks again, and summary algorithms are now pluggable. - Stealthier interaction. Clicks are dispatched as trusted CDP input after a human-like pointer move, console messages are captured over CDP instead of by patching the page, and the headless token is no longer advertised.
- LLM setup is self-explanatory. The CLI hands you the configuration file to edit instead of a path to guess, and reports which provider is actually in effect.
- Consistent URL identity. One normalized form is now the identity key while the href remains the address, so reordered query strings no longer masquerade as different documents in crawls or snapshot origin checks.
Upgrade note: the default server port is now 18182 across standalone configuration, Docker, CI, and scripts — update any tooling that assumed the previous default.
-
pluginize htmlsnapshot summary algorithms
-
read commands take --expires (0s = live page, >0 = stored snapshot)
-
every command works on a fresh snapshot of the active page
-
drive the experience commands through a real page, and make the store relocatable
-
consume pulsar-common 4.11.23, validate at the boundaries, go to the href
-
hand the user the LLM configuration file instead of a path to guess
-
checkpoint/resume — an interrupted crawl continues instead of restarting (issue #606)
-
dispatch clicks as trusted CDP input
-
humanise the pointer move before a click
-
measure the Console domain, harden the capture, and pin the trade-off
-
let a request set its own task budget (--timeout)
-
capture console messages over CDP instead of patching the page
-
say who waited for a driver, how long, and who holds the drivers
-
accept global flags after the command, exit 6 on a partial crawl
-
declare the summary-demo SDK version through the build filter
-
order a queued url's query the way the engine's identity does
-
the snapshot origin guard must not read a reordered query as another document
-
keep the expires option test out of the library target
-
make htmlsnapshot summary -v/--verbose actually work
-
scope ignoreDOMFeatures to the load that asked for it
-
make the /api/commands contract honest — 202+JSON on async, validate before allocating, three-state cancel, bounded sync visits
-
stop the Windows debug click from dying with STATUS_STACK_OVERFLOW, and gate Windows in CI
-
capture is the only writer, reads serve the page store
-
settle the checkpoint before the terminal record is visible
-
one escape, one url check, and a NormURL that keeps its detail
-
one URL spelling for the store, the pattern and the matcher
-
make URL normalization honour its own contract
-
stop the LLM status line from claiming a fixed config directory
-
report the effective LLM provider instead of only "configured"
-
derive the page-visit read timeout from the server budget, give the reactor 90 minutes
-
wait out a crawl's own task budget, not four minutes
-
make a driven tab report itself visible and focused
-
verify a tab close against the live tab list, not listDrivers()
-
make a settled row durable the moment it exists (issue #606)
-
attach the JaCoCo agent so the coverage floor actually runs
-
stop the run-tests action turning a red reactor green
-
make a mirror re-sync incremental instead of re-sending all 551 MB
-
never let the OSS upload wait for an answer nobody can give
-
mirror the base library's two-argument click again
-
wait for the OSS sync run we triggered, under our own budget
-
act on the bot-stealth report's CLI findings
-
fail loudly on an unresolvable fill target, encode full-page PNG
-
stop advertising the headless token
-
stream scenario output live instead of a silent file relay
-
make the storage-state default-path test independent of leftover state
-
honour --force-rebuild-bundle
-
press where the pointer was moved to
-
load a page that delivered nothing once more, and never report the loss it disproves
-
-readonly wins over -refresh, and a store serve is a delivered page
-
publish the in-flight view as an aggregate, under one lock
-
spend -top-links on distinct pages, and shape a discovered href once
-
report an empty export honestly and expose the storage key
-
report the real 0-byte cause and extract content that arrived
-
document the canonical BROWSER4_RELEASE_YES and keep the old name working
-
stop losing the release to a transient asset-upload error
-
drop stale WebMiner PowerShell test step from nightly
-
eliminate all Rust build warnings
-
clear the two M1/M6 lint findings on the release tip
-
align every surface with the fresh-snapshot contract
-
add htmlsnapshot inspect and summary command reviews
-
say "the store", not "the live page", in the query path
-
state the invariant — normalize for the key, href for the address
-
audit the identity plumbing — normalize() is the only key
-
record the base-library definition change and the canonical-form scope
-
record the Phase B fixes and the full verification log (2212 tests)
-
the base-library URLUtilsTest runs green (43/43)
-
record the executed fixes and the verification results
-
add URL normalization review and fix plan
-
keep crawl.md inside the M6 cap, and gate skill docs on change
-
state that -s/--session is a global flag and --selector scopes a snapshot
-
point the E2E service-URL examples at the 18182 default
-
document --verbose and the --output result semantics
-
correct the remaining default-port references to 18182
-
give every tab fact one home (tabs.md vs tab-management.md)
-
re-tier tabs.md as a catalog, with an Overview and Quick Index
-
give SKILL.md its required Decision Trees section
-
raise the M6 line cap to 500 and drop the lower bounds
-
record the CI coverage inventory and the E2E tag assessment
-
record the v4.13.21 mirror convergence and the main-branch caveat
-
record the --timeout end-to-end gap left open by section 27
-
record the v4.13.21-ci.1 gate result, and the gain it proves
-
exit codes, post-command global flags, and the webdb result shapes
-
correct htmlsnapshot/regex/status claims, sync CLI help, halve SKILL.md
-
pin that a capture does not switch off DOM feature computation
-
pin capture's must-write option, and say what it is not
-
keep the ProxyContext cases off each other's global state
-
cover ProxyContext and the driver-pool closer, restoring the PR gate floor
-
make watchers.tests.ps1 pass on Linux, so the restored PS gate is green
-
make the environment-mutating tests deterministic
-
repair the six nightly CLI scenarios that fail every night
-
port the navigator stealth IT to the 4.14.x E2E harness
-
tag measured slow, heavy and browser-dependent tests
-
make the failure tolerance explicit and configurable
-
read only the scalar counters from /__probe/stats
-
fix the 7 scenarios the v4.13.21 release gate failed on
-
add opt-in stealth scenarios and raw-CDP probe scripts
-
stop the storage-state test depending on a pre-created snapshot dir
-
assert crawl status through CrawlStatus, not literals
-
one status vocabulary, and a ScrapeServiceTests that no longer wastes 100s per load
-
fix the two wait-loop defects that failed the v4.13.20 gate
-
make the watchers fixture work on Linux
-
exercise Reset-CleanDirectory -Recreate:$false, not a phantom
-
sync the test-type list with the runner's mcp-contract
-
docs,ci(skills): port the M1-M8 skill-doc gate to 4.13.x, and fix all 21 issues
📦 Release Highlights
📊 Release Statistics
| Metric | Value |
|---|---|
| 📁 JAR Size | 105MB |
| 📝 Commits | 391 |
| 👥 Contributors | 3 |
| 🏗️ Build Date | 2026-10-03 07:39:57 UTC |
🔄 Changes Since Last Release
- fix(plugin): declare the summary-demo SDK version through the build filter (564b2537cd)
- chore(cli): sync CLI version to 4.14.0-rc.7 (d8045f4866)
- Bump version to v4.14.0-rc.7 (6f5093d844)
- docs(skills): clear the two M1/M6 lint findings on the release tip (e2a1e283ea)
- feat: pluginize htmlsnapshot summary algorithms (fde398d76a)
- fix(crawl): order a queued url's query the way the engine's identity does (5b5d59f5ac)
- fix(protocol): the snapshot origin guard must not read a reordered query as another document (fe70df2637)
- fix(cli): keep the expires option test out of the library target (3ef9a8a799)
- feat(htmlsnapshot): read commands take --expires (0s = live page, >0 = stored snapshot) (afd8d7c4d8)
- docs(htmlsnapshot): align every surface with the fresh-snapshot contract (37d58e56f9)
- Merge branch '4.14.x' of https://...
🚀 Browser4 4.13.25
🚀 Browser4 v4.13.25 Release Notes
Release Date: 2026-10-02 09:00:34 UTC
Java Version: 17+
Built by: @galaxyeye
Docs-only maintenance release: no runtime behavior changes. It captures the development findings from the CDP-attach work and the two traps that cost a red CI run on the way to 4.13.24 - the 500-line skill-doc cap and the bump-then-cli-sync release order.
- track all three CDP-attach open items, not just the two issues
- link the non-Windows listening-port gap to its issue
- record the doc-line-cap and release-order traps
📦 Release Highlights
📊 Release Statistics
| Metric | Value |
|---|---|
| 📁 JAR Size | 91MB |
| 📝 Commits | 5 |
| 👥 Contributors | 1 |
| 🏗️ Build Date | 2026-10-02 09:00:34 UTC |
🔄 Changes Since Last Release
- chore(cli): sync the CLI version files to 4.13.25 (672ddc0759)
- Bump version to v4.13.25 (a72607696d)
- docs(dev): track all three CDP-attach open items, not just the two issues (6be7b364dd)
- docs(dev): link the non-Windows listening-port gap to its issue (5dab332283)
- docs(dev): record the doc-line-cap and release-order traps (ae997ea376)
🚀 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.25
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.24...v4.13.25
🚀 Browser4 4.13.24
🚀 Browser4 v4.13.24 Release Notes
Release Date: 2026-10-01 17:48:06 UTC
Java Version: 17+
Built by: @galaxyeye
Release 4.13.24
📦 Release Highlights
📊 Release Statistics
| Metric | Value |
|---|---|
| 📁 JAR Size | 91MB |
| 📝 Commits | 13 |
| 👥 Contributors | 1 |
| 🏗️ Build Date | 2026-10-01 17:48:06 UTC |
🔄 Changes Since Last Release
- chore(cli): sync the CLI version files to 4.13.24 (83457578fe)
- Bump version to v4.13.24 (fa50ad1295)
- docs(cli): keep browser-modes.md inside the 500-line decision-doc cap (bb2f064bad)
- fix(cli): compile on non-Windows after the process-list refactor (bb0e954837)
- docs(dev): record the WebSocket-attach findings and the 4.11.23 release run (f71abc913c)
- chore(cli): add CDP endpoint and WebSocket probe scripts (8ae154f398)
- docs(cli): document WebSocket attach, extension_id and portable profiles (e9ab82fe4f)
- feat(cli,rest): attach over the browser-level CDP WebSocket (5c6c4054af)
- feat(cli): add config extension_id (f3d870c8c1)
- feat(cli): pick attach endpoints by page target, WebSocket-only browsers included (2aec2f4ce4)
- chore(deps): bump browser4-base to 4.11.23 (a353fa1be6)
- test(coworker): make watchers.tests.ps1 pass on Linux, so the restored PS gate is green (0995a893ab)
- docs,ci(skills): port the M1-M8 skill-doc gate to 4.13.x, and fix all 21 issues (1abc23b9b7)
🚀 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.24
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.23...v4.13.24
🚀 Browser4 4.13.23
🚀 Browser4 v4.13.23 Release Notes
Release Date: 2026-09-27 19:03:40 UTC
Java Version: 17+
Built by: @galaxyeye
LLM configuration guidance: doctor prints the writable config file path, doctor --fix writes a commented template, and browser4-base 4.11.21 corrects the not-configured guide (issue #609).
📦 Release Highlights
📊 Release Statistics
| Metric | Value |
|---|---|
| 📁 JAR Size | 91MB |
| 📝 Commits | 7 |
| 👥 Contributors | 1 |
| 🏗️ Build Date | 2026-09-27 19:03:40 UTC |
🔄 Changes Since Last Release
- chore(deps): bump browser4-base to 4.11.21 (e3b0b3272e)
- fix(cli): stop the LLM status line from claiming a fixed config directory (a4a17ee2c0)
- test(cli): make the environment-mutating tests deterministic (63521eebcf)
- feat(rest,cli): hand the user the LLM configuration file instead of a path to guess (8167333bcf)
- chore(deps): bump browser4-base to 4.11.20 (LLM provider selection) (1d6cb822da)
- fix(rest,cli): report the effective LLM provider instead of only "configured" (039cdd0169)
- Auto-bump version to 4.13.23-SNAPSHOT (16583e35a6)
🚀 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.23
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.22...v4.13.23