Duckle v0.5.6 brings real-time WebSocket connectors, a geospatial projection toolkit, streaming XML at multi-GB scale, and a scheduler that finally runs cron in your local time zone.
New features
- WebSocket source and sink
src.websocket/snk.websocket- connect to aws://orwss://endpoint, optionally send a subscribe frame, and collect up tomaxMessagesframes into rows; the sink pushes each upstream row back out as a text frame. A JSON object becomes one row, a JSON array a row per element, and any other text a{message}row. Built ontokio-tungstenitewith bundled webpki roots. For live market data, sensor streams, and pushing results to real-time dashboards. (#192) - Geospatial projection toolkit - Define Projection (
xf.geo.setcrs) stamps a CRS onto geometry that has none without moving coordinates; Reproject Geometry (xf.geo.reproject) transforms between CRS viaST_Transformand preserves the target CRS on the output; Create Geometry (xf.geo.create) builds a GEOMETRY column from X/Y, WKT, or WKB. (#188, #189, #190) - Dynamic time offsets in templates -
${date+1d},${now-2h},${timestamp+30m}, and chained forms like${date+1d-2h}. Bases aredate,time,datetime,timestamp, andnow; units ared/h/m/s. Every reference in a run resolves against one instant, so${date}and${date+1d}stay exactly a day apart. (#191) - Streaming, multi-GB XML -
src.xmlstreams local,sftp://, andhttps://inputs with automatic gzip / zip handling and honours a declared schema, instead of buffering the whole document. (#186) - Salesforce Bulk sink
snk.salesforce.bulk- migration-scale write-back over Bulk API 2.0. DuckDB streams the upstream to CSV on disk and each part runs the async job lifecycle, so a multi-million-row load never lands in memory. (#164, #187) - OAuth 2.0 client credentials for any REST source - token minting is no longer Salesforce-only. Give any REST connector a token URL and it mints a fresh access token per run, with credentials in the POST body or as an HTTP Basic header. This suits a Xero Custom Connection, whose access tokens expire after 30 minutes. (#195)
xf.jqfor per-row jq over a JSON column (#173), and CRS-aware measurements that pick planar or spheroid math from the geometry's own CRS (#177).
Fixes
- #194 - the desktop scheduler evaluated cron in UTC, so the preset labelled "Every day at 03:00" fired at 03:00 UTC while the UI showed the next run in local time. Cron now evaluates in the machine's local zone. The "Next" countdown also shows hours and minutes ("in 1 h 7 min") instead of truncating to whole hours, and a 5-field cron expression is accepted rather than silently never firing.
- #185 - saved S3 and other non-Salesforce connection references now resolve at run time instead of failing with a 403.
- #183 - Duckie honours a configured custom AI endpoint.
- #182 - the Linux window stays resizable after un-maximize.
- #179 - an externally set
DUCKLE_DUCKDB_BINtakes precedence over the bundled binary. - #170 - a zero-row result no longer collapses into a lone
jsoncolumn that breaks downstream SQL. - #89 - macOS engine signing was hardened so
llama-serverlaunches from a downloaded build. This one could not be exercised on the Windows development machine, so reports from macOS users are welcome.
Download
Desktop apps and headless runners for Windows, macOS (Apple Silicon), and Linux are attached below. Verify against SHA256SUMS.txt.