A universal browser automation library with a unified API across multiple browser engines and programming languages. The key focus is on stoppable page triggers - ensuring automation logic is properly mounted/unmounted during page navigation.
| Language | Package | Status |
|---|---|---|
| JavaScript/TypeScript | browser-commander | |
| Rust | browser-commander | |
| Python | browser-commander |
Browser Commander manages the browser as a state machine with two states:
+------------------+ +------------------+
| | navigation start | |
| WORKING STATE | -------------------> | LOADING STATE |
| (action runs) | | (wait only) |
| | <----------------- | |
+------------------+ page ready +------------------+
LOADING STATE: Page is loading. Only waiting/tracking operations are allowed. No automation logic runs.
WORKING STATE: Page is fully loaded (30 seconds of network idle). Page triggers can safely interact with DOM.
The library provides a guarantee when navigation is detected:
- Action is signaled to stop (AbortController.abort())
- Wait for action to finish (up to 10 seconds for graceful cleanup)
- Only then start waiting for page load
This ensures:
- No DOM operations on stale/loading pages
- Actions can do proper cleanup (clear intervals, save state)
- No race conditions between action and navigation
For installation and usage instructions, see the documentation for your preferred language:
- JavaScript/TypeScript: See js/README.md
- Rust: See rust/README.md
- Python: See python/README.md
See js/src/ARCHITECTURE.md for detailed architecture documentation.