Your plugin sends bytes
WooCommerce, Joomla, PrestaShop or any connector posts a PDF, image, ESC/POS, ZPL or other payload.
Pridge is the missing bridge between your software (apps, websites, servers and business systems) and the printer sitting in your office: a lightweight PHP + SQLite server, a secure desktop client, and a simple raw-print API.
Your application never needs direct access to the office network. The server queues the job; the client safely pulls it from inside.
WooCommerce, Joomla, PrestaShop or any connector posts a PDF, image, ESC/POS, ZPL or other payload.
The PHP server authenticates the endpoint token, stores the original body and tracks the queue state in SQLite.
The desktop client authenticates, heartbeats, reserves one pending job and decodes its binary-safe base64 payload.
The job is sent to the mapped local printer and reported as printing, printed or failed, with history preserved.
Host the queue almost anywhere, then install the client on the computer that can see your local printers.
A plain PHP and SQLite print job broker made for shared hosting and simple self-hosting.
A secure desktop bridge that maps remote endpoints to installed local printers and runs quietly in the background.
The ecosystem starts with Dolibarr and TakePOS, with room prepared for shops, ERPs, POS systems and custom applications.
Connect Dolibarr Receipt Printers and TakePOS to Pridge without patching Dolibarr core. Raw ESC/POS output is captured through a pridge:// stream wrapper and forwarded to Pridge Server over HTTPS.
The repository structure is ready for WooCommerce, ERP, POS, SDK, driver and community integrations as the Pridge ecosystem grows.
Simple HTTP, bearer tokens and predictable status transitions. Pick an endpoint to see what it does and copy a working example.
Receives the original raw print payload for an authenticated virtual printer endpoint.
curl -X POST "https://print.example.com/api/plugin/jobs" \
-H "Authorization: Bearer ENDPOINT_TOKEN" \
-H "Content-Type: application/octet-stream" \
-H 'X-PrintBridge-Metadata: {"source":"woocommerce","order_id":"1001"}' \
--data-binary @receipt.bin
{
"job_id": 123,
"status": "pending"
}
The essential instructions are built into this page. The repository links remain the source of truth for the full developer guides.
Pridge has two independent components. Put the server on HTTPS hosting and run the client on a computer that can see the actual printer.
Upload the PHP project, make storage writable and create the first administrator.
An endpoint accepts jobs. A client pulls jobs. Assign one or more endpoints to the client.
Add the server URL and client token, then map each remote endpoint to an installed local printer.
Post the document or printer bytes to /api/plugin/jobs using the endpoint token.
The server is intended to run directly from a cPanel subdomain folder or from a stricter custom public document root.
storage directorymail() support for password recoverypublic_html/printbridge # or the folder created for: printbridge.yourdomain.com
Upload the complete repository to that folder. The root index.php and .htaccess handle requests without requiring the document root to point at public/.
storage/ storage/database/
The SQLite database is created automatically at storage/database/printbridge.sqlite.
Open the site. When no administrator exists, setup redirects to /setup. Create the first account with a password of at least 12 characters.
For end users, choose a packaged release. The destination computer does not need Python, pip or manually installed packages.
Choose the Native or PyInstaller package for Windows or macOS from GitHub Releases.
The client can run with a visible settings interface or quietly in the background after configuration.
The client discovers printers installed in the operating system and sends jobs through the platform print API.
python3 -m pip install -e .Every server profile has independent mappings and worker controls, so one desktop client can serve several Pridge Server instances.
A connector needs only a server URL, one endpoint token and the raw bytes to print.
POST /api/plugin/jobs
Authorization: Bearer ENDPOINT_TOKEN
Content-Type: application/octet-stream
X-PrintBridge-Metadata: {"source":"woocommerce","order_id":"1001"}
RAW_PRINT_PAYLOAD_BYTESapplication/octet-stream.X-PrintBridge-Metadata header.The protocol is language-neutral. A replacement client can be written in C++, Rust, C#, Go or any environment that can make HTTPS requests and use the local print system.
while running:
authenticate_if_needed()
maybe_send_heartbeat()
job = reserve_next_job()
if not job:
sleep(poll_interval)
continue
try:
mark_printing(job.id)
payload = base64_decode(job.payload_base64)
send_original_bytes_to_mapped_printer(payload)
mark_printed(job.id)
except Exception as error:
mark_failed(job.id, safe_message(error))The agent should never log full client tokens, session tokens, passwords or raw print payloads.
storage, app and views remains blocked.storage/database/printbridge.sqlite and the complete storage/ directory.printbridge.sqlite through HTTP. Treat it as application data containing queue and configuration history.The client repository defines two independent packaged release targets:
Both include Python, runtime dependencies, pywebview files, frontend HTML/CSS/JavaScript, icons, assets, the license and additional terms. End users do not install Python.
# Windows PowerShell ./scripts/build-windows.ps1 -Variant All -SelectOutputDir # macOS bash scripts/build-macos.sh All --select-output-dir
This stays entirely in your browser. Nothing is sent anywhere.
Enter a sample base URL and choose the request you want to build.
Copy it, replace the placeholders and run it in your terminal.
curl -X POST "https://print.example.com/api/plugin/jobs" \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/octet-stream" \ --data-binary @document.bin
Everything you need to decide whether Pridge fits your setup.
No. The server is designed for ordinary PHP hosting with PDO SQLite support, HTTPS and a writable storage directory.
Not when using packaged releases. Native and PyInstaller packages include the required runtime and dependencies.
Yes. The server preserves raw request bytes. The client forwards them to the mapped local printer through the operating system.
Yes. Each server profile has independent tokens, endpoint mappings, polling intervals, heartbeat intervals and worker controls.
The client reports the job as failed with a safe error message. Failed jobs remain visible in the active queue for review or retry logic.
Yes. The server and client are both GPL-3.0-or-later licensed, with additional terms in their repositories.
Start from the source repositories, open the built-in quick-start guide, or use GitHub Issues to report a problem or propose a feature.