Soda Core 2,433 (https://github.com/sodadata/soda-core 2,433 ) writes checks in YAML and compiles them into SQL that runs inside the data source. Version 3 introduced SodaCL 659,325 , the Soda Checks Language (row_count > 0, missing_count(customer_id) = 0 under checks for orders:). Version 4, on public PyPI 2,431 since January 2026 and at 4.25.0 since 23 September 2026, replaced SodaCL with a contract language: one YAML file per dataset declares columns, types and checks (schema, row_count, missing, invalid, duplicate, freshness, aggregate, metric, failed_rows) with thresholds, and doubles as a data contract.
Packages are now soda-postgres, soda-duckdb and so on (soda-core-postgres 3.5.6 is the legacy line). The license changed too: v3 is Apache-2.0, v4 is under the Elastic License 2.0, source-available and forbidding Soda as a hosted service; anomaly detection and alerting live in the commercial Soda Cloud. Soda 4 supports Python up to 3.12 officially, so it runs here in a 3.12 environment with soda-duckdb 4.25.0.