Releases: govtech-data-practice/vowl
v0.0.1
🦉 vowl v0.0.1 - Initial Public Release
Release Date: 2 April 2026
🎉 Celebrating Open Source
We're excited to announce the first public release of vowl (vee-owl) - a validation engine for Open Data Contract Standard (ODCS) data contracts.
vowl originated as an internal tool for demonstrating data contracts within our prototyping workflows. Over time, we recognised its potential value to the wider international community. With that in mind, we refined the library and are publishing it as open source under the MIT license.
As the project is still in its early stages, there may be rough edges and bugs. We appreciate your patience and warmly welcome contributions to help improve vowl for everyone.
📦 Installation
pip install vowlOptional extras: vowl[spark], vowl[all]
Requires: Python >= 3.10
✨ Highlights
SQL-Powered Validation Engine
Core data quality validation engine backed by Ibis and DuckDB. SQL checks run server-side through Ibis without materialising tables on the client.
Declarative ODCS Contracts
Define your validation rules once in a YAML/JSON contract following the Open Data Contract Standard, and get rich, actionable reports on your data quality.
Any DataFrame, Any Backend
- Load any Narwhals-compatible DataFrame (pandas, Polars, PySpark, cuDF, Modin, etc.)
- Connect to 20+ database backends via Ibis (PostgreSQL, Snowflake, BigQuery, and more)
- SQL dialect translation handled by SQLGlot
Auto-Generated Rules
Checks are automatically derived from contract metadata (logicalType, logicalTypeOptions, required, unique, primaryKey) and library metrics (nullValues, missingValues, invalidValues, duplicateValues, rowCount).
Multi-Source Validation
Validate across tables in different source systems with cross-database joins and multi-table materialisation support.
Rich Reporting
Detailed summaries, row-level failure analysis, saveable reports, and a chainable ValidationResult API.
No Silent Gaps
Unimplemented or unrecognised checks surface as ERROR, not quietly skipped - nothing slips through the cracks.
🚀 Quick Start
import pandas as pd
from vowl import validate_data
df = pd.read_csv("my_data.csv")
result = validate_data("my_contract.yaml", df=df)
result.display_full_report()📚 What's Included
| Component | Description |
|---|---|
| Core Engine | SQL-powered validation with CTE wrapper for robust query transformation |
| Contracts | YAML/JSON schema-based contract definitions |
| Adapters | IbisAdapter, MultiSourceAdapter, and extensible BaseAdapter |
| Executors | IbisSQLExecutor, SQLExecutor, and extensible BaseExecutor |
| Export | Export validation results as Arrow tables |
| Examples | Jupyter notebook examples and demo outputs |
| Documentation | MkDocs site covering architecture, contracts, and usage patterns |
🔗 Links
- Repository: https://github.com/govtech-data-practice/vowl
- Documentation: https://govtech-data-practice.github.io/vowl/
- Issues: https://github.com/govtech-data-practice/vowl/issues
- Contributing: CONTRIBUTING.md
📄 License
vowl is released under the MIT License.
Copyright (c) 2026 Government Technology Agency.