diff --git a/Cargo.toml b/Cargo.toml
index 690060b9026f586a630a92f42929f7fe49f6b829..6511f31173c2cc06ca602e7a6cd1799472b23a28 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -55,3 +55,7 @@ required-features = ["kzg"]
 [[example]]
 name = "aplonk"
 required-features = ["aplonk"]
+
+[[example]]
+name = "fri"
+required-features = ["fri"]
diff --git a/examples/fri.rs b/examples/fri.rs
new file mode 100644
index 0000000000000000000000000000000000000000..68f1449adce867c774586d177bd41e1fbc4f35d5
--- /dev/null
+++ b/examples/fri.rs
@@ -0,0 +1,31 @@
+use ark_bls12_381::Fr;
+use ark_ff::PrimeField;
+use ark_poly::univariate::DensePolynomial;
+use ark_poly::DenseUVPolynomial;
+use ark_std::ops::Div;
+use rs_merkle::Hasher;
+
+use fri::algorithms::Blake3;
+use komodo::error::KomodoError;
+
+fn run<F: PrimeField, H: Hasher, P>() -> Result<(), KomodoError>
+where
+    P: DenseUVPolynomial<F>,
+    for<'a, 'b> &'a P: Div<&'b P, Output = P>,
+    <H as rs_merkle::Hasher>::Hash: AsRef<[u8]>,
+{
+    // the code parameters and the data to manipulate
+    let (k, n) = (4, 16);
+    let bytes = include_bytes!("../assets/dragoon_133x133.png").to_vec();
+    eprintln!("loaded {} bytes of data", bytes.len());
+
+    let shards = komodo::fri::encode::<F>(&bytes, k, n);
+    let blocks = komodo::fri::prove::<2, F, H, P>(shards, 1, 1, 50).unwrap();
+    komodo::fri::verify::<2, F, H, P>(blocks[0].clone(), n, 50).unwrap();
+
+    Ok(())
+}
+
+fn main() {
+    run::<Fr, Blake3, DensePolynomial<Fr>>().unwrap();
+}