Skip to main content
The palyra-browserd service is a specialized headless browser orchestration engine built on Chromium. It provides a gRPC interface for the Palyra daemon and CLI to perform web automation, content extraction, and session-based browsing with strong security boundaries and persistence.

System Overview

The service operates as a standalone gRPC server (browser.proto) that manages a pool of Chromium instances via the headless_chrome crate. It implements a session-based model where each session maintains its own isolated browser context, SOCKS5 proxy for network validation, and optional encrypted state persistence.

Code-to-Entity Mapping: Service Entry

System NameCode EntityDescription
gRPC ServiceBrowserServiceImplImplements BrowserService trait for gRPC crates/palyra-browserd/src/transport/grpc/service.rs#9-11
Runtime StateBrowserRuntimeStateCentral coordinator for sessions, profiles, and configuration crates/palyra-browserd/src/support/tests.rs#80-82
Engineheadless_chromeRust wrapper for the Chrome DevTools Protocol (CDP) crates/palyra-browserd/src/lib.rs#36-40
State StorePersistedStateStoreHandles encrypted filesystem persistence for profiles crates/palyra-browserd/src/support/tests.rs#12-16
Sources: crates/palyra-browserd/src/lib.rs#36-40, crates/palyra-browserd/src/transport/grpc/service.rs#9-11, crates/palyra-browserd/src/support/tests.rs#9-16

Session Lifecycle and Orchestration

Sessions are the primary unit of isolation. When a session is created via create_session, the service initializes a ULID-based session ID, applies a SessionBudget for resource limits, and optionally restores state from the PersistedStateStore.

Session Creation Flow

The create_session handler performs principal validation, profile resolution, and budget clamping before spawning a browser instance. Sources: crates/palyra-browserd/src/transport/grpc/service.rs#29-91, crates/palyra-browserd/src/transport/grpc/service.rs#107-165

Network Security and Target Validation

To prevent SSRF and unauthorized internal network access, palyra-browserd implements a multi-layered validation strategy for every URL navigation.

URL Validation Logic

The validate_target_url_blocking function ensures that requested URLs conform to security policies before Chromium is allowed to navigate.
  1. DNS Resolution: Resolves the host to IP addresses crates/palyra-browserd/src/security/target_validation.rs#184-206.
  2. Netguard Check: Uses palyra_common::netguard to identify private or local IP ranges (e.g., 127.0.0.1, 10.0.0.0/8) crates/palyra-browserd/src/security/target_validation.rs#10-17.
  3. Policy Enforcement: Unless allow_private_targets is explicitly set, navigation to local/private IPs is blocked crates/palyra-browserd/src/security/target_validation.rs#195-203.
  4. SOCKS5 Proxying: Each session can spawn a ChromiumSessionProxy that enforces these rules at the socket level crates/palyra-browserd/src/engine/chromium.rs#71-97.

DNS Validation Cache

The service maintains a DnsValidationCache with LRU eviction to prevent repeated lookups and handle NXDOMAIN (negative) caching crates/palyra-browserd/src/security/target_validation.rs#27-42. Sources: crates/palyra-browserd/src/security/target_validation.rs#10-17, crates/palyra-browserd/src/security/target_validation.rs#184-206, crates/palyra-browserd/src/engine/chromium.rs#71-97, crates/palyra-browserd/src/security/target_validation.rs#27-42

Download Management

Downloads are executed within a DownloadSandboxSession. This system prevents disk exhaustion and mitigates malware risks through extension and MIME-type filtering.

Download Sandbox Properties

Entity Space: Download Handling

FunctionRole
capture_download_artifact_for_clickTriggers download via element click and monitors result crates/palyra-browserd/src/domain/downloads.rs#72-78
store_generated_artifactPersists raw bytes (e.g., PDF exports) into the sandbox crates/palyra-browserd/src/domain/downloads.rs#96-104
sanitize_download_file_namePrevents path traversal in filenames crates/palyra-browserd/src/domain/downloads.rs#121
Sources: crates/palyra-browserd/src/domain/downloads.rs#28-36, crates/palyra-browserd/src/lib.rs#147-162, crates/palyra-browserd/src/domain/downloads.rs#72-104

Persistence and State Store

The PersistedStateStore manages long-lived browser profiles, including cookies, local storage, and session snapshots.

Security and Encryption

Data Layout

State is stored in the directory defined by PALYRA_BROWSERD_STATE_DIR crates/palyra-browserd/src/lib.rs#122. Sources: crates/palyra-browserd/src/lib.rs#122-145, crates/palyra-browserd/src/lib.rs#46-47

CLI Integration

The Palyra CLI provides a comprehensive suite of commands to manage the browser service lifecycle and perform interactive automation.

Browser Service Management

The CLI can supervise the palyra-browserd binary, handling background startup and health monitoring.
CLI CommandCode ImplementationAction
palyra browser startrun_browser_startSpawns palyra-browserd as a detached process crates/palyra-cli/src/commands/browser.rs#170-172
palyra browser statusrun_browser_statusChecks gRPC and HTTP health endpoints crates/palyra-cli/src/commands/browser.rs#167-169
palyra browser openrun_browser_openCreates a session and navigates to a URL crates/palyra-cli/src/commands/browser.rs#174-195

Interactive Commands

Commands like click, type, and snapshot map directly to browser.proto gRPC calls. For example, palyra browser click --selector ".btn" invokes the gRPC Click method on the running service crates/palyra-cli/src/commands/browser.rs#219-227. Sources: crates/palyra-cli/src/commands/browser.rs#167-227, crates/palyra-cli/src/args/browser.rs#4-28