diff --git a/src/error.rs b/src/error.rs
index 10a1c9adc2fcc8c6cc089fbd33bed9a98a7c04c9..dbcf8e4954ca3e60ca55da094530f422ec94283d 100644
--- a/src/error.rs
+++ b/src/error.rs
@@ -3,30 +3,49 @@
 //! there are a few linear algebra errors and some related to ZK.
 use thiserror::Error;
 
+/// An error that Komodo could end up producing.
+///
+/// There are a few families of errors in Komodo:
+/// - related to _linear algebra_
+/// - related to FEC
+/// - related to proving the shards
 #[derive(Clone, Debug, Error, PartialEq)]
 pub enum KomodoError {
+    /// `{0}` is a custom error message when a matrix is invalid.
     #[error("Invalid matrix elements: {0}")]
     InvalidMatrixElements(String),
+    /// `{0}` and `{1}` are the shape of the rectangular matrix.
     #[error("Matrix is not a square, ({0} x {1})")]
     NonSquareMatrix(usize, usize),
+    /// `{0}` is the ID of the row where the matrix inversion failed.
     #[error("Matrix is not invertible at row {0}")]
     NonInvertibleMatrix(usize),
+    /// `{0}` and `{1}` are the shape of the left matrix and `{2}` and `{3}` are the shape of the
+    /// right matrix.
     #[error("Matrices don't have compatible shapes: ({0} x {1}) and ({2} x {3})")]
     IncompatibleMatrixShapes(usize, usize, usize, usize),
+    /// `{0}` and `{1}` are the IDs of the non-distinct _Vandermonde_ points and `{2}` is the list
+    /// of all the _Vandermonde_ points.
     #[error(
         "Seed points of a Vandermonde matrix should be distinct: {0} and {1} are the same ({2})"
     )]
     InvalidVandermonde(usize, usize, String),
+    /// `{0}` is the actual number of shards and `{1}` is the expected amount.
     #[error("Expected at least {1} shards, got {0}")]
     TooFewShards(usize, usize),
+    /// `{0}` is a custom error message when shards are incompatible.
     #[error("Shards are incompatible: {0}")]
     IncompatibleShards(String),
+    /// `{0}` is a custom error message when blocks are incompatible.
     #[error("Blocks are incompatible: {0}")]
     IncompatibleBlocks(String),
     #[error("Degree is zero")]
     DegreeIsZero,
+    /// `{0}` is the supported degree of the trusted setup and `{1}` is the actual requested
+    /// polynomnial degree
     #[error("too many coefficients: max is {0}, found {0}")]
     TooFewPowersInTrustedSetup(usize, usize),
+    /// `{0}` is a custom error message.
     #[error("Another error: {0}")]
     Other(String),
 }