Version 0.7: Real-World Integration & Single Crate - Implementation Plan

December 30, 2025 · View on GitHub

Status:COMPLETE (Final release: v0.7.2)

Goal: Consolidate architecture and implement critical features for real-world integration to validate v1.0 readiness.

Releases:

  • v0.7.0: Single Crate Architecture (2025-11-16)
  • v0.7.1: Script & Style Injection APIs (2025-12-24) - Community contribution
  • v0.7.2: Community Features & Fixes (2025-12-24) - Storage state, debugging, logging

Note: Version closed early. Community contribution (PR #8 - Typed Evaluate API) warranted minor version bump to v0.8.0. Remaining items moved to v0.8 Implementation Plan.

Related:


Vertical Slices

Slice 1: Consolidation (v0.7.0)

Goal: Merge playwright-core functionality into playwright and publish.

Motivation: Issue #3 discovered during Folio integration revealed fundamental complexity in two-crate split. All official Playwright implementations use single packages.

Key Deliverables:

  • Move playwright-core code into playwright crate
  • Update dependencies and build scripts
  • Verify all tests pass in single-crate structure
  • Publish playwright-rs v0.7.0
  • Publish playwright-core v0.6.2 with deprecation notice
  • Update documentation to reflect single-crate usage

Technical Decisions:

  • Kept playwright-core as a shell for deprecation/redirect.
  • Updated driver handling to be internal to the main crate.

Slice 2: Script & Style Injection APIs (v0.7.1)

Status:COMPLETE (2025-12-24)

Goal: Add script and style injection capabilities to pages and contexts.

Key Deliverables:

  • BrowserContext.add_init_script() - Context-level script injection
  • Page.add_init_script() - Page-level script injection
  • Page.add_style_tag() - CSS injection with full Playwright API compatibility
  • AddStyleTagOptions struct with builder pattern (content, url, path)
  • Cross-browser test coverage (Chromium, Firefox, WebKit)
  • Error case testing
  • Published as v0.7.1

Technical Decisions:

  • Used options struct with builder pattern (matches existing codebase conventions)
  • Added file path support (bonus feature beyond original PR)
  • Comprehensive validation with clear error messages

Community Credit:

  • Original implementation by @douglasob (PR #7)
  • Code review and enhancements by maintainers

Slice 3: Community Features & Fixes (v0.7.2)

Status:COMPLETE (2025-12-24)

Goal: Address community-reported issues for storage state, debugging, and logging.

Key Deliverables:

  • Storage State Support (Issue #6)
    • BrowserContextOptions::storage_state() for inline StorageState
    • BrowserContextOptions::storage_state_path() for JSON file loading
    • New types: Cookie, LocalStorageItem, Origin, StorageState
    • Async file reading with proper error handling
    • Cross-browser compatibility (Chromium, Firefox, WebKit)
  • Debugging Support (Issue #5)
    • Page::pause() method for manual debugging with Playwright Inspector
    • BrowserContext::pause() protocol support
  • Logging Improvements (Issue #4)
    • Consistent tracing initialization across all integration tests
    • Protocol error visibility improvements
    • Better debugging experience during test development

Technical Decisions:

  • Storage state file reading happens in Browser::new_context_with_options before serialization (matches playwright-python)
  • Builder methods are mutually exclusive (setting inline clears path, vice versa)
  • Used #[serde(rename_all = "camelCase")] for automatic field name conversion
  • Protocol serialization fixed for methods with no arguments

Community Credit:

  • Issues reported and discussed by: @cbmarc, @SergeyBibikov

Deferred Items

The following planned slices were not implemented in v0.7 and have been moved to Version 0.8:

  • Slice 4: Remote Connection - BrowserType::connect() for CI/CD environments
  • Slice 5: Critical Feature Gaps - Locator API audit, WebSocket event handling
  • Slice 6: API Polish & DX - FilePayload, BrowserContext options, Route API improvements

Rationale: Community contribution PR #8 (Typed Evaluate API) was significant enough to warrant closing v0.7 at v0.7.2 and bumping to v0.8.0. The remaining real-world integration features continue in v0.8.


Last Updated: 2025-12-30