Biomolecules, such as proteins, have diverse molecular functions that can be engineered for research and therapeutic uses. However, it remains challenging to rationally design protein functions due to the complex three-dimensional structure of proteins. Inspired by nature, scientists have developed directed evolution techniques that can quickly modify proteins to have desired specificity, stability, or binding affinity characteristics. Directed evolution requires generation and screening of large libraries of mutant proteins for desired characteristics. Current hypermutation techniques for generating mutant libraries in vivo are labor intensive, inefficient, and result in widespread, untargeted mutation. Additionally, these techniques generate many off target mutations outside the target sequence, which results in cellular toxicity and frequent false positives. There is therefore a need to develop user-friendly and efficient techniques for generating mutant libraries.