binius_frontend/lib.rs
1// Copyright 2025 Irreducible Inc.
2
3//! Circuit construction frontend for Binius64.
4//!
5//! This crate provides the [`CircuitBuilder`] API for constructing arithmetic circuits
6//! that compile to Binius64 constraint systems. You describe your computation as a graph
7//! of operations on 64-bit words, and the frontend compiles it to AND/MUL constraints.
8//!
9//! # Usage Flow
10//!
11//! Use [`CircuitBuilder`] to construct your circuit. Call methods like `add_witness()`
12//! and `add_inout()` to create [`Wire`]s - handles to 64-bit values that will exist during
13//! proof generation. Use operations like `band()`, `bxor()`, and `iadd_32()` to transform
14//! these wires, building up your computation graph.
15//!
16//! When you call `build()`, the builder compiles your graph into a [`Circuit`]. This circuit
17//! contains the optimized constraint system and everything needed for proof generation.
18//!
19//! To generate a witness, create a [`WitnessFiller`] from the circuit. Assign concrete values
20//! to your input wires, then call `populate_wire_witness()` to compute all intermediate values
21//! through circuit evaluation.
22//!
23//! Use [`CircuitStat`] to inspect metrics like constraint counts and wire usage, helpful for
24//! optimization and debugging.
25
26#![warn(rustdoc::missing_crate_level_docs)]
27
28mod compiler;
29pub mod stat;
30
31pub mod util;
32
33pub use compiler::{
34 CircuitBuilder, Wire,
35 circuit::{Circuit, WitnessFiller},
36 hints::{self, Hint},
37};
38pub use stat::CircuitStat;