webdrop-bridge/README.md
claudi c9704efc8d
Some checks are pending
Tests & Quality Checks / Test on Python 3.11 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.12 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.11-1 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.12-1 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.10 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.11-2 (push) Waiting to run
Tests & Quality Checks / Test on Python 3.12-2 (push) Waiting to run
Tests & Quality Checks / Build Artifacts (push) Blocked by required conditions
Tests & Quality Checks / Build Artifacts-1 (push) Blocked by required conditions
feat: Update README with status change, enhanced configuration details, and improved installation instructions
2026-02-10 10:00:10 +01:00

12 KiB

WebDrop Bridge

Professional Qt-based desktop application for intelligent drag-and-drop file handling between web applications and desktop clients (InDesign, Word, Notepad++, etc.)

Status License Python

Overview

WebDrop Bridge is a sophisticated desktop bridge application that intercepts text-based drag-and-drop operations from embedded web applications and converts them into native file-drag operations recognized by professional desktop applications.

The Problem

Modern web applications can transmit file paths via drag-and-drop, but desktop applications expect native file handles. Traditional solutions fail because:

  • Browsers sandbox cross-origin drag-and-drop
  • Web apps can't access the file system directly
  • Native apps need OS-level file handles (CF_HDROP on Windows, NSFilenamesPboardType on macOS)

The Solution

WebDrop Bridge embeds a web application in a Qt container with full filesystem access, intelligently intercepting and converting drag operations at the OS boundary.

Features

  • Qt-based Architecture - Native Windows & macOS support via PySide6
  • Embedded Web App - QtWebEngine provides Chromium without browser limitations
  • Drag Interception - Converts text paths to native file operations
  • Path Whitelist - Security-conscious file system access control
  • Configuration Management - Profile-based settings with validation
  • Settings Dialog - Professional UI for path, URL, logging, and window configuration
  • Auto-Update System - Automatic release detection via Forgejo API
  • Professional Build Pipeline - MSI for Windows, DMG for macOS
  • Comprehensive Testing - Unit, integration, and end-to-end tests (80%+ coverage)
  • CI/CD Ready - GitHub Actions workflows included
  • Structured Logging - File-based logging with configurable levels

Quick Start

Requirements

  • Python 3.10+
  • Windows 10/11 or macOS 12+
  • 200 MB disk space (includes Chromium from PyInstaller)

Installation from Source

# Clone repository
git clone https://github.com/yourusername/webdrop-bridge.git
cd webdrop-bridge

# Create and activate virtual environment
python -m venv venv
source venv/bin/activate          # macOS/Linux
# venv\Scripts\activate.ps1       # Windows (PowerShell)
# venv\Scripts\activate.bat       # Windows (cmd.exe)

# Install dependencies
pip install -r requirements.txt

# Run application
python -m webdrop_bridge.main

Development Setup

# Install development dependencies
pip install -r requirements-dev.txt

# Run tests
pytest tests -v

# Run all quality checks (lint, type, format)
tox

# Build installers
python build/scripts/build_windows.py          # Windows MSI
bash build/scripts/build_macos.sh              # macOS DMG

Project Structure

webdrop-bridge/
├── src/webdrop_bridge/          # Main application package
│   ├── core/                    # Core logic (drag interception, config)
│   ├── ui/                      # UI components (main window, widgets)
│   ├── utils/                   # Utilities (logging, validation)
│   ├── main.py                  # Entry point
│   └── config.py                # Configuration management
├── tests/
│   ├── unit/                    # Unit tests
│   ├── integration/             # Integration tests
│   ├── fixtures/                # Test data and fixtures
│   └── conftest.py              # Pytest configuration
├── build/
│   ├── windows/                 # Windows-specific build configs
│   ├── macos/                   # macOS-specific build configs
│   └── scripts/                 # Build automation scripts
├── webapp/                      # Embedded web application
├── resources/
│   ├── icons/                   # Application icons
│   └── stylesheets/            # Qt stylesheets
├── docs/                        # Documentation
├── pyproject.toml               # Modern Python packaging
├── pytest.ini                   # Test configuration
├── tox.ini                      # Test automation
└── README.md                    # This file

Architecture

┌────────────────────────────────────────┐
│  Qt Main Window (PySide6)              │
│  ┌──────────────────────────────────┐  │
│  │  QtWebEngineView                 │  │
│  │  ┌────────────────────────────┐  │  │
│  │  │  Web Application (HTML/JS) │  │  │
│  │  │  • Drag with file paths    │  │  │
│  │  │  • Native drag operations  │  │  │
│  │  └────────────────────────────┘  │  │
│  └──────────────────────────────────┘  │
│         ↓ Drag Leave Event              │
│  ┌──────────────────────────────────┐  │
│  │  DragInterceptor                 │  │
│  │  • Validates path (whitelist)    │  │
│  │  • Creates QUrl + QMimeData      │  │
│  │  • Starts native file drag       │  │
│  └──────────────────────────────────┘  │
└────────────────────────────────────────┘
         ↓ Native File Drag
   ┌─────────────────┐
   │ InDesign/Word   │
   │ (receives file) │
   └─────────────────┘

Configuration

WebDrop Bridge supports two configuration methods:

Launch the application and access the Settings menu to configure:

  • Paths Tab - Add/remove allowed root directories
  • URLs Tab - Configure allowed web URLs (whitelist mode)
  • Logging Tab - Set log level and file location
  • Window Tab - Configure window dimensions
  • Profiles Tab - Save/load/export-import configuration profiles

Profiles are saved in ~/.webdrop-bridge/profiles/

2. Environment Variables

Create a .env file in the project root. Available settings:

# Application
APP_NAME=WebDrop Bridge
APP_VERSION=1.0.0

# Paths (comma-separated)
ALLOWED_ROOTS=Z:/,C:/Users/Public

# Web URLs (empty = no restriction, items = kiosk mode)
ALLOWED_URLS=

# Interface
WEBAPP_URL=file:///./webapp/index.html
WINDOW_WIDTH=1024
WINDOW_HEIGHT=768

# Logging
LOG_LEVEL=INFO
ENABLE_LOGGING=true

Testing

WebDrop Bridge includes comprehensive test coverage with unit, integration, and end-to-end tests.

# Run all tests
pytest tests -v

# Run with coverage report
pytest tests --cov=src/webdrop_bridge --cov-report=html

# Run specific test categories
pytest tests/unit -v                    # Unit tests only
pytest tests/integration -v             # Integration tests only

# Run specific test
pytest tests/unit/test_validator.py -v

# Run tests matching a pattern
pytest tests -k "config" -v

Test Coverage:

  • Current target: 80%+
  • Coverage report: htmlcov/index.html

Integration tests cover:

  • Drag-and-drop workflow
  • Update flow and release detection
  • End-to-end application scenarios

Auto-Update System

WebDrop Bridge includes an intelligent auto-update system that:

  • Automatic Detection: Periodically checks Forgejo/GitHub releases API
  • Smart Caching: Avoids redundant network calls with smart caching
  • User Notification: Alerts users of available updates via UI
  • Release Notes: Displays release notes and changes
  • Safe Deployment: Only triggers on newer versions

The update system is fully integrated with the application and runs in the background without blocking the UI.

For technical details, see docs/ARCHITECTURE.md.

Changelog

See CHANGELOG.md for release notes.

Building Installers

Windows MSI Installer

# Simple build (creates standalone .exe)
python build/scripts/build_windows.py

# Build with MSI installer
python build/scripts/build_windows.py --msi

# Build and sign executable
python build/scripts/build_windows.py --sign

Output:

  • Standalone executable: build/dist/windows/WebDropBridge.exe (~195 MB)
  • Optional MSI installer: build/dist/windows/WebDropBridge.msi
  • SHA256 checksum: build/dist/windows/WebDropBridge.exe.sha256

macOS DMG Installer

# Build DMG (requires macOS)
bash build/scripts/build_macos.sh

# Build with code signing
SIGN_APP=true bash build/scripts/build_macos.sh

# Build with notarization
NOTARIZE_APP=true bash build/scripts/build_macos.sh

Output:

  • DMG installer: build/dist/macos/WebDropBridge.dmg
  • App bundle: build/dist/macos/WebDropBridge.app

Creating Releases

For Forgejo/GitHub releases:

# Windows - Create release with executable
powershell -ExecutionPolicy Bypass -File build/scripts/create_release.ps1

# macOS - Create release with DMG
bash build/scripts/create_release.sh

Development Workflow

  1. Create feature branch

    git checkout -b feature/my-feature
    
  2. Write tests first

    pytest tests/unit/test_my_feature.py
    
  3. Implement feature

    # Edit src/webdrop_bridge/...
    
  4. Run quality checks

    tox -e lint,type  # Run linting and type checking
    
  5. Submit pull request

Troubleshooting

Application won't start

  • Ensure Python 3.10+ is installed
  • Check logs/webdrop_bridge.log for errors
  • Verify all dependencies: pip list

Drag-and-drop not working

  • Verify paths in .env are valid
  • Check ALLOWED_ROOTS whitelist includes your test directory
  • On macOS, check System Preferences → Security & Privacy → Accessibility

Build errors

  • Clean build directory: rm -rf build/temp build/dist
  • Reinstall dependencies: pip install --force-reinstall -r requirements.txt
  • Check platform-specific requirements (Windows SDK, Xcode for macOS)

Platform Support

Platform Version Status Notes
Windows 10, 11 Full Tested on x64
macOS 12, 13, 14 Full Intel & Apple Silicon
Linux Ubuntu 22.04+ ⚠️ Partial Limited testing

Contributing

We welcome contributions! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Write/update tests
  4. Submit a pull request
  5. Ensure CI passes

See CONTRIBUTING.md for detailed guidelines.

License

MIT License - see LICENSE file for details

Credits

  • Built with PySide6
  • Inspired by professional desktop integration practices
  • Special thanks to the Qt community

Development Status

Current Phase: Phase 4.3 - Advanced Configuration & Testing

Completed:

  • Phase 1: Core Components (Validator, Config, Drag Interceptor, Main Window)
  • Phase 2: UI Implementation (Settings Dialog, Main Window UI Components)
  • Phase 3: Build & Distribution (Windows MSI, macOS DMG, Release Scripts)
  • Phase 4.1: Update System (Auto-update, Forgejo API integration)
  • Phase 4.2: Web App Improvements (Modern UI, Drag-drop testing)
  • Phase 4.3: Advanced Configuration (Profiles, Validation, Settings UI)

In Progress/Planned:

  • Phase 4.4: Performance optimization & security hardening
  • Phase 5: Release candidates & final testing
  • v1.0: Stable Windows & macOS release

Roadmap

  • Core drag-drop functionality
  • Configuration management with profiles
  • Auto-update system
  • Professional build pipeline
  • Comprehensive test suite
  • Performance benchmarking & optimization
  • Security audit & hardening
  • v1.1 - Advanced filtering and extended logging
  • v1.2 - API for custom handlers
  • v2.0 - Plugin architecture

Support


Development Phase: Pre-Release Phase 4.3 | Last Updated: February 2026 | Python: 3.10+ | Qt: PySide6 (Qt 6)