> For the complete documentation index, see [llms.txt](https://docs.soda.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.soda.io/release-notes/soda-core.md).

# Soda Core

Review release notes for Soda Core, an open-source tool for testing and monitoring data quality.

{% hint style="info" %}
You are **not logged in to Soda** and are viewing the default public documentation. Learn more about [Licensing & documentation access](/reference/documentation-access-and-licensing.md).
{% endhint %}

{% updates format="full" %}
{% update date="2026-09-15" %}

## `soda-core 4.24.0`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.24.0>

**Overall**

* Feat: Cloud-launched scans now stream logs to Soda Cloud during the run

**Data testing**

* Fix: Non-numeric check values no longer fail the whole scan
* Fix: Verifying a contract on a runner now reports an error when the scan cannot complete.
  {% endupdate %}

{% update date="2026-09-02" %}

## `soda-core 4.23.0`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.23.0>

**Overall**

* Feat: MySQL 8.0.19+ is now supported as a data source and diagnostics warehouse.

**Security**

* No HIGH/CRITICAL findings.
  {% endupdate %}

{% update date="2026-08-26" %}

## `soda-core 4.22.0`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.22.0>

**Overall**

* Fix: Error that could occur while logging exception
* Fix: Retry deadlock victims with jittered exponential backoff in SqlServer
* Feat: Add agent source to scan token usage
* Fix: Escape regex patterns as string literals
* Feat: Pin the RAD fail lower bound at 0

**Data testing**

* Feat: Enable specifying both warn and fail thresholds per check for data contracts & data standards
* Fix: Key the aggregate metric on its function to prevent incorrect results
  {% endupdate %}

{% update date="2026-08-19" %}

## `soda-core 4.21.1`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.21.1>

**Overall**

* Fix: CLI - `--check-filter` help now lists every supported field
* Fix: Spark DataFrame - Table discovery now respects the configured catalog
* Fix: Databricks contract verifications with a missing or empty access token now fail fast instead of hanging in interactive OAuth
  {% endupdate %}

{% update date="2026-08-17" %}

## `soda-core 4.21.0`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.21.0>

**Overall**

* Fix: Reporting warnings to Soda Cloud
  {% endupdate %}

{% update date="2026-08-07" %}

## `soda-core 4.20.0`

Github release - <https://github.com/sodadata/soda-extensions/releases/tag/v4.20.0>

**Overall**

* Various improvements and updates
* Removed PyAthena `<3.0` ceiling
* \[PREVIEW]: discovery now part of soda-core
  {% endupdate %}

{% update date="2026-07-29" %}

## `soda-core 4.19.0`

Github release - <https://github.com/sodadata/soda-extensions/releases/tag/v4.19.0>

**Overall**

* feat(sql-ast): window functions and UNION-in-CTE
* fix (bigquery): qualify CREATE SCHEMA with the project
  {% endupdate %}

{% update date="2026-07-21" %}

## `soda-core 4.18.0`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.18.0>

**Overall**

* Feat: Discover tables and columns with the new soda data-source discover command.
* Fix: Dates with years below 1000 no longer fail in SQL checks.
  {% endupdate %}

{% update date="2026-07-16" %}

## `soda-core 4.17.1`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.17.1>

**Overall**

* Fix: Docs - Replace stale v3 doc links with v4 equivalents
* Fix: Qualify wire check paths so check filtering works
* Fix: Bigquery - Escape all single quotes in literal\_string
  {% endupdate %}

{% update date="2026-07-10" %}

## `soda-core 4.17.0`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.17.0>

**Overall**

* Feat: OAuth (M2M + Azure service principal) auth
* Fix: Report runner scan FAILED with logs on abort re-raise

**Data testing**

* Feat: Global impl extensions — reconciliation in all check-collection kinds

**Security**

The following critical and high vulnerabilities are present in the soda-core v4.17.0 library, were determined to be not exploitable, and will be patched as soon as possible.

* CVE-2026-30922 (HIGH): pyasn1 0.6.3
  {% endupdate %}

{% update date="2026-06-30" %}

## `soda-core 4.16.0`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.16.0>

**Overall**

* Fix: memory management follow-up: honest fetch naming & encapsulated driver settings
* feat: dispatch HANA test helper for soda-tests
* feat: add failed\_rows keys\_query check form
* fix(freshness): send freshness diagnostics in milliseconds with measure=time
  {% endupdate %}

{% update date="2026-06-22" %}

## `soda-core 4.15.0`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.15.0>

**Overall**

* Feat: Add soda-failed-rows-query package for per-check extraction queries
* Feat: Runner-chart - Pin images by sha256
* Fix: Apply check-level filter to failed\_rows expression checks
* Fix: Only register signal handlers in main thread for remote scans
* Fix: Honor configured catalog over Cloud-sent prefix for SparkDF DWH
* Feat: Athena - make static AWS credentials optional for WIF support
  {% endupdate %}

{% update date="2026-06-16" %}

## `soda-core 4.14.0`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.14.0>

**Overall**

* Feat: Session-level post-processing hook for combined check collections
* Fix: Per-collection log isolation via a single contextvar-routed capturer
  {% endupdate %}

{% update date="2026-06-08" %}

## `soda-core 4.13.0`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.13.0>

**Overall**

* Fix: Recover column from definition when V3 sends `column: null`
* Fix (BigQuery): warn when account\_info\_json is provided alongside `use_context_auth`
* Fix: Support WIF/IRSA auth by making static credentials optional
  {% endupdate %}

{% update date="2026-06-01" %}

## `soda-core 4.12.0`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.12.0>

**Overall**

* Fix security vulnerability from urllib3
  {% endupdate %}

{% update date="2026-05-26" %}

## `soda-core 4.11.0`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.11.0>

**Overall**

* Feat: Dedup byte-identical aggregation metrics
* Feat: Lightweight CheckCollection abstraction
* Chore: Declarative check dependencies with framework-level NOT\_EVALUATED gating
* Chore: Rename Soda Agent to Soda Runner (backwards-compatible)
* Feat: bundle DWH file paths via DiagnosticsWarehouseFiles\\
  {% endupdate %}

{% update date="2026-05-20" %}

## `soda-core 4.10.1`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.10.1>

**Overall**

* Fix: Isolate InvalidReferenceCountMetricImpl identity
* Fix: Isolate rows\_tested\_query metric from contract row\_count

**Security**

The following critical and high vulnerabilities were present in our scans, were determined to be not exploitable, and will be patched as soon as possible.

* CVE-2026-39892 (CRITICAL): cryptography 46.0.6
* CVE-2026-21441 (HIGH): urllib3 1.26.18
* CVE-2026-30922 (HIGH): pyasn1 0.6.2
  {% endupdate %}

{% update date="2026-05-12" %}

## `soda-core 4.10.0`

Fix: Alias aggregation query columns and guard derived metrics
{% endupdate %}

{% update date="2026-05-11" %}

## `soda-core 4.9.0`

**Overall**

* Feat: Expose live session timezone on each DataSourceConnection
* Fix: Resolve datasource YAML variables post-parse
* Fix: Athena dqn containing forward slash in catalog
  {% endupdate %}

{% update date="2026-05-07" %}

## `soda-core 4.8.0`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.8.0>

Changes

* Feat: Validate column type parameters at contract parse time
* Feat: add `DataSourceConnection.create_additional_dbapi_connection`
* Feat: Add internal streaming support by
* Fix: keep scan running so schema check reports dropped columns
  {% endupdate %}

{% update date="2026-04-17" %}

## `soda-core 4.7.0`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.7.0>

Changes

* Feat: Support data type parameters in schema check
* Fix: Cast boolean threshold values to int before sending to Soda Cloud
* Chore: Normalize pyodbc.Row objects so downstream consumers see plain tuples
  {% endupdate %}

{% update date="2026-04-09" %}

##

`soda-core 4.6.0`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.6.0>

**Overall**

* Fix: Execute user-defined queries as standalone, if they cannot be embedded as CTEs
* Fix: Snowflake handling of `\` during inserts

**Extensions**

* Feat: Failed rows sample file upload functionality
* Fix: Autopilot add database-dependent quoting time column comparisons
* Bump adbc-driver-flightsql to >=1.11.0
  {% endupdate %}

{% update date="2026-04-04" %}

## `soda-core 4.5.0`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.5.0>

* Feat: Support list-valued attributes in check filters
* Fix: Handle missing data source gracefully when publishing to Cloud
  {% endupdate %}

{% update date="2026-03-31" %}

## `soda-core 4.4.2`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.4.2>

Release notes:

* Fix: Upgrade requests to resolve insecure temp file vulnerability
  {% endupdate %}

{% update date="2026-03-31" %}

## `soda-core 4.4.1`

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
  {% endupdate %}

{% update date="2026-03-30" %}

## `soda-core 4.4.0`

Github release - <https://github.com/sodadata/soda-core/releases/tag/v4.4.0>

Release notes:

* Feat: Add rows\_tested\_query to failed\_rows checks
* Feat: Add check filtering
* Fix: Expected iterator rowcount across data sources
* Fix: Query result iterator for all data sources
  {% endupdate %}

{% update date="2026-03-17" %}

## `soda-core 4.2.0`

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
* Fix: Speed-up Databricks v4 discovery with information\_schema query
* Fix: Do not discover `__soda_temp` tables
  {% endupdate %}

{% update date="2026-03-05" %}

## `soda-core 4.1.1`

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
* Fiix: stop fetching datasource config from Cloud in local verification flow
* Fix: handle metric query returning zero rows gracefully
* Fix: Update cleanup script
  {% endupdate %}

{% update date="2026-02-28" %}

## `soda-core 4.1.0`

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
  {% endupdate %}

{% update date="2026-02-19" %}

## `soda-core 4.0.9`

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
  {% endupdate %}

{% update date="2026-02-11" %}

## `soda-core 4.0.7`

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)
  {% endupdate %}

{% update date="2026-02-09" %}

## `soda-core 4.0.6`

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)
  {% endupdate %}

{% update date="2026-01-28" %}

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

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.
  {% endupdate %}
  {% endupdates %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.soda.io/release-notes/soda-core.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
