• TBD


  • Minimum rust version 1.27.2
  • Fix bug in streaming encoding (#90): if the underlying writer didn't write all the bytes given to it, the remaining bytes would not be retried later. See the docs on EncoderWriter::write.
  • Make it configurable whether or not to return an error when decoding detects excess trailing bits.


  • Remove line wrapping. Line wrapping was never a great conceptual fit in this library, and other features (streaming encoding, etc) either couldn‘t support it or could support only special cases of it with a great increase in complexity. Line wrapping has been pulled out into a line-wrap crate, so it’s still available if you need it.
    • Base64Display creation no longer uses a Result because it can't fail, which means its helper methods for common configs that unwrap() for you are no longer needed
  • Add a streaming encoder Write impl to transparently base64 as you write.
  • Remove the remaining unsafe code.
  • Remove whitespace stripping to simplify no_std support. No out of the box configs use it, and it's trivial to do yourself if needed: filter(|b| !b" \n\t\r\x0b\x0c".contains(b).
  • Detect invalid trailing symbols when decoding and return an error rather than silently ignoring them.


  • Update safemem


  • Derive Clone for DecodeError.


  • Add support for crypt(3)'s base64 variant.


  • decode_config_slice function for no-allocation decoding, analogous to encode_config_slice
  • Decode performance optimization


  • encode_config_slice function for no-allocation encoding


  • STANDARD_NO_PAD config
  • Base64Display heap-free wrapper for use in format strings, etc


  • Decode performance improvements
  • Use unsafe in fewer places
  • Added fuzzers


  • Avoid usize overflow when calculating length
  • Better line wrapping performance


  • Temporarily disable line wrapping
  • Add Apache 2.0 license


  • MIME support, including configurable line endings and line wrapping
  • Removed decode_ws
  • Renamed Base64Error to DecodeError


  • Allow decoding a AsRef<[u8]> instead of just a &str


  • Configurable padding
  • Encode performance improvements


  • Added encode/decode functions that do not allocate their own storage
  • Decode performance improvements
  • Extraneous padding bytes are no longer ignored. Now, an error will be returned.