Automation-grade control for live QGIS.
HotWings runs inside QGIS and exposes a localhost-only bridge for Python execution, screenshots, messaging, and plugin management. It is designed for engineers who need deterministic outcomes with auditability and safety.
curl -H "Authorization: Bearer <token>" \
http://127.0.0.1:45454/status
curl -H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"code": "print(QgsProject.instance())"}' \
http://127.0.0.1:45454/exec
Designed for production
- Safe main-thread execution.
- Rolling logs + message outbox.
- Plugin reload controls.
- Screenshot pipeline for automation.
Built on first principles
Determinism
Every request is executed on the QGIS UI thread so actions are predictable and API safe.
Auditability
Size-based rolling logs and attachment storage give you a clear activity trail.
Local-first security
Localhost binding + token auth by default. No cloud dependencies.
Operator control
Human messages and clipboard capture keep your team in the loop.
Core capabilities
Live Python runtime
Send exec/eval requests into the current QGIS session with full access to QgsProject, layers, and UI.
Local-only security
Bind to 127.0.0.1, require a token, and keep your automation entirely on your machine.
Audit-ready logging
Every request is logged locally with size-based rollovers for recent activity review.
Outbox messages
Send notes or screenshots from QGIS to Codex via a clean message queue API.
Plugin management
Create or reload plugins by writing to the HotWings managed directory and calling enable/reload.
Screenshot pipeline
Capture the canvas or UI with cropping, scaling, and format controls for automation pipelines.
Clear architecture, predictable behavior
HotWings keeps a strict boundary: external tools talk to a localhost server, which marshals work onto the QGIS main thread. You get determinism without unsafe background mutations.
- HTTP bridge listens on localhost with a rotating token.
- Requests are queued and executed on the UI thread.
- Results return structured output + tracebacks.
- Attachments stored on disk for auditability.
Runtime flow
Download + install
Step 1 — Download
Grab the latest plugin bundle and drop it into your QGIS plugins directory.
Download HotWingsStep 2 — Enable
Open QGIS → Plugins → Manage and Install Plugins → Enable HotWings.
Step 3 — Connect
Copy the token from the HotWings dock and call /status to confirm the bridge is live.
Compatibility + checks
3.22+ (LTR recommended)
macOS, Windows, Linux
Localhost only + token auth
Rolling audit logs & outbox
Checksums and signed bundles will be listed here when downloads are published.
API quickstart
Status check
curl -H "Authorization: Bearer <token>" \
http://127.0.0.1:45454/status
Execute Python
curl -H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"code": "print(QgsProject.instance())"}' \
http://127.0.0.1:45454/exec
Capture screenshot
curl -H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"target":"canvas","format":"png"}' \
http://127.0.0.1:45454/screenshot