Skip to content

Duckle v0.5.6

Latest

Choose a tag to compare

@github-actions github-actions released this 20 Jul 08:18

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 a ws:// or wss:// endpoint, optionally send a subscribe frame, and collect up to maxMessages frames 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 on tokio-tungstenite with 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 via ST_Transform and 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 are date, time, datetime, timestamp, and now; units are d / 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.xml streams local, sftp://, and https:// 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.jq for 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_BIN takes precedence over the bundled binary.
  • #170 - a zero-row result no longer collapses into a lone json column that breaks downstream SQL.
  • #89 - macOS engine signing was hardened so llama-server launches 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.