tag:github.com,2008:https://github.com/slingdata-io/sling-cli/releasesRelease notes from sling-cli2026-03-09T18:16:37Ztag:github.com,2008:Repository/304285216/v1.5.122026-03-11T10:20:37Zv1.5.12<h2>Sling v1.5.12 (2026-03-09T18:18:58Z)</h2>
<h3>New Features</h3>
<ul>
<li>
<p><strong><code>--home-dir</code> flag</strong>: New flag across <code>sling run</code> and all <code>sling conns</code> subcommands (<code>list</code>, <code>test</code>, <code>set</code>, <code>unset</code>, <code>exec</code>, <code>discover</code>) to specify a custom sling home directory. Sets <code>SLING_HOME_DIR</code> and reloads connections accordingly.</p>
</li>
<li>
<p><strong>Column merge with defaults (<code>+</code> prefix)</strong>: Stream-level <code>columns:</code> entries prefixed with <code>+</code> now merge with <code>defaults.columns</code> instead of replacing them. Use <code>+column_name: ~</code> to unset a default. Without <code>+</code>, legacy replace behavior is preserved.</p>
</li>
<li>
<p><strong>Pipeline store variables in replications</strong>: <code>{store.xxx}</code> variables set in pipeline steps are now accessible in inline replication <code>where:</code> and <code>sql:</code> fields.</p>
</li>
<li>
<p><strong>API spec <code>range_step</code> support</strong>: Added <code>range_step</code> to the endpoint context map, enabling three-part range expressions for backfill.</p>
</li>
<li>
<p><strong>API spec state variable rendering in <code>jmespath</code> / <code>jq</code></strong>: State variables (e.g. <code>{state.endpoint_name}</code>) are now resolved inside <code>jmespath</code> and <code>jq</code> response record expressions.</p>
</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>
<p><strong><code>SLING_LOGGING</code> env from replication</strong>: Moved <code>SLING_LOGGING</code> env handling from per-task to replication-level so it takes effect before stream execution and properly reinitializes the logger.</p>
</li>
<li>
<p><strong>Direct insert incremental state</strong>: <code>writeToDbDirectly</code> now calls <code>SyncColumns()</code> and <code>SyncStats()</code> so incremental state (e.g. datetime update keys) is correctly captured after direct insert writes.</p>
</li>
<li>
<p><strong>Auth token refresh on retry</strong>: API retry logic now refreshes HTTP request headers from <code>conn.State.Auth.Headers</code> before resending, fixing stale token issues after server-side token rotation (both single-request and mid-pagination scenarios).</p>
</li>
<li>
<p><strong>Windows path handling</strong>: <code>CleanWindowsPath</code> applied to local file locations in <code>ParseLocation</code>, API spec <code>file://</code> paths, env file paths, and <code>SLING_HOME_DIR</code>.</p>
</li>
<li>
<p><strong>Oracle chunking with custom SQL</strong>: Fixed <code>AS</code> table alias syntax for Oracle (which doesn't support <code>AS</code> for subquery aliases).</p>
</li>
</ul>flarcotag:github.com,2008:Repository/304285216/v1.5.112026-03-02T20:02:32Zv1.5.11<h2>Sling v1.5.11 (2026-03-02T19:52:22Z)</h2>
<ul>
<li>Fix critical issue with API Spec state parsing when using <code>setup</code></li>
</ul>flarcotag:github.com,2008:Repository/304285216/v1.5.102026-03-02T14:25:06Zv1.5.10<h2>Sling v1.5.10 (2026-03-02T14:00:35Z)</h2>
<h3>Connectors</h3>
<ul>
<li><strong>ADBC DuckDB</strong> — new ADBC connector with Docker testing</li>
<li><strong>MongoDB</strong> — support <code>ISODate()</code> in filters</li>
<li><strong>ClickHouse</strong> — fix table rename SQL syntax</li>
<li><strong>SFTP</strong> — fix incremental file timestamp filtering</li>
<li><strong>Google Drive</strong> — add context timeout for API calls</li>
<li><strong>Local files</strong> — UNC path support (Windows network paths)</li>
</ul>
<h3>Connections & Environment</h3>
<ul>
<li>Support setting username in connection URL</li>
<li>New <code>.env.sling</code> file support for per-project connection definitions</li>
</ul>
<h3>MCP Server</h3>
<ul>
<li><code>working_dir</code> parameter on connection, pipeline, and replication actions</li>
<li>Auto-loads <code>.env.sling</code> from working directory</li>
</ul>
<h3>CDC (Change Data Capture)</h3>
<ul>
<li>Soft delete now uses <code>_sling_synced_op = 'D'</code> instead of <code>_sling_deleted_at</code>; snapshot rows marked with <code>'S'</code></li>
<li>Updated <code>merge_change_capture_soft</code> templates across all 14 databases</li>
</ul>
<h3>Other</h3>
<ul>
<li>Updated <code>godbc</code> v0.0.5, <code>purego</code> v0.10.0</li>
<li>Disable AWS EC2 metadata service to prevent warning messages</li>
<li>JMESPath/JQ safe rendering with state variables</li>
<li>Simplified update check logic</li>
</ul>flarcotag:github.com,2008:Repository/304285216/v1.5.92026-02-23T15:16:58Zv1.5.9<h2>Sling v1.5.9 (2026-02-23T15:13:21Z)</h2>
<h3>Change Data Capture (CDC)</h3>
<ul>
<li>New <code>change-capture</code> replication mode</li>
<li>Supports initial full/chunked snapshot then incremental CDC</li>
<li>New merge strategies: <code>change_capture</code> and <code>change_capture_soft</code> (soft delete)</li>
<li>CDC merge templates for: Postgres, MySQL, Snowflake, BigQuery, SQL Server, DuckDB, Redshift, Databricks, ClickHouse, SQLite, D1, DB2, Exasol, Oracle, StarRocks</li>
<li>Pre-release for testing, not ready for production yet</li>
</ul>
<h3>Chunking Improvements</h3>
<ul>
<li>Optional <code>WHERE</code> clause support added to chunk query functions</li>
<li>Fix bug where start-date is <code>0000-01-01</code></li>
</ul>
<h3>CLI Cleanup</h3>
<ul>
<li>Removed legacy subcommands</li>
<li>Centralized execution ID into <code>core/env</code> package (<code>env.ExecID</code>)</li>
<li>Enhanced file logging: exec ID prefix and log cleanup (added <code>SLING_LOG_DIR</code> env vars)</li>
</ul>
<h3>Proxy Support</h3>
<ul>
<li>New <code>SLING_PROXY</code> environment variable (or <code>proxy_url</code> per-connection property) for proxy configuration</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><code>StreamRowsContext</code> column mapping streamlined; sync issue fixed</li>
<li>Prometheus connector: consistent float conversion via <code>toFloat</code> method</li>
<li>Time format strings in <code>NewStreamProcessor</code> clarified</li>
<li>MySQL/MariaDB primary key handling improved in <code>GenerateDDL</code></li>
<li><code>InferColumnTypes</code> preserves explicit types for empty datasets</li>
</ul>flarcotag:github.com,2008:Repository/304285216/v1.5.82026-02-17T11:23:45Zv1.5.8<h2>Sling v1.5.8 (2026-02-17T11:17:57Z)</h2>
<ul>
<li>Critical fix for AzureSQL and Fabric <code>merge_strategy</code> templates</li>
<li>Improve S3 buffering to avoid back-pressure panic.</li>
</ul>flarcotag:github.com,2008:Repository/304285216/v1.5.72026-02-16T11:41:31Zv1.5.7<h2>Sling v1.5.7 (2026-02-16T11:11:59Z)</h2>
<h3>Schema Migration</h3>
<ul>
<li>Preserve foreign keys, indexes, column comments, default values, and auto-increment attributes when replicating between databases</li>
<li>Supported for Oracle, PostgreSQL, Redshift, Snowflake, SQL Server, BigQuery, MySQL, DuckDB, ClickHouse, Databricks, SQLite</li>
<li>Streams automatically ordered by foreign key dependencies</li>
<li>Default value translation mappings between database engines</li>
</ul>
<h3>Merge Strategies</h3>
<ul>
<li>Support for <code>insert</code>, <code>update</code>, <code>update_insert</code>, and <code>delete_insert</code> merge strategies</li>
</ul>
<h3><code>jq</code> Expressions</h3>
<ul>
<li>New <code>jq</code> source option for JSON-based data streams</li>
<li><code>jq()</code> transform function for column-level transformations</li>
<li>Works with API sources and database JSON columns</li>
<li>Compiled expressions cached for performance</li>
</ul>
<h3>Template & Expression Engine</h3>
<ul>
<li>Nested template expression support for recursive resolution within nested braces (e.g., GraphQL queries)</li>
<li>Safe rendering methods that keep missing expressions intact instead of erroring</li>
</ul>
<h3>Fixes & Improvements</h3>
<ul>
<li>File-based logging setup for persistent log output</li>
<li>Wildcard schema support in <code>Discover</code> method</li>
<li>Duplicate step ID validation in pipeline configs</li>
<li>DuckDB HTTP server shutdown fix after batch processing</li>
<li>Total rows and bytes tracked in pipeline state</li>
<li>Metadata queries updated to use <code>current_database()</code> for catalog filtering</li>
<li>Zip file response handling for API sources</li>
</ul>flarcotag:github.com,2008:Repository/304285216/v1.5.62026-02-02T12:24:25Zv1.5.6<h2>Sling v1.5.6 (2026-02-02T10:19:20Z)</h2>
<ul>
<li>Enhanced <code>delete_missing</code> with configurable source and target WHERE clauses</li>
<li>Added secret encoding support for HMAC authentication in API specs</li>
<li>Added <code>EscapeBackslash</code> option for MySQL LOAD DATA operations</li>
<li>Added row-start-only range format support for Excel</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li>Fixed Fabric ROWTERMINATOR to use hexadecimal representation</li>
<li>Disabled AWS EC2 metadata retrieval for improved security</li>
<li>Restored escape character handling in MySQL/MariaDB LOAD DATA INFILE templates</li>
</ul>flarcotag:github.com,2008:Repository/304285216/v1.5.52026-01-27T19:48:54Zv1.5.5<h2>Sling v1.5.5 (2026-01-26T16:09:41Z)</h2>
<h2>New Features</h2>
<ul>
<li><strong>DB2 Database Support</strong> - Initial support for IBM DB2 with connection templates and full test suite</li>
<li><strong><code>definition-only</code> Mode</strong> - Create table/file definitions without transferring data (parquet/arrow only for files)</li>
<li><strong><code>_sling_synced_at</code> Column</strong> - Enable with <code>SLING_SYNCED_AT_COLUMN=true</code> for timestamp tracking</li>
<li><strong><code>_sling_synced_op</code> Column</strong> - Tracks operation type: <code>I</code> (insert), <code>U</code> (update), <code>D</code> (soft delete)</li>
<li><strong><code>slugify</code> Function</strong> - Convert strings to URL-friendly slugs</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li><strong>DDL primary key with WITH clauses</strong> - Fixed incorrect placement when table options present (<a href="https://github.com/slingdata-io/sling-cli/issues/694" data-hovercard-type="issue" data-hovercard-url="/slingdata-io/sling-cli/issues/694/hovercard">#694</a>)</li>
<li><strong>Prometheus streaming deadlock</strong> - Fixed stall on large time ranges (<a href="https://github.com/slingdata-io/sling-cli/pull/700" data-hovercard-type="pull_request" data-hovercard-url="/slingdata-io/sling-cli/pull/700/hovercard">#700</a>)</li>
<li><strong>MySQL boolean CSV streaming</strong> - Fixed boolean handling in LOAD DATA LOCAL INFILE</li>
<li><strong><code>delete_missing</code> with transforms</strong> - Fixed errors in PK-only queries when transforms present</li>
<li><strong>Connection caching</strong> - Fixed hash method and ODBC initialization</li>
</ul>
<h2>Improvements</h2>
<ul>
<li><strong>Go 1.25</strong> - Upgraded build toolchain</li>
<li><strong>Docker ODBC packages</strong> - Added <code>unixodbc</code> and <code>odbcinst</code></li>
<li><strong>Oracle XMLTYPE</strong> - Support for BigQuery transfers</li>
<li><strong>MySQL LOAD DATA LOCAL</strong> - Enhanced NULL value handling</li>
<li><strong>S3 multi-bucket access</strong> - Improved support in replications</li>
<li><strong>Schema discovery</strong> - Thread-safe schemata merging, column-level support</li>
</ul>flarcotag:github.com,2008:Repository/304285216/v1.5.42026-01-05T21:16:28Zv1.5.4<h2>Sling v1.5.4 (2026-01-05T20:59:07Z)</h2>
<h3>ODBC Connection Support</h3>
<ul>
<li>New ODBCConn type for generic ODBC database connections</li>
</ul>
<h3>Environment Variable Expansion in Env Files</h3>
<ul>
<li>Environment variables can now be used within ~/.sling/env.yaml files</li>
<li>Variables are expanded before YAML unmarshalling</li>
<li>Loaded env vars are set into the OS environment if not already present</li>
</ul>
<h3>Enhanced Boolean Type Handling</h3>
<ul>
<li>Boolean columns now cast to SmallIntType instead of IntegerType for better compatibility</li>
<li>Improved boolean handling for MySQL, MariaDB, and StarRocks databases</li>
</ul>
<h3>Pipeline Step Order Preservation</h3>
<ul>
<li>Updated YAML handling to use v3</li>
<li>Pipeline steps now maintain their defined order during execution</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>ADBC Safety Check: Ensure ADBC connection is initialized before use (conn.adbc != nil check)</li>
<li>Google API Auth: Fixed "multiple credential options provided" error with google.golang.org/api >= v0.258.0</li>
<li>Windows Build Dynamic Linking issue</li>
</ul>flarcotag:github.com,2008:Repository/304285216/v1.5.32025-12-23T14:54:27Zv1.5.3<h2>Sling v1.5.3 (2025-12-23T14:49:39Z)</h2>
<h3>Fix for boolean casting logic for v1.5.2</h3>
<ul>
<li>Added CastBoolColumnForSelect method to cast boolean columns when target expects integer or string
<ul>
<li>Boolean → Integer: true→1, false→0</li>
<li>Boolean → String: true→"true", false→"false"</li>
</ul>
</li>
<li>Enhanced CastColumnsForSelect to detect boolean/integer or boolean/string mismatches and apply casting</li>
</ul>
<h3>API Incremental Sync Improvements</h3>
<ul>
<li>New GetSyncUpdateKey function - Automatically detects sync key and update key from API endpoint configuration when:
<ul>
<li>Endpoint has a sync array defined</li>
<li>A processor uses aggregation: maximum that outputs to state.<sync_key></li>
<li>update_key is defined in response records</li>
</ul>
</li>
<li>DB-based incremental fallback - When SLING_STATE is not set, API replications can now fetch the incremental value directly from the target database</li>
</ul>flarco