# Soda Core - Release notes

{% if visitor.claims.plan === 'free' %}
{% hint style="success" %}
You are **logged in to Soda** and seeing the **Free license** documentation. Learn more about [documentation-access-and-licensing](https://docs.soda.io/reference/documentation-access-and-licensing "mention").
{% endhint %}
{% endif %}

{% if visitor.claims.plan === 'teams' %}
{% hint style="success" %}
You are **logged in to Soda** and seeing the **Team license** documentation. Learn more about [documentation-access-and-licensing](https://docs.soda.io/reference/documentation-access-and-licensing "mention").
{% endhint %}
{% endif %}

{% if visitor.claims.plan === 'enterprise' || visitor.claims.plan === 'enterpriseUserBased' %}
{% hint style="success" %}
You are **logged in to Soda** and seeing the **Enterprise license** documentation. Learn more about [documentation-access-and-licensing](https://docs.soda.io/reference/documentation-access-and-licensing "mention").
{% endhint %}
{% endif %}

{% if !(visitor.claims.plan === 'free' || visitor.claims.plan === 'teams' || visitor.claims.plan === 'enterprise' || visitor.claims.plan === 'enterpriseUserBased') %}
{% hint style="info" %}
You are **not logged in to Soda** and are viewing the default public documentation. Learn more about [documentation-access-and-licensing](https://docs.soda.io/reference/documentation-access-and-licensing "mention").
{% endhint %}
{% endif %}

## `soda-core 4.4.2`&#x20;

<sup>31 March 2026</sup>\
Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.4.2>

Release notes: Fix: Upgrade requests to resolve insecure temp file vulnerability

## `soda-core 4.4.1`&#x20;

<sup>31 March 2026</sup> \
Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.4.1>

Release notes: Fix: Upgrade snowflake-connector-python, pyopenssl, pyjwt, and cryptography for security fixes

## `soda-core 4.4.0`&#x20;

<sup>30 March 2026</sup> \
Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.4.0>

Release notes:&#x20;

* Feat: Add rows\_tested\_query to failed\_rows checks&#x20;
* Feat: Add check filtering&#x20;
* Fix: Expected iterator rowcount across data sources&#x20;
* Fix: Query result iterator for all data sources

{% if visitor.claims.plan === 'enterprise' || visitor.claims.plan === 'enterpriseUserBased' %}

### Extensions&#x20;

* Fix: Skip columns with unusual data types from profiling and check assignment
* Fix: Fallback for migration column extraction
* Fix: Clean up autopilot sampler
* Fix: Update test connection query for Oracle
* Fix: UnboundLocalError on missing\_count during partial verification
* Fix: Update logs for pre-existing tables to debug level
  {% endif %}

## `soda-core 4.2.0`&#x20;

<sup>17 March 2026</sup>\
Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.2.0>

Release notes:

* Feat: Query all columns within a specific schema
* Fix: Properly quote Athena identifiers&#x20;
* Fix: Speed-up Databricks v4 discovery with information\_schema query
* Fix: Do not discover `__soda_temp` tables

## `soda-core 4.1.1`&#x20;

<sup>5 March 2026</sup>\
Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.1.1>

Release notes:

* Fix: dry-run crash for invalid reference check in soda contract test&#x20;
* Fiix: stop fetching datasource config from Cloud in local verification flow&#x20;
* Fix: handle metric query returning zero rows gracefully
* Fix: Update cleanup script

## `soda-core 4.1.0`&#x20;

<sup>28 February 2026</sup>\
Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.1.0>

Release notes:

* Feat: Add full support for Trino data source
* Feat: Add percentage-based sampling for Postgres, Databricks, and Snowflake
* Feat: Expand structured data types and type casting to reference check
* Feat: Separate SQL dialect from data source
* Feat: Report missing count on duplicate and validity checks
* Fix: Potential issue with types not being converted to str in QueryResult
* Fix: Snowflake connector for private key connections
* Fix: Map COMPLETED\_WITH\_WARNINGS to WARNED in agent verification path
* Fix: Apply column expression on freshness check correctly
* Fix: Improved support for Fabric data source
* Fix: Small fixes for Synapse data source

{% if visitor.claims.plan === 'enterprise' || visitor.claims.plan === 'enterpriseUserBased' %}

### Extensions

* Feat: Fabric, Synapse, Trino, and Oracle support for Diagnostics Warehouse&#x20;
* Feat: Add missing\_row\_count to Diagnostic Warehouse. Fix diagnostics for FRQ
* Feat: Use percentage sampler for autopilot
* Fix: Fix Diagnostics Warehouse prefixes when `None` is being sent by Soda Cloud
* Fix: Autopilot handling of small & empty datasets
* Fix: Remove incorrect Dremio batch size overrides
* Fix: Fix autopilot scan times logging
  {% endif %}

## `soda-core 4.0.9`&#x20;

<sup>19 February 2026</sup>\
Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.0.9>

Please note: `4.0.8` failed during release pipeline and is not published in pypi.

Release notes:

* Feat: Update Redshift to use `psycopg3`
* Feat: Support structured data types and type casting
* Feat: Migrate to `uv`
* Fix: Report correct `datasetRowsTested` for failed rows query check
* Fix: Setup column expression correctly for aggregate metrics
* Fix: Update failed rows check diagnostics payload

{% if visitor.claims.plan === 'enterprise' || visitor.claims.plan === 'enterpriseUserBased' %}

### Extensions

* Feat: Add Redshift compatibility to Diagnostics Warehouse
* Feat: Migrate to `uv`
* Fix: Issue with group by checks in cross-source configurations
* Fix: Compare columns case-insensitive for ensuring the correct columns for Soda-defined tables in Diagnostics Warehouse
  {% endif %}

## `soda-core 4.0.7`&#x20;

<sup>11 February 2026</sup>\
Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.0.7>

Release notes:

* fix: Databricks - quote dataset in metadata query by [@m1n0](https://github.com/m1n0) in [#2578](https://github.com/sodadata/soda-core/pull/2578)
* Chore: Use `tbump` to generate github release by [@mivds](https://github.com/mivds) in [#2575](https://github.com/sodadata/soda-core/pull/2575)

{% if visitor.claims.plan === 'enterprise' || visitor.claims.plan === 'enterpriseUserBased' %}

### Extensions

* Diagnostic Warehouse use row hashing for between source movements
  {% endif %}

## `soda-core 4.0.6`&#x20;

<sup>9 February 2026</sup>\
Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.0.6>

Release notes:

* Feat: Add `uv` support to soda core by [@AidaPaul](https://github.com/AidaPaul) in [#2561](https://github.com/sodadata/soda-core/pull/2561)
* Feat: Update to `psycopg3` by [@Niels-b](https://github.com/Niels-b) in [#2558](https://github.com/sodadata/soda-core/pull/2558)
* Feat: add iterator support for query results by [@mivds](https://github.com/mivds) in [#2562](https://github.com/sodadata/soda-core/pull/2562)
* Fix: enhance CI workflow with staggered uploads to PyPI to reduce 503 errors by [@nik843](https://github.com/nik843) in [#2556](https://github.com/sodadata/soda-core/pull/2556)
* Fix: Require `pydantic>=2.11` by [@paulteehan](https://github.com/paulteehan) in [#2559](https://github.com/sodadata/soda-core/pull/2559)
* Fix: Improved Databricks data type mapping by [@Niels-b](https://github.com/Niels-b) in [#2558](https://github.com/sodadata/soda-core/pull/2558)
* Chore: Replace strings with `SamplerType` enum by [@mivds](https://github.com/mivds) in [#2565](https://github.com/sodadata/soda-core/pull/2565)
* Chore: better yaml parsing for Soda Cloud client, support migration e… by [@m1n0](https://github.com/m1n0) in [#2566](https://github.com/sodadata/soda-core/pull/2566)

{% if visitor.claims.plan === 'enterprise' || visitor.claims.plan === 'enterpriseUserBased' %}

### Extensions

* Diagnostic Warehouse bugfixes
* Diagnostic Warehouse cross-datasource support
  {% endif %}

## `soda-core 4.0.5` - first public release of version 4&#x20;

<sup>28 January 2026</sup>\
This is the first public release of Soda Core version 4. This release introduces **Data Contracts as the default way to define data quality rules for tables**. The new approach offers a cleaner, more structured, and more maintainable way to define and manage data quality rules, based on community feedback and real-world usage.

{% hint style="danger" %}
This is a breaking change: Soda Core is moving from the checks language to a Data Contracts–based syntax.
{% endhint %}

Highlights of this release:

* Introduced support for **parsing**, **publishing** and (both locally and remotely) **verifying** data contracts.
* Introduced extended check diagnostics providing deeper visibility into the count and percentage of tested, passing, and failing rows.
* Introduced seamless flexibility to run Contracts via Core or the Soda Agent, with definitions stored either as external files or in Soda Cloud.
* Introduced "Missing", "Invalid", "Duplicate", "Aggregate", "Failed Rows", "Metric" checks in data contract.
* Introduced data contracts support for **multiple data sources**: Postgres, Snowflake, BigQuery, Databricks, Redshift, SQL Server, Fabric, Synapse, Athena, DuckDB (in memory).
* Introduced **new CLI** with a noun-verb structure and better integration with the Soda Cloud APIs (e.g. contract fetching based on a dataset identifier)
* Introduced support for `variables` in contracts, allowing you to parameterize contracts.
* Introduced support for **extending functionality** using plugins.
* Introduced **extensible check types**.
* Introduced concept and hooks for **contract verification result handlers**, allowing post processing of the contract verification results.

### Extensions

* Implemented the contract generation plugin.
* Implemented the diagnostics warehouse plugin.
* Implemented reconciliation checks.
* Implemented group-by checks.
* Implemented support for Oracle as a data source.
* Implemented support for Dremio as a data source.
* Implemented support for contract requests.
