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.
  • Python 87.7%
  • Shell 4%
  • JavaScript 3.8%
  • PowerShell 3%
  • HTML 1%
  • Other 0.5%
Find a file
claudi 5b00c5a360
Some checks failed
Tests & Quality Checks / Test on Python 3.11 (push) Has been cancelled
Tests & Quality Checks / Test on Python 3.12 (push) Has been cancelled
Tests & Quality Checks / Test on Python 3.11-1 (push) Has been cancelled
Tests & Quality Checks / Test on Python 3.12-1 (push) Has been cancelled
Tests & Quality Checks / Test on Python 3.10 (push) Has been cancelled
Tests & Quality Checks / Test on Python 3.11-2 (push) Has been cancelled
Tests & Quality Checks / Test on Python 3.12-2 (push) Has been cancelled
Tests & Quality Checks / Build Artifacts (push) Has been cancelled
Tests & Quality Checks / Build Artifacts-1 (push) Has been cancelled
bump to version 0.9.9
2026-08-07 10:52:23 +02:00
.github fix 2026-07-08 14:16:53 +02:00
.tmp-update-check feat: Enhance update manager to handle UTF-8 BOM and improve asset resolution logic 2026-03-12 11:00:43 +01:00
.vscode prepare using Agents.md 2026-07-08 07:26:50 +02:00
build feat: update macOS build process to support Universal2 architecture and improve documentation 2026-08-02 14:18:47 +02:00
docs feat: update macOS build process to support Universal2 architecture and improve documentation 2026-08-02 14:18:47 +02:00
resources feat: add Badisch (Freiburg/Schwarzwald) translation and update tests 2026-08-07 10:43:08 +02:00
src/webdrop_bridge bump to version 0.9.9 2026-08-07 10:52:23 +02:00
tests feat: add Badisch (Freiburg/Schwarzwald) translation and update tests 2026-08-07 10:43:08 +02:00
webapp cleanup 2026-02-19 15:16:05 +01:00
.env.example bump to version 0.9.9 2026-08-07 10:52:23 +02:00
.gitignore prepare using Agents.md 2026-07-08 07:26:50 +02:00
.gitkeep Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
Agents.md feat: add native video player support and related settings 2026-08-04 13:13:43 +02:00
CHANGELOG.md bump to version 0.9.9 2026-08-07 10:52:23 +02:00
config.example.json feat: add native video player support and related settings 2026-08-04 13:13:43 +02:00
CONFIG_README.md feat: persist zoom 2026-07-27 13:26:28 +02:00
CONTRIBUTING.md remove python 3.9 as allowed version 2026-07-03 11:23:23 +02:00
DEVELOPMENT_PLAN.md remove python 3.9 as allowed version 2026-07-03 11:23:23 +02:00
LICENSE Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
Makefile Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
pyproject.toml feat: update macOS build process to support Universal2 architecture and improve documentation 2026-08-02 14:18:47 +02:00
pytest.ini feat: dragStart feedback in Statustleiste 2026-07-03 10:14:31 +02:00
QUICKSTART.md feat: Update documentation for version 0.9.1, including changelog, configuration, and package manager support 2026-04-16 08:38:41 +02:00
README.md upt 2026-07-03 12:57:59 +02:00
requirements-dev.txt feat: Add icon generation script and update README with new functionality 2026-04-14 17:34:31 +02:00
requirements.txt feat: update macOS build process to support Universal2 architecture and improve documentation 2026-08-02 14:18:47 +02:00
setup.py Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
test_msi.py Fix WindowsBuilder executable path and enhance MSI linking error reporting 2026-02-18 18:20:57 +01:00
tox.ini Add initial project structure and documentation 2026-01-28 10:48:36 +01:00
webdrop_bridge.code-workspace Add initial project structure and documentation 2026-01-28 10:48:36 +01:00

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 - Professional cross-platform desktop app via PySide6 for Windows and macOS
  • ✅ Embedded Web App - QtWebEngine provides Chromium without browser limitations
  • ✅ Drag Interception - Converts text paths to native file operations
  • ✅ Status Bar Feedback - Live status messages during drag/open operations
  • ✅ Path Whitelist - Security-conscious file system access control
  • ✅ Configuration Management - JSON config, setup save/load, import/export, and validation
  • ✅ Runtime Branding - Switch branding templates and packaged variants without code changes
  • ✅ Multilingual UI - Built-in translations for English, German, French, Italian, Russian, and Chinese
  • ✅ Settings Dialog - Language, branding, web source, path, URL, logging, and window configuration
  • ✅ Adaptive Input Handling - Optional touch detection override for hybrid/mobile-like devices
  • ✅ Window Geometry Persistence - Optional automatic save of window size on exit
  • ✅ Auto-Update System - Automatic release detection via Forgejo API
  • ✅ Professional Build Pipeline - MSI for Windows, DMG for macOS
  • ✅ Comprehensive Testing - Unit and integration coverage across core modules
  • ✅ Continuous Testing - Automated CI validation
  • ✅ Structured Logging - Native file logging and optional WebView JS console forwarding

Quick Start

Requirements

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

Option 1: Package Manager (Recommended for most users)

# Windows - Chocolatey
choco install webdrop-bridge
choco upgrade webdrop-bridge  # Update when new version available
# macOS - Homebrew (with custom tap)
brew tap HIM-public/tap https://git.him-tools.de/HIM-public/homebrew-tap
brew install --cask webdrop-bridge

brew update
brew upgrade --cask webdrop-bridge  # Update to latest version

Option 2: Direct wget (if you know the version)

# Replace X.Y.Z with a release version (e.g., 0.9.2)
wget https://git.him-tools.de/HIM-public/webdrop-bridge/releases/download/vX.Y.Z/WebDropBridge-X.Y.Z-win-x64.msi

# Example for v0.9.2:
wget https://git.him-tools.de/HIM-public/webdrop-bridge/releases/download/v0.9.2/WebDropBridge-0.9.2-win-x64.msi

Option 3: Automated script (auto-detects platform)

# Windows (PowerShell)
.\build\scripts\download_release.ps1

# macOS / Linux  
./build/scripts/download_release.sh

For more installation options and details, see QUICKSTART.md and PACKAGE_MANAGER_SUPPORT.md

For multi-brand packaging and release workflows, see BRANDING_AND_RELEASES.md.

Installation from Source

# Clone repository
git clone https://git.him-tools.de/HIM-public/webdrop-bridge.git
cd webdrop-bridge

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

# Install dependencies
pip install -r requirements.txt
pip install -e .

# Run application
python -m webdrop_bridge.main

Development Setup

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

# Run tests
pytest tests -v

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

# Build installers
python build/scripts/build_windows.py --msi    # Windows MSI

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/
│   ├── brands/                  # Runtime branding templates
│   ├── scripts/                 # Build/release automation scripts
│   ├── macos/                   # macOS packaging assets
│   └── chocolatey/              # Chocolatey package definitions
├── 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

Documentation

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 persisted JSON configuration plus optional bootstrap environment defaults.

Launch the application and access the Settings menu to configure:

  • General Tab - Select the UI language or follow the system locale automatically
  • Branding Tab - Switch, import, export, and preview runtime branding templates
  • Web Source Tab - Configure the embedded web application URL
  • Paths / URLs / Logging / Window Tabs - Control filesystem access, allowed sites, log output, and initial window size
  • Setups Tab - Save/load named local setups and import/export complete configurations

Saved settings are written to the brand-specific application config directory as config.json.

2. Bootstrap Environment Variables (.env)

A .env file is still supported for local development and branded packaged defaults. It is used when no JSON config exists yet.

APP_NAME=WebDrop Bridge
BRAND_ID=webdrop_bridge
WEBAPP_URL=https://dev.agravity.io/
ALLOWED_ROOTS=Z:/,C:/Users/Public
ALLOWED_URLS=
LANGUAGE=auto
LOG_LEVEL=INFO
WINDOW_WIDTH=1024
WINDOW_HEIGHT=768
AUTO_SAVE_WINDOW_GEOMETRY=true
DISABLE_TOUCH_DEVICE_DETECTION=false
ENABLE_LOGGING=true
ENABLE_JS_CONSOLE_LOGGING=true
ENABLE_CHECKOUT=false

For the full JSON structure and branding workflow, see CONFIG_README.md and BRANDING_AND_RELEASES.md.

Testing

WebDrop Bridge includes comprehensive test coverage with unit and integration 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
  • Channel/Manifest Aware: Supports update channels and release manifest based rollout
  • 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.

Building Installers

Windows MSI Installer

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

# Build with code signing (requires certificate)
python build/scripts/build_windows.py --msi --code-sign

Output:

  • Portable executable: build/dist/windows/webdrop_bridge/WebDropBridge/WebDropBridge.exe
  • Professional MSI installer: build/dist/windows/webdrop_bridge/WebDropBridge-<version>-win-x64.msi
  • SHA256 checksum: build/dist/windows/webdrop_bridge/WebDropBridge-<version>-win-x64.msi.sha256

macOS DMG Installer

bash build/scripts/build_macos.sh

Output:

  • Application bundle: build/dist/macos/webdrop_bridge/WebDropBridge.app
  • DMG installer: build/dist/macos/webdrop_bridge/WebDropBridge-<version>-macos-universal.dmg
  • SHA256 checksum: build/dist/macos/webdrop_bridge/WebDropBridge-<version>-macos-universal.dmg.sha256

Creating Releases

For Forgejo/GitHub releases:

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

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 the application log in your platform-specific app data directory
  • 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 Primary target with MSI packaging and update support
macOS 12, 13, 14 ✅ Supported Universal DMG builds for Intel and Apple Silicon

Note: Release candidates currently target both Windows and macOS. For branded production releases, validate signing assets and installer behavior on the target platform before shipping.

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

Support


Development Phase: Phase 5 Release Candidates | Last Updated: July 3, 2026 | Current Version: 0.9.2 | Python: 3.10+ | Qt: PySide6 (Qt 6)