Skip to main content

Local bridge for Runyx extension

Project description

Runyx Project Overview

Steps Screen
An easy pattern to scrap for beginners and for low-hanging fruit automations.

This repository contains Runyx, a browser automation platform composed of a Chromium extension and a local Python runtime used for development, testing, and orchestration.

At a high level:

  • The Chromium extension provides the Automation Studio UI and executes automations in the browser.
  • The Runyx Bridge is a lightweight local server (HTTP + WebSocket) used during development.
  • The Runyx App (Runner) is an object-oriented Python entrypoint that:
    • starts the Bridge
    • launches Edge or Chrome via Selenium (non-headless)
    • loads the extension
    • imports a project JSON on startup (from extension/local/import.json)
    • activates the extension via hotkey

Each component can be used independently, but together they form the full local Runyx development experience.


Repository structure

/
extension/          # Chromium extension (runtime + UI)
runyx_bridge/       # Python bridge + runner (MVP)
README.md           # <- this file

Each main folder has its own README with deeper details:

  • extension/README.md - extension usage and UI
  • runyx_bridge/README.md - Python bridge and runner details
  • examples/README.md

This root README explains how everything fits together.


Core components

1) Chromium extension

The extension contains:

  • Runtime
    • Service Worker
    • Content Script
    • Bridge between UI and page context
  • Automation Studio UI
    • Built with Next.js
    • Embedded into the extension
    • Also available inside DevTools

The extension is responsible for:

  • Managing workflows, triggers, and steps
  • Executing DOM actions (click, type, wait, extract, screenshot, etc.)
  • Collecting artifacts (cookies, page source, screenshots)
  • Communicating with Runyx Bridge (HTTP + WebSocket)

Load it locally via:

chrome://extensions -> Developer mode -> Load unpacked -> extension/

For Edge:

edge://extensions -> Developer mode -> Load unpacked -> extension/

The UI can be opened via:

  • Extension icon
  • Ctrl + Shift + F
  • DevTools tab ("Runyx")

2) Runyx Bridge (MVP)

Runyx Bridge is a development-only Python library that exposes:

  • HTTP server
    • Receives data from the extension
    • Endpoints are defined via decorators
    • CORS is fully open (by design)
  • WebSocket server
    • Used only as a trigger source
    • Emits events that start workflows in the extension

Key characteristics:

  • Minimal by design (MVP)
  • No authentication
  • No persistence
  • No production guarantees

It exists solely to support local development and testing.

See full details in runyx_bridge/README.md.


3) Runyx App (Python Runner)

The Runyx App is the orchestration layer that ties everything together.

It is responsible for:

  1. Starting Runyx Bridge (HTTP + WebSocket)
  2. Launching Edge or Chrome using Selenium in non-headless mode
  3. Loading the Runyx extension (unpacked)
  4. Importing a project JSON from extension/local/import.json
  5. Sending the activation hotkey (Ctrl + Shift + F)
  6. Keeping the environment alive (server mode) or exiting cleanly

This makes it possible to:

  • Start the entire Runyx stack with a single Python script
  • Test the extension without manual browser setup
  • Automate local development flows

Typical local development flow

  1. Start Runyx using the Python runner
  2. Edge/Chrome opens normally (non-headless)
  3. The Runyx extension is loaded automatically
  4. The project JSON is imported into storage
  5. The extension UI is activated via hotkey
  6. Automation Studio is ready to use
  7. HTTP + WebSocket endpoints are available locally

Example: minimal runner usage

from runyx_bridge import RunyxApp

app = RunyxApp(
    extension_path="./extension",
    import_project_path="./my-first-project-project.json",
    require_import=True,
    requests=True,
    websocket=True,
    on_background=False,  # server mode
)

app.start()

Using Runyx Bridge standalone

The Bridge can also be used without Selenium if you prefer to:

  • open Edge or Chrome manually
  • load the extension yourself
  • trigger workflows via WebSocket
  • receive data via HTTP

Example:

from runyx_bridge import run, receive

@receive("/receive")
def handle_data(payload, meta):
    print(payload)
    return "ok"

run(requests=True, websocket=True, on_background=False)

How communication works (high level)

  • WebSocket
    • External systems Bridge Extension
    • Used only for triggers
  • HTTP
    • Extension Bridge
    • Used for screenshots, cookies, page source, extracts, etc.

The extension always remains the execution authority.


Installation (Python side)

This project is intended to be used in editable / development mode.

Using Poetry (recommended):

poetry install
poetry run pytest

Or using pip:

pip install -e .

Important notes

  • Runyx Bridge is not production software
  • CORS is fully open intentionally
  • Selenium runs Edge or Chrome non-headless
  • Hotkey activation depends on OS window focus
  • The extension can also be used manually without the runner
  • Project data is imported on startup from extension/local/import.json

Documentation map

  • README.md (this file) - project overview
  • extension/README.md - extension usage and UI
  • extension/documentation/README.md - architecture and internals
  • runyx_bridge/README.md - Python bridge and runner details
  • examples/README.md -> runnable bridge/runner examples

Project goal

Provide a clear, minimal, and hackable local environment for developing and testing browser automations using the Runyx Chromium extension.

Nothing more, nothing less.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

runyx-1.0.3.tar.gz (16.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

runyx-1.0.3-py3-none-any.whl (17.4 kB view details)

Uploaded Python 3

File details

Details for the file runyx-1.0.3.tar.gz.

File metadata

  • Download URL: runyx-1.0.3.tar.gz
  • Upload date:
  • Size: 16.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.2 Windows/11

File hashes

Hashes for runyx-1.0.3.tar.gz
Algorithm Hash digest
SHA256 079be1f84718c0636963980a96246e47cc818494bb47912312589a11d09a7291
MD5 6f7943a9ee6dc0bb05554a1177073c61
BLAKE2b-256 1a5336c5732a30598576a43d0defd247623381d8c6ac23e7fc6b65b5931268be

See more details on using hashes here.

File details

Details for the file runyx-1.0.3-py3-none-any.whl.

File metadata

  • Download URL: runyx-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 17.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.2 Windows/11

File hashes

Hashes for runyx-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 376a2c9a0dd9f522b426e2f0fc06a52deb950da5bb39db53895be4ff7090e368
MD5 e57783ccb103e32220b181cc9500673b
BLAKE2b-256 a7efc84e7e3bb1cbacae7b68c76b418a6da8a7eabe96e27ac92c3bb0b6eba8e5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page