569 downloads in the last 30 days
2026-09-06: 28 downloads2026-09-07: 4 downloads2026-09-08: 3 downloads2026-09-09: 4 downloads2026-09-10: 18 downloads2026-09-11: 20 downloads2026-09-12: 23 downloads2026-09-13: 43 downloads2026-09-14: 35 downloads2026-09-15: 20 downloads2026-09-16: 8 downloads2026-09-17: 26 downloads2026-09-18: 21 downloads2026-09-19: 28 downloads2026-09-20: 13 downloads2026-09-21: 17 downloads2026-09-22: 13 downloads2026-09-23: 11 downloads2026-09-24: 2 downloads2026-09-25: 5 downloads2026-09-26: 4 downloads2026-09-27: 5 downloads2026-09-28: 2 downloads2026-09-29: 22 downloads2026-09-30: 66 downloads2026-10-01: 31 downloads2026-10-02: 18 downloads2026-10-03: 30 downloads2026-10-04: 23 downloads2026-10-05: 1 download

Releases 1146

Standalone per-platform binaries to download and run, no tools needed. The newest is pinned on top.

Compare →
Latest release v2.0.697

pup says when an update restarts its browser: a notification that your pup windows will close and come back in about a minute (nothing crashed), and another when they are all back, or which ones are not back yet (John, 2026-10-04: 'i just thought you had crashed'). Each notice's delivery is logged.

Stable link for websites and docs: /download/adom/pup-bridge/latest

All releases showing 61-80 of 1146

v2.0.637 Verified 2026-09-19

no ab attention-clear on pup's own open/navigate paths (it raised and briefly activated every newborn, z-watch measured 40-80 ms); native FlashWindowEx stop instead; install.sh and package.json say adom-bridge, not adom-desktop

v2.0.636 Verified 2026-09-19

z-watch instrumentation during birth grace, ms log timestamps, last-log; re-show keeps z-position

v2.0.635 Verified 2026-09-19

cold birth: arm the birth watcher after the launch (it expired before the window existed, so the cold window wore the stock CfT icon for 12 s); stamp identity at the token bind as a backstop

v2.0.634 Verified 2026-09-18

default ext lane finally gets --no-startup-window + --keep-alive-for-test (2.0.617 only put them on the stock branch): Chrome's New Tab startup window was on top at every cold start

v2.0.633 Verified 2026-09-18

cold launch: no empty url argument on the default lane either (Chrome opened its cwd as a file listing on top); gate counts by process

v2.0.632 Verified 2026-09-18

ext birth.js (CSP blocked inline token script); cold launch passes no url so --no-startup-window holds (unowned about:blank window sat on top 18 s)

v2.0.631 Verified 2026-09-18

The Rust half of the birth-token binding, which 2.0.630 shipped without: pup binds every newborn by its birth-page title token before anything else, falls back to the set-diff handle only when the token is not found, and navigates every birth from the birth page to its real URL after the window is bound and parked.

v2.0.630 Verified 2026-09-18

Every extension-lane window is born on the extension's own birth page with a unique token as its title, and pup binds the OS window by that title, deterministically, before anything else: the set-diff bound a placeholder Chrome makes at launch and parked that while the real window came up unparked (measured: 4.5 s on top on every cold start). The real URL is navigated to only after the window is bound and parked. The birth re-assert starts at 40 ms.

v2.0.629 Verified 2026-09-18

The birth re-assert runs after every extension-lane birth, dense in the first second (measured: the cold window was pulled back down within seconds while warm windows, which had no re-assert, came up on top and stayed). The post-navigate park uses the idle-hands rule. The fit step sets bounds only and never restores a minimized window: state normal was a raise, and it un-minimized windows the user had put away.

v2.0.628 Verified 2026-09-18

The idle-hands rule applies on the extension lane too: a cold first window is activated by Chrome's own restore (measured: the re-assert answered foreground with no input since birth), so a foreground window inside the birth grace with no input since birth is Chrome's raise and is bottomed; any input means a person and pup stands down. A birth that bound a placeholder and rebinds the live window later now parks that window and re-asserts from there; it used to stamp it and leave it on top.

v2.0.627 Verified 2026-09-18

A cold birth's first window gets the doctrine's bounded re-assert inside the birth grace, at 1, 2.5 and 5 seconds: measured with the fixed bottom call, a warm birth ended behind at z11 while the first window of a fresh browser settled on top after every park. The primitive never touches a foreground window, so a human's click is never undone. The foreground-proof harness clears every thread's windows by name first.

v2.0.626 Verified 2026-09-18

The park raised the window. Measured from a fresh process on the conference-room box: SetWindowPos(HWND_BOTTOM, NOMOVE|NOSIZE|NOACTIVATE) on a pup Chrome window returned true and moved it to the TOP, where it stayed; the same call with SWP_NOOWNERZORDER put it at the bottom and it stayed. Chrome's frame owns helper windows and without that flag Windows re-orders the owner with them. Every 'parked at z-bottom: true' was a raise: the birth flash, the navigate that surfaced the window, the lower that succeeded with the window on top. One flag on every bottom call.

v2.0.625 Verified 2026-09-18

The minimized birth is created with no bounds: Chrome answers 'Invalid value for state' when minimized is combined with a rect, which failed every open in 2.0.624. The fit step sizes the window right after birth, as it always has.

v2.0.624 Verified 2026-09-18

The extension lane's birth transient is MINIMIZED, not off-screen and not in place: the extension API refuses off-screen bounds, and a visible in-place birth measured on top for 42 of 52 samples even unfocused with no startup window. A minimized window cannot be raised or activated, pup shows it already at the bottom the moment it has the handle, and it can never strand because a taskbar click restores it. tools/foreground-proof.sh counts truncated titles correctly.

v2.0.623 Verified 2026-09-18

A warm open that finds the worker silent relaunches the lane by re-entering the open routine; it did so while holding the non-re-entrant birth lock, so the open deadlocked on itself and every later open queued forever (exact 60 s timeouts, a dead-looking lane, no launch line). The lock is released before the re-entry. Bites whenever the browser dies between a poll and an open.

v2.0.622 Verified 2026-09-18

The extension API refuses an off-screen window (bounds must be 50% on screen), so the extension lane births each window in place at its final rect, one call, relying on R2: with --no-startup-window the browser holds no foreground rights. A window the browser refuses is reported as ext_open_failed with Chrome's own message, not as a busy lane.

v2.0.621 Verified 2026-09-18

The extension lane follows placement rule R1 at last: every window is born off-screen at -32000,-32000 and moved on-screen within 50 ms, unconditionally, the way the CDP lane has since v2.0.276. Gone with it, per the doctrine: the hide-until-ready watcher (a strandable staging state), every focus handback (deleted in August for foregrounding the wrong window), the minimized birth, and the post-navigate attention clear, whose Bridge implementation raises the window (adom-bridge#199) and was the navigate-puts-it-on-top bug. tools/foreground-proof.sh is the gate: a pinned window, a cold lane, opens and navigates, zero samples with a pup window on top.

v2.0.620 Verified 2026-09-18

A navigation no longer leaves a pup window on top of the user's work. Measured: a navigate makes the pup window ACTIVE, and Windows refuses to lower whatever is active, so every lower reported success while the window stayed in front. The order is forced: return the screen to the window the user was in, which makes the pup window ordinary again, and only then lower it. Either half alone does nothing.

v2.0.619 Verified 2026-09-18

The extension reports which path a navigate used, and pup logs a fallback to Chrome's tab API with the reason, because that path surfaces the window and the failure was invisible.

v2.0.618 Verified 2026-09-18

A navigate no longer surfaces the window. Measured with a window pinned in front: the pup window sat behind it, and one chrome.tabs.update({url}) moved it to the very top, which every later call then inherited. That is what flashed a pup window at the user several times per sign-in. Navigation now goes over the DevTools channel (Page.navigate), which does not touch Chrome's tab or window UI.