Playwright-Rust Development Roadmap
May 24, 2026 · View on GitHub
Vision: Provide production-quality Rust bindings for Microsoft Playwright that match the API and quality of official language bindings (Python, Java, .NET), enabling broad community adoption.
Architecture: JSON-RPC communication with Playwright Node.js server (same as all official bindings)
Status: Version 0.13.0 code complete on main ([Unreleased]); dogfooding before tag cut. Version 0.12.0 shipped 2026-04-19.
Overview
This roadmap outlines the path to a production-ready playwright-rust library. Each version builds incrementally toward feature parity with playwright-python while maintaining strict API compatibility and comprehensive testing.
Key Milestones:
- ✅ v0.1.0 - Protocol Foundation complete
- ✅ v0.2.0 - Browser API complete
- ✅ v0.3.0 - Page Interactions complete
- ✅ v0.4.0 - Options & ElementHandles complete
- ✅ v0.5.0 - Advanced Testing Features complete - 2025-11-09
- ✅ v0.6.0 - Production Hardening complete - 2025-11-12
- ✅ v0.7.0 - Single-Crate Architecture complete - 2025-11-16
- ✅ v0.7.1 - Script & Style Injection APIs complete - 2025-12-24
- ✅ v0.7.2 - Community Features & Fixes complete - 2025-12-24
- ✅ v0.8.0 - Typed Evaluate API complete - 2025-12-30
- ✅ v0.8.1 - Persistent Contexts & App Mode complete - 2026-01-04
- ✅ v0.8.x through v0.12.0 - Full Python API parity + agent integration complete (2026-04-19)
- ✅ v0.13.0 - Playwright 1.59 completeness + agent codegen + companion crates - 2026-05-23
- 🚧 v1.0.0 - Real-World Validation & Final Polish
- 🔮 v1.1.0 - Future enhancements
Version 0.1: Protocol Foundation ✅ Complete
Goal: Establish JSON-RPC communication with Playwright server and provide access to browser types.
Status: ✅ Complete - See v0.1-protocol-foundation.md and Technical Summary
Key Deliverables:
- Playwright server download and lifecycle management
- Stdio pipe transport with length-prefixed JSON messages
- JSON-RPC connection layer with request/response correlation
- Protocol object factory (GUID-based object instantiation)
- Entry point:
Playwright::launch().await? - Access to
chromium(),firefox(),webkit()browser types
Version 0.2: Browser API ✅ Complete
Goal: Implement browser launching and page lifecycle management.
Status: Complete - See v0.2-browser-api.md
Delivered:
- Browser launching (
BrowserType::launch()) - Context management (
Browser::new_context()) - Page creation (
BrowserContext::new_page(),Browser::new_page()) - Lifecycle cleanup (close methods)
- Cross-browser testing (Chromium, Firefox, WebKit)
Version 0.3: Page Interactions ✅ Complete
Goal: Implement core page interactions (navigation, locators, actions) matching playwright-python API.
Status: ✅ Complete - See v0.3-page-interactions.md
Delivered:
- Navigation:
page.goto(),page.reload(),page.title(), URL tracking - Locators:
page.locator(selector)with auto-waiting and chaining - Actions:
click(),dblclick(),fill(),clear(),press(),check(),uncheck(),hover() - Select and upload:
select_option(),set_input_files() - Queries:
text_content(),inner_text(),inner_html(),get_attribute(),input_value() - State queries:
is_visible(),is_enabled(),is_checked(),is_editable() - Locator chaining:
first(),last(),nth(),count() - Keyboard API:
keyboard.type_text(),keyboard.press(),keyboard.down(),keyboard.up(),keyboard.insert_text() - Mouse API:
mouse.move_to(),mouse.click(),mouse.dblclick(),mouse.down(),mouse.up(),mouse.wheel() - Screenshots:
page.screenshot(),page.screenshot_to_file()(PNG format) - Cross-browser testing: All features verified on Chromium, Firefox, WebKit
- Test infrastructure: Test server with custom HTML pages for deterministic testing
Version 0.4: Options & ElementHandles ✅ Complete
Goal: Implement options pattern for actions/screenshots and ElementHandle protocol support (all deferred from Version 0.3).
Status: ✅ Complete (2025-11-08) - See v0.4-advanced-features.md
Delivered:
- ElementHandle protocol support with ChannelOwner implementation
- Element screenshots:
locator.screenshot()via ElementHandles - Screenshot options: ScreenshotType (Png, Jpeg), quality, full_page, clip, omit_background
- ClickOptions with builder pattern: button, modifiers, position, force, trial, timeout
- Action options: FillOptions, PressOptions, CheckOptions, HoverOptions, SelectOptions
- SelectOption variants: select by value, label, or index
- Navigation error handling and timeout tests
- Keyboard/Mouse options: delay, button, click_count, steps
- All Version 0.3 deferrals addressed and implemented
- Comprehensive cross-browser testing (Chromium, Firefox, WebKit)
Version 0.5: Advanced Testing Features ✅ Complete
Goal: Implement advanced testing features including assertions, network interception, and testing utilities.
Status: ✅ Complete (2025-11-09) - See v0.5-advanced-testing.md
Delivered:
- Assertions:
expect(locator).to_be_visible()with auto-retry (5s default timeout, 100ms polling) - Text assertions:
to_have_text(),to_contain_text()with regex pattern support - Value assertions:
to_have_value()with regex pattern support - State assertions:
to_be_enabled(),to_be_disabled(),to_be_checked(),to_be_unchecked(),to_be_editable() - Negation support:
.not()for all assertions - Custom timeouts:
.with_timeout()configuration - Network interception:
page.route()with async closure handlers - Route handling:
route.abort(),route.continue(),route.fulfill() - Response mocking: Custom status, headers, body (works for API/fetch, main document needs investigation)
- JSON helpers:
.json()for automatic serialization - Glob pattern matching:
**/*.png,**/*, etc. - Request data access:
route.request().url(),method() - Downloads: Event handling, save functionality, metadata access
- Dialogs: Alert/confirm/prompt handling with accept/dismiss
- Convenience methods:
locator.set_checked()for boolean-based check/uncheck - Cross-browser testing: All features verified on Chromium, Firefox, WebKit
Version 0.6: Production Hardening ✅ Complete
Goal: Polish for v0.6.0 release, address deferred items, comprehensive documentation.
Status: ✅ Complete (2025-11-12) - See v0.6-production-hardening.md
Delivered:
- Windows support (stdio cleanup fix, CI stability flags)
- Complete assertion API (to_be_focused)
- Main document fulfillment investigation (Playwright server limitation documented)
- Documentation completeness (rustdoc 100% coverage for all public APIs)
- Performance optimization (benchmark suite, GUID Arc
optimization, chunked reading) - Test suite optimization (cargo-nextest integration, test combining)
- Stability testing (memory leaks, resource cleanup, error handling)
- Low-priority enhancements (FilePayload, BrowserContext options, route continue overrides)
- v0.6.0 published to crates.io
Version 0.7: Real-World Integration & Single Crate ✅ Complete
Goal: Consolidate architecture and implement critical features for real-world integration.
Status: ✅ Complete (Final release: v0.7.2) - See v0.7-single-crate.md
Delivered:
- v0.7.0: Single Crate Architecture - Consolidated playwright-core into playwright-rs
- v0.7.1: Script & Style Injection APIs - Community contribution by @douglasob
BrowserContext.add_init_script(),Page.add_init_script(),Page.add_style_tag()
- v0.7.2: Community Features & Fixes - Storage state, debugging, logging improvements
- Storage state support (cookies, localStorage persistence)
Page::pause()for debugging with Playwright Inspector- Consistent tracing initialization
Note: Version closed early due to significant community contribution warranting v0.8.0. Planned items (Remote Connection, Critical Gaps, API Polish) moved to v0.8.
Version 0.8: Typed Evaluate & Continued Integration
Goal: Implement typed evaluate API and continue real-world integration features.
Status: ✅ Complete through v0.12.0 - See v0.8-real-world-integration.md
Milestones:
- ✅ v0.8.0: Typed Evaluate API (2025-12-30) - Community contribution by @douglasob
- ✅ v0.8.1: Persistent Contexts & App Mode (2026-01-04) - Addressed Issue #9 (App Mode)
- ✅ v0.8.2: Remote Connection (BrowserType::connect)
- ✅ v0.8.x: Full implementation of Android, Electron, Tracing, APIRequestContext, LocalUtils
- ✅ v0.8.2: Critical Feature Gaps (WebSocket Events, Locator Audit)
- ✅ v0.8.2: API Polish
Delivered in v0.8.0:
- Typed Evaluate API - Generic
Page::evaluate()with argument serialization and typed resultsPage::evaluate<T: Serialize, U: DeserializeOwned>(expression, arg)- Fully typed JavaScript evaluation- Argument serialization: Pass any Serialize type to JavaScript
- Result deserialization: Receive typed results with compile-time validation
- Comprehensive serialization module with Playwright protocol support
- Backward compatible with original methods
Version 0.13: Playwright 1.59 Completeness + Agent Codegen
Goal: Catch up to Playwright 1.59 (screencast, debugger, picker, CDP events, aria-snapshot options), ship the agent-codegen surfaces (programmatic locator picking, trace-file consumption from Rust), and trim the default dep tree for leaner cold builds.
Status: ✅ Shipped 2026-05-23. playwright-rs 0.13.0, playwright-rs-macros 0.1.0, and playwright-rs-trace 0.1.0 published to crates.io. See crates/playwright/CHANGELOG.md for the full list of additions, changes, and breaking changes.
Milestones (all landed):
- ✅ Playwright 1.59 parity —
Page::screencast,Debugger+BrowserContext::debugger(),Page::pick_locator(),CDPSession::on(method, handler)event side,AriaSnapshotOptions,Tracing.start({live: true}),Page::aria_snapshot(),Locator::normalize(),LaunchOptions::artifacts_dir,Page::clear_console_messages()/clear_page_errors()(closed: #69, #70, #71, #72, #73, #74, #75, #76, #79; umbrella #55) - ✅ Tracing instrumentation across the public async surface —
#[tracing::instrument]on every public method onBrowser,Page,Frame,Locator,ElementHandle,Tracing,CDPSession,Debugger,Screencast, etc., with cardinality-bounded span fields (#84, #91) - ✅ Companion crate
playwright-rs-macros0.1.0 — compile-time-validatedlocator!()macro - ✅ Companion crate
playwright-rs-trace0.1.0 — programmatic trace-file consumption (independently versioned, tag prefixtrace-v*) - ✅ Dep trim —
imagebehind opt-inscreenshot-difffeature,reqwest→ureqin build script,mime_guess→ hand-rolled, narrowedtokiofeatures (closed: #62, #63, #64, #65, #66, #67) - ✅ Build-script driver location moved to Cargo's
$OUT_DIR(was workspace-relativedrivers/, which broke for downstream git-dep consumers because Cargo's CI caches don't preserve~/.cargo/git/checkouts/) - ✅ New
playwright-rs[[bin]](featurecli) — bootstrap installer for the bundled driver into a stable cross-build user cache, for downstream binaries distributed viacargo install - ✅ Debug-build runtime-binding assertion on
Browser(#90),Page::set_url_fragment/clear_url_fragmenthelpers (#89)
Release prep: Tracked on #86. All pre-release plumbing verified during dogfooding — cargo publish --dry-run clean for playwright-rs-macros and playwright-rs-trace; release.yml already handles all three tag prefixes; the release-process skill captures the macros first-publish gotcha ([policy.<crate>] audit-as-crates-io = true must be added after the first publish, not before).
Version 1.0: Real-World Validation & Final Polish
Goal: Real-world testing in t2t, incorporate user feedback, final polish before v1.0.0.
Status: 🚧 Next milestone - See v1.0-real-world-validation.md
Milestones by Slice:
- Slice 0: Single-crate architecture consolidation (Completed in v0.7)
- Slice 1: t2t integration & dogfooding
- Slice 2: Community feedback analysis
- Slice 3: Examples and documentation (informed by feedback)
- Slice 4: Performance optimization (data-driven)
- Slice 5: API polish (Moved to v0.7)
- Slice 6: v1.0.0 release preparation
Version 1.1: WebSocket Support
Goal: Implement full WebSocket support to match Playwright API parity.
Status: 🔮 Planned
Scope:
WebSocketprotocol objectWebSocketRoutefor interception and mocking- Event handling (
on_close,on_frame_received, etc.) - Integration with
PageandBrowserContext
Post-1.1: Future Enhancements
Potential enhancements include:
- Protocol Code Generation - Auto-generate Rust types from
protocol.yml - Sync API Wrapper - Optional blocking API for non-async codebases
- Advanced Tracing - Playwright inspector integration
- Custom Browser Builds - Support for custom Chromium/Firefox builds
- Performance Optimization - Connection pooling, caching
- WebDriver BiDi Support - When Playwright adds BiDi support
- Component Testing - Playwright component testing for Rust web frameworks
- Visual Regression Testing - Built-in visual diff capabilities
Guiding Principles
Throughout all versions, we maintain:
- API Consistency - Match playwright-python/JS/Java exactly
- Cross-Browser Parity - All features work on Chromium, Firefox, WebKit
- Test-Driven Development - Write tests first, comprehensive coverage
- Incremental Delivery - Ship working code at end of each version
- Production Quality - Code quality suitable for broad adoption
- Documentation First - Every feature documented with examples
- Community Focused - Responsive to feedback, clear contribution path
Release Strategy
Version Numbering
- 0.x.y - Pre-1.0, API may change between minor versions
- 1.0.0 - Stable API, ready for production
- 1.x.y - Minor versions add features, maintain backward compatibility
- 2.0.0+ - Major versions may break API (avoid if possible)
Publishing Cadence
- Version completions - Publish to crates.io as
0.x.0 - Bug fixes - Patch releases as
0.x.y - Version 0.6 complete - Publish
v0.6.0for early adopter feedback and real-world testing - Version 1.0 complete - Publish
v1.0.0after t2t integration and user validation
Communication
- GitHub Releases - Release notes for each version
- Changelog - Detailed change log in CHANGELOG.md
- Community Updates - Regular progress updates
How to Use This Roadmap
For Contributors:
- See current version for what's being worked on
- Check "Planned" versions for future opportunities
- Read implementation plans for detailed task breakdowns
For Users:
- Check version status to see what features are available
- Use version numbers to understand stability
- Follow GitHub releases for updates
For Planning:
- Roadmap is updated after each version completion
- Implementation plans created just-in-time (not all upfront)
- Versions may be adjusted based on learnings
Just-In-Time Planning Approach:
This roadmap provides high-level direction, but detailed implementation plans are created only when needed:
- Avoid over-planning - Details will change as you learn
- Stay agile - Respond to discoveries during implementation
- Focus on current work - Don't spend time planning Version 0.3 when Version 0.1 isn't done
- Learn and adapt - Each version informs the next
Implementation plans are created when the previous version is ~80% complete, allowing learnings to inform the next version's approach.
Last Updated: 2026-04-19