The real job
Verification runs against what the engine is about to execute: Spark’s logical plan, or a Beam pipeline’s graph — not a mock, not a static description of a table.
Invaract parses a data contract, translates the engine’s own description of a job (a Spark logical plan, or a Beam pipeline graph) into an engine-independent representation, and checks the two against each other — structurally, before the write executes. A violation stops the job. No output is created.
The real job
Verification runs against what the engine is about to execute: Spark’s logical plan, or a Beam pipeline’s graph — not a mock, not a static description of a table.
Enforcement, not just reporting
A contract-violating write is stopped before it happens, on Spark inside the session and on Beam before the pipeline reaches its runner.
No code change to the job
A platform team attaches Invaract with a spark-submit --conf or a Beam --runner option, to
jobs whose source it doesn’t own.
Fails closed
A write shape Invaract doesn’t recognize is rejected, not silently let through unverified.
Never crashes
Constructs the adapter can’t translate degrade to a diagnostic, not an exception — checked by property-based fuzzing.
Quick Start
Go from a fresh clone to a verified Spark write in one command. Start here →
Apache Beam
Write a Contract
Learn the contract format by extending the one this project ships with. Read the guide →
Concepts
Understand verification vs. enforcement, and why Invaract fails closed. Learn more →
Reference
The contract format, every setting, supported connectors, and every violation type. Browse reference →